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.

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 zachowanie | Co mówi dokumentacja Apple | Co robi z tym support |
|---|---|---|
| OrderLookupStatus 0 | Poprawne order ID. Odpowiedź zawiera tablicę z jedną lub więcej podpisanymi transakcjami | Zdekoduj każdą i odczytaj zakup |
| OrderLookupStatus 1 | Odpowiedź nie zawiera tablicy signedTransactions | Traktuj order ID jako nieważne dla twojej aplikacji. Poproś o właściwy paragon |
| productId i purchaseDate | Apple wskazuje te pola do obsługi klienta | Potwierdź, co i kiedy kupiono |
| revocationDate | Moment, w którym App Store zwrócił pieniądze za transakcję lub cofnął ją z Chmury rodzinnej | Jeśli jest ustawione, Apple już oddał klientowi pieniądze |
| revocationReason | 0: zwrot z innych powodów, np. przypadkowy zakup. 1: zwrot z powodu rzeczywistego lub domniemanego problemu w twojej aplikacji | 1 to sygnał produktowy, nie tylko zgłoszenie do supportu |
| appAccountToken | UUID ustawiony przy zakupie, jeśli go ustawiłeś | Powiąż zamówienie z własnym rekordem użytkownika |
| price i currency | Apple zaleca, by nie używać ich do uzgadniania przychodów | Do rozliczeń używaj raportów App Store Connect |
| Sandbox | Endpoint nie jest dostępny w środowisku sandbox | Testuj 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-After | Wystarczy 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.

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.
| Pytanie | Order ID z App Store | Order ID z Google Play |
|---|---|---|
| Gdzie klient je znajdzie | Paragon e-mailem i historia zakupów w App Store | Paragon e-mailem dla każdego zakupu i każdego odnowienia |
| Jak je sprawdzisz | Look Up Order ID w App Store Server API | Wyszukiwanie w Zarządzaniu zamówieniami w Play Console |
| Czy możesz na jego podstawie zwrócić pieniądze | Nie. Decyduje Apple | Tak. Pełne zwroty oraz częściowe dla zakupów w aplikacji i subskrypcji |
| Okno dowodowe przy zwrocie | CONSUMPTION_REQUEST, 12 godzin, decyduje Apple | Przegląd chargebacku przez orders.reviewrefund, 24 godziny |
| Czy zwrot można cofnąć | Nie przez ciebie | Nie. 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
- Apple Developer Documentation: Look Up Order ID
- Apple Developer Documentation: orderId
- Apple Developer Documentation: revocationReason
- Apple Developer Documentation: Identifying rate limits
- Apple Support: See your purchase history for the App Store, iTunes Store, and more
- Apple Support: Request a refund for apps or content that you bought from Apple
- Play Console Help: Refund orders and subscriptions
- Android Developers: Integrate the Google Play Billing Library into your app
RefundHalt
Autopilot zwrotów dla App Store i Google Play
Czytaj dalej
Zwroty za płatności przez web checkout w iOS trafiają do Ciebie, nie do Apple, podobnie jak spory bankowe
Amerykańskie aplikacje na iPhone'a mogą teraz kierować kupujących do płatności przez stronę internetową. Apple twierdzi, że nie pomoże przy zwrotach za te zakupy, więc obsługa zwrotów, chargebacki i opłaty za spór w wysokości $15 przechodzą na Ciebie. Oto co się zmienia, ile to kosztuje i jak ograniczyć liczbę sporów.
Zwrot za płatną aplikację nigdy nie trafia na twój serwer, więc musi go wykryć sama aplikacja
Zwroty za aplikacje płatne z góry omijają wszystkie powiadomienia, których nasłuchuje twój serwer. Google daje kupującym dwie godziny na zwrot i odinstalowuje aplikację, Apple może zwrócić pieniądze w ciągu 90 dni na mocy twojej umowy, a żaden z nich nie prosi o dowody. Oto co mówi każdy sklep, ile to kosztuje i jak to sprawdzić w aplikacji.