Wszystkie artykuły
Poradnik7 min czytania

Order ID z App Store na paragonie klienta mówi ci, co kupił i czy Apple już zwrócił pieniądze

Endpoint Look Up Order ID od Apple zamienia order ID z paragonu App Store na podpisane transakcje, z datą i powodem zwrotu. Oto jak używać go przy mailach o zwrot, czego nie potrafi i jak wypada na tle order ID z Google Play.

Biurko obsługi klienta z pocztą na laptopie i iPhonem z potwierdzeniem zakupu, gdzie order ID z App Store otwiera rozmowę o zwrocie

Najważniejsze wnioski

  • Apple wysyła e-mailem paragon z order ID przy każdym zakupie w aplikacji, a klienci znajdą swoje order ID także w historii zakupów w App Store.
  • Endpoint Look Up Order ID w App Store Server API (GET /inApps/v1/lookup/{orderId}) zwraca dla poprawnego order ID jedną lub więcej podpisanych transakcji, więc support widzi productId i purchaseDate bez zgadywania.
  • Zdekodowana transakcja App Store zawiera revocationDate i revocationReason, więc sprawdzenie order ID pokazuje, czy Apple już zwrócił pieniądze za zakup. Powód 1 oznacza, że Apple zwrócił je z powodu rzeczywistego lub domniemanego problemu w aplikacji.
  • Look Up Order ID zwraca OrderLookupStatus 1 i brak tablicy signedTransactions, gdy order ID nie jest ważne dla twojej aplikacji, co wskazuje na zły paragon albo zakup z innej aplikacji.
  • Look Up Order ID nie jest dostępny w środowisku sandbox Apple, a limit zapytań w produkcji to 10 na sekundę na aplikację, egzekwowany w skali godziny.
  • Deweloperzy nie mogą zwracać pieniędzy za zakupy w App Store. Apple decyduje o tym na reportaproblem.apple.com, a jedynym krokiem dowodowym dewelopera jest odpowiedź na CONSUMPTION_REQUEST w ciągu 12 godzin.
  • Google Play wysyła e-mailem order ID dla każdego jednorazowego zakupu i każdego odnowienia subskrypcji, a deweloper może wyszukać to order ID w Play Console i zwrócić pieniądze bezpośrednio. Według Play Console zwrotu nie można cofnąć.

Zanim odpowiesz na maila klienta z iPhone'a w sprawie zwrotu, poproś o order ID z App Store na jego paragonie od Apple. Ten jeden ciąg znaków, przepuszczony przez endpoint Look Up Order ID od Apple, mówi ci, jaki produkt kupił, kiedy i czy Apple już zwrócił mu pieniądze. Bez niego porównujesz zrzut ekranu i adres e-mail ze swoją bazą danych i masz nadzieję. Z nim w kilka sekund wiesz, czy rozmawiasz z płacącym klientem, z klientem, któremu Apple już oddał pieniądze, czy z kimś, kto trzyma paragon z innej aplikacji.

Skąd się bierze order ID z App Store

Dokumentacja Apple jest konkretna. Gdy klienci dokonują jednego lub więcej zakupów w twojej aplikacji, App Store wysyła im e-mailem paragon, a ten paragon zawiera order ID. Klienci znajdą swoje order ID także w historii zakupów w App Store. Historia zakupów Apple jest dostępna na reportaproblem.apple.com oraz w aplikacji App Store w sekcji Aplikacje i historia zakupów, i domyślnie pokazuje ostatnie 90 dni, z filtrami dla starszych zakupów.

Klient ma więc już klucz. Twój formularz supportu musi tylko o niego zapytać.

Dlaczego adres e-mail nie wystarczy

Apple nie udostępnia ci adresu e-mail z Apple Account klienta. Adres, z którego ktoś pisze do twojego supportu, może nie mieć nic wspólnego z kontem, które zapłaciło. Jeśli przy zakupie ustawiasz appAccountToken, możesz powiązać transakcję z własnym ID użytkownika, ale tylko po swojej stronie. Order ID działa od strony klienta, dzięki paragonowi, który może przekazać jednym dotknięciem.

Co zwraca Look Up Order ID

Look Up Order ID jest częścią App Store Server API, dostępną od wersji 1.1.0. Wywołujesz GET https://api.storekit.apple.com/inApps/v1/lookup/{orderId} z podpisanym JWT. Apple podaje, że odpowiedź opiera się na historii zakupów w aplikacji klienta, niezależnie od tego, czy zainstalował, usunął czy ponownie zainstalował aplikację.

Pole lub zachowanieCo mówi dokumentacja AppleCo robi z tym support
OrderLookupStatus 0Poprawne order ID. Odpowiedź zawiera tablicę z jedną lub więcej podpisanymi transakcjamiZdekoduj każdą i odczytaj zakup
OrderLookupStatus 1Odpowiedź nie zawiera tablicy signedTransactionsTraktuj order ID jako nieważne dla twojej aplikacji. Poproś o właściwy paragon
productId i purchaseDateApple wskazuje te pola do obsługi klientaPotwierdź, co i kiedy kupiono
revocationDateMoment, w którym App Store zwrócił pieniądze za transakcję lub cofnął ją z Chmury rodzinnejJeśli jest ustawione, Apple już oddał klientowi pieniądze
revocationReason0: zwrot z innych powodów, np. przypadkowy zakup. 1: zwrot z powodu rzeczywistego lub domniemanego problemu w twojej aplikacji1 to sygnał produktowy, nie tylko zgłoszenie do supportu
appAccountTokenUUID ustawiony przy zakupie, jeśli go ustawiłeśPowiąż zamówienie z własnym rekordem użytkownika
price i currencyApple zaleca, by nie używać ich do uzgadniania przychodówDo rozliczeń używaj raportów App Store Connect
SandboxEndpoint nie jest dostępny w środowisku sandboxTestuj tylko na order ID z produkcji
Limit zapytań10 zapytań na sekundę na aplikację, egzekwowany co godzinę. Nadmiar dostaje HTTP 429 z nagłówkiem Retry-AfterWystarczy dla supportu, nie dla masowych skanów

Czy paragon jest ważny dla mojej aplikacji?

Na to pytanie OrderLookupStatus odpowiada w pierwszej kolejności. 1 oznacza, że order ID nie pasuje do zakupów w twojej aplikacji. Typowe przypadki to literówka, paragon z innej aplikacji albo paragon, który w ogóle nie pochodzi z App Store. Przy 1 niczego nie zwracaj, nie przyznawaj kredytów i nie przywracaj dostępu. Poproś klienta, by jeszcze raz sprawdził paragon.

Czy Apple już zwrócił pieniądze za ten zakup?

Sprawdź revocationDate w każdej zdekodowanej transakcji. Jeśli jest ustawione, Apple już zwrócił pieniądze za zakup lub cofnął go z Chmury rodzinnej, a klient ma swoje pieniądze. Twoje App Store Server Notifications powinny były wysłać REFUND dla tej samej transakcji, więc to także tani sposób, by potwierdzić, że serwer naprawdę odebrał dostęp.

Deweloper porównuje wydrukowany paragon z App Store z wierszami transakcji na laptopie, sprawdzając order ID z App Store przed odpowiedzią na prośbę o zwrot

Czego order ID nie zrobi w App Store

Nie zwróci pieniędzy. Deweloperzy nie mają w App Store przycisku zwrotu. O zwrotach decyduje Apple, a artykuł pomocy Apple kieruje klientów na reportaproblem.apple.com, gdzie wybierają „Chcę”, potem „Poproś o zwrot pieniędzy”, podają powód i zaznaczają pozycję. Apple dodaje, że oczekującej płatności nie da się zwrócić, dopóki klient nie dostanie paragonu e-mailem.

Jedyne miejsce, gdzie masz głos, to CONSUMPTION_REQUEST od Apple. Gdy klient prosi Apple o zwrot, Apple może wysłać to powiadomienie, a ty masz 12 godzin na odpowiedź przez Send Consumption Information. Sprawdzenie order ID to narzędzie supportu. Nie otwiera tego okna ani go nie wydłuża.

Ile kosztuje mail o zwrot, gdy pominiesz sprawdzenie

Support bez order ID to miejsce, gdzie pieniądze cicho wyciekają. Trzy wzorce powtarzają się raz za razem.

  • Gest dobrej woli na dokładkę do zwrotu. Apple zwraca pieniądze za zakup, klient pisze także do ciebie, a support daje darmowe kredyty albo dodatkowy miesiąc. Każdy rozdany kredyt działa na mocy obliczeniowej, wywołaniach API i przestrzeni dyskowej, za które płacisz, na koncie, które już dostało zwrot.
  • Dostęp, którego nigdy nie odebrano. Jeśli obsługa REFUND zawiodła, klient po zwrocie dalej korzysta z usługi. Sprawdzenie, które pokazuje revocationDate, gdy twoja baza wciąż mówi aktywny, to zgłoszenie błędu z ceną.
  • Złe konto, złe rozwiązanie. Przywrócenie dostępu albo przyznanie kredytu kontu z przekazanego maila, gdy order ID należy do kogoś innego, daje płatną usługę osobie, która nigdy niczego nie kupiła.

Żaden z tych wzorców nie potrzebuje chargebacku ani terminu, żeby zaboleć. To po prostu odpowiedzi supportu bez faktów. Jedno wywołanie API na zgłoszenie usuwa zgadywanie.

Czy revocationReason 1 oznacza, że zrobiłem coś źle?

Niekoniecznie. Według Apple powód 1 oznacza zwrot z powodu rzeczywistego lub domniemanego problemu w twojej aplikacji. Słowo domniemany waży tu sporo. Ale skupisko zwrotów z powodem 1 na jednym produkcie, po jednym wydaniu, to najwyraźniejszy feedback produktowy, jaki daje ci Apple. Licz je.

Jak wypada order ID z Google Play

Google Play działa odwrotnie. Dokumentacja płatności Google mówi, że użytkownicy dostają e-mail z unikalnym order ID dla każdego jednorazowego zakupu produktu, dla pierwszego zakupu subskrypcji i dla każdego kolejnego odnowienia, a order ID możesz wykorzystać do zarządzania zwrotami w Play Console. Wyszukujesz w Zarządzaniu zamówieniami po order ID lub pełnym adresie e-mail użytkownika, a potem sam zwracasz pieniądze.

PytanieOrder ID z App StoreOrder ID z Google Play
Gdzie klient je znajdzieParagon e-mailem i historia zakupów w App StoreParagon e-mailem dla każdego zakupu i każdego odnowienia
Jak je sprawdziszLook Up Order ID w App Store Server APIWyszukiwanie w Zarządzaniu zamówieniami w Play Console
Czy możesz na jego podstawie zwrócić pieniądzeNie. Decyduje AppleTak. Pełne zwroty oraz częściowe dla zakupów w aplikacji i subskrypcji
Okno dowodowe przy zwrocieCONSUMPTION_REQUEST, 12 godzin, decyduje ApplePrzegląd chargebacku przez orders.reviewrefund, 24 godziny
Czy zwrot można cofnąćNie przez ciebieNie. Według Play Console zwrotu nie można cofnąć

W Google Play order ID znaczy więcej, bo to ty naciskasz przycisk. Według Play Console zwrot najnowszego zamówienia subskrypcji od razu usuwa subskrypcję i anuluje przyszłe odnowienia, a zwrot starszego zamówienia to tylko zwrot i subskrypcja zostaje aktywna. Częściowe zwroty są obsługiwane tylko dla zamówień złożonych od marca 2018, a płatnej aplikacji nie zwrócisz częściowo.

Postaw order ID na początku obsługi zwrotów

  • Proś o order ID w formularzu supportu, z jednolinijkową wskazówką: jest w mailu z paragonem od Apple lub Google Play.
  • Na iOS wywołaj Look Up Order ID, zdekoduj każdą transakcję i pokaż supportowi productId, purchaseDate, revocationDate i revocationReason na jednym ekranie.
  • Jeśli OrderLookupStatus to 1, zatrzymaj się i poproś o właściwy paragon. Niczego nie przyznawaj.
  • Jeśli revocationDate jest ustawione, potwierdź, że dostęp na twoim serwerze jest już odebrany, i zamknij zgłoszenie. Bez gestów dobrej woli na dokładkę.
  • Jeśli nie jest ustawione, a klient chce zwrotu pieniędzy, skieruj go na reportaproblem.apple.com i trzymaj handler CONSUMPTION_REQUEST w gotowości na 12-godzinne okno. RefundHalt odpowiada na to żądanie danymi o zużyciu, o które prosi Apple.
  • Na Androidzie znajdź dokładne zamówienie w Play Console, zanim zwrócisz pieniądze, i świadomie wybierz między samym zwrotem a zwrotem z odebraniem dostępu.

Często zadawane pytania

Jak jako deweloper sprawdzić order ID z App Store?
Wywołaj endpoint Look Up Order ID w App Store Server API, GET https://api.storekit.apple.com/inApps/v1/lookup/{orderId}, z podpisanym JWT. Poprawne order ID zwraca OrderLookupStatus 0 i jedną lub więcej podpisanych transakcji, które dekodujesz, by odczytać productId, purchaseDate i ewentualne szczegóły zwrotu. Endpoint nie jest dostępny w sandboxie.
Gdzie klient znajdzie swoje order ID z App Store?
W paragonie, który Apple wysyła e-mailem przy każdym zakupie w aplikacji, oraz w historii zakupów w App Store na reportaproblem.apple.com lub w sekcji Aplikacje i historia zakupów w aplikacji App Store. Historia zakupów domyślnie pokazuje ostatnie 90 dni, z filtrami dla starszych zakupów.
Czy mogę zwrócić pieniądze za zakup w App Store na podstawie order ID?
Nie. Deweloperzy nie mogą zwracać pieniędzy za zakupy w App Store. Decyduje Apple, gdy klient poprosi o zwrot na reportaproblem.apple.com. Twój wkład to odpowiedź na CONSUMPTION_REQUEST od Apple w ciągu 12 godzin przez Send Consumption Information.
Jak sprawdzić, czy Apple już zwrócił pieniądze za zakup?
Sprawdź order ID i zobacz revocationDate w każdej zdekodowanej transakcji. Jeśli jest ustawione, Apple zwrócił pieniądze za zakup lub cofnął go z Chmury rodzinnej. revocationReason 0 oznacza inne powody, np. przypadkowy zakup, a 1 rzeczywisty lub domniemany problem w twojej aplikacji.
Co oznacza OrderLookupStatus 1?
Oznacza, że order ID nie jest ważne dla twojej aplikacji, a odpowiedź nie ma tablicy signedTransactions. Zwykle klient wysłał paragon z innej aplikacji, pomylił się w ID albo wysłał paragon, który nie pochodzi z App Store. Poproś o właściwy paragon, zanim cokolwiek przyznasz.

Źródła i materiały dodatkowe

RefundHalt

Autopilot zwrotów dla App Store i Google Play

Czytaj dalej

Kolejny wniosek o zwrot jest już w drodze.

Skonfiguruj RefundHalt w czasie potrzebnym na przeczytanie kolejnej wiadomości od pomocy technicznej o zwrocie, którego nie udało Ci się zakwestionować.