Każde odnowienie ma własny numer zamówienia Google Play i to właśnie ten numer trzeba sprawdzić, zanim komukolwiek zwrócisz pieniądze
Numer zamówienia Google Play, taki jak GPA.1234-5678-9012-34567..2, wskazuje jedno konkretne obciążenie. Wyjaśniamy, jak odczytać sufiks odnowienia, znaleźć zamówienie w Play Console lub przez Orders API i zwrócić to obciążenie, o które chodzi klientowi, nie płacąc za niewłaściwe.

Najważniejsze wnioski
- Numer zamówienia Google Play wygląda tak: GPA.1234-5678-9012-34567. Odnowienia subskrypcji dostają sufiks, więc GPA.1234-5678-9012-34567..0 to pierwsze odnowienie tej subskrypcji.
- Metoda getOrderId() z Play Billing Library przy odnowieniach subskrypcji zwraca numer pierwotnego zamówienia, a nie własny numer odnowienia, i zwraca null, dopóki zakup ma stan PENDING.
- 21 maja 2025 r. Google dodał metody get i batchGet do zasobu Orders w Play Developer API. batchGet przyjmuje od 1 do 1000 unikalnych numerów zamówień, a całe żądanie kończy się błędem, jeśli którykolwiek z nich nie zostanie znaleziony.
- Order z Orders API ma stan PENDING, PROCESSED, CANCELED, PENDING_REFUND, PARTIALLY_REFUNDED lub REFUNDED oraz pole developerRevenueInBuyerCurrency, czyli przychód pomniejszony o częściowe zwroty, podatki i opłaty.
- Metoda orders.refund w Google Play nie zwróci środków za zamówienia starsze niż 3 lata, a przekazanie revoke=true natychmiast odbiera klientowi dostęp do subskrypcji lub produktu.
- W Play Console opcja Zwróć środki i cofnij dostęp (Refund and revoke) dotyczy najnowszego zamówienia w subskrypcji, a Tylko zwrot środków (Refund only) dotyczy starszego zamówienia i pozostawia subskrypcję aktywną.
- Prośby o zwrot w ciągu 48 godzin od zakupu Google Play obsługuje sam. Po 48 godzinach kieruje klientów do dewelopera i wtedy zwykle numer zamówienia trafia do Twojej skrzynki wsparcia.
Zanim zwrócisz pieniądze klientowi Google Play, spójrz na koniec numeru zamówienia. GPA.1234-5678-9012-34567 to pierwsze obciążenie w subskrypcji. GPA.1234-5678-9012-34567..2 to trzecie. Mają wspólną podstawę, ale to różne płatności, a Play Console traktuje je inaczej przy zwrocie. Numer zamówienia Google Play to jedyny identyfikator, który widzi klient, więc to on trafia do Twojej skrzynki wsparcia. Odczytaj go poprawnie, a zwrócisz dokładnie to obciążenie, na które klient się skarży, i tylko raz.
Co mówi numer zamówienia Google Play
Dokumentacja Play Billing Library od Google przedstawia format na przykładzie. Numer zamówienia zaczyna się od GPA, po którym następują grupy cyfr. W subskrypcjach każde odnowienie dostaje podstawowy numer zamówienia z dwiema kropkami i licznikiem zaczynającym się od zera. Pierwotny zakup nie ma więc sufiksu, pierwsze odnowienie to ..0, drugie ..1 i tak dalej.
Sufiks pozwala więc szybko ocenić, jak długo ktoś płaci. Klient piszący w sprawie GPA.3333-4137-0319-36762..11 był odnawiany dwanaście razy. Klient podający sam numer podstawowy albo kupił coś jednorazowo, albo wskazuje swoją pierwszą płatność.
| Numer zamówienia | Co oznacza |
|---|---|
| GPA.1234-5678-9012-34567 | Zakup jednorazowy lub pierwsze obciążenie w subskrypcji |
| GPA.1234-5678-9012-34567..0 | Pierwsze odnowienie tej subskrypcji |
| GPA.1234-5678-9012-34567..1 | Drugie odnowienie |
| null w Billing Library | Zakup wciąż w stanie PENDING, zanim Google przetworzy płatność |
Gdzie pojawia się numer zamówienia i którą wersję dostajesz
Tu zespoły najczęściej się potykają. Różne miejsca podają różne formy tego samego numeru.
- Potwierdzenie Google Play klienta pokazuje numer zamówienia tego obciążenia, którego dotyczy, również przy odnowieniach.
- W aplikacji Purchase.getOrderId() z Play Billing Library przy odnowieniach subskrypcji zwraca numer pierwotnego zamówienia. Przykład samego Google: zamiast GPA.1234-5678-9012-34567..0 dostajesz GPA.1234-5678-9012-34567.
- Na serwerze purchases.subscriptionsv2 podaje dla każdej pozycji latestSuccessfulOrderId, czyli numer ostatniego udanego zamówienia dla tego produktu. Google dodał to pole 21 maja 2025 r.
- W Voided Purchases API orderId jednoznacznie identyfikuje zakup jednorazowy, zakup subskrypcji lub odnowienie subskrypcji. Dokumentacja Google zaleca używanie orderId, a nie tokena zakupu, do rozróżniania odnowień.
Do czego zamiast tego służy token zakupu
Token zakupu (purchaseToken) identyfikuje zakup jako całość. W subskrypcji jeden token obejmuje pierwotne obciążenie i każde kolejne odnowienie. Dlatego to dobry klucz do uprawnień i zły klucz do zwrotu. Zwroty i obciążenia zwrotne dotyczą pojedynczego obciążenia, a pojedyncze obciążenie wskazuje tylko numer zamówienia.
Jak znaleźć zamówienie Google Play
W Play Console
Zarządzanie zamówieniami (Order management) przyjmuje w polu wyszukiwania numer zamówienia albo pełny adres e-mail klienta. Każde zamówienie ma jeden z tych stanów: Przetworzone (Processed), Anulowane (Cancelled), Oczekujące (Pending), Oczekuje na zwrot (Pending refund), Zwrócone (Refunded), Oczekuje na częściowy zwrot (Pending partial refund) lub Częściowo zwrócone (Partially refunded). Jeśli klient zamiast potwierdzenia poda e-mail, wyszukaj po adresie, wybierz obciążenie po dacie i sprawdź sufiks, zanim cokolwiek zrobisz.
Przez Orders API
Od 21 maja 2025 r. zasób Orders w Google Play Developer API ma orders.get dla jednego zamówienia i orders.batchget dla listy. W praktyce liczy się kilka ograniczeń:
- batchget przyjmuje od 1 do 1000 numerów zamówień na żądanie i muszą one być unikalne.
- Jeśli choć jeden numer zamówienia nie zostanie znaleziony lub nie należy do pakietu, całe żądanie batchget kończy się błędem.
- Wywołania Orders API wliczają się do limitu Play Developer API, który domyślnie wynosi 200 000 wywołań dziennie.
Najbardziej przydatny jest zwracany obiekt Order. Zawiera stan zamówienia, jego purchaseToken, createTime i lastEventTime, kwotę całkowitą i podatek, salesChannel, na przykład IN_APP lub PLAY_STORE, oraz orderHistory ze zdarzeniami przetworzenia, anulowania, zwrotu i częściowego zwrotu. Ma też pole developerRevenueInBuyerCurrency, które Google definiuje jako Twój przychód w walucie kupującego, pomniejszony o częściowe zwroty, podatki i opłaty. Gdy Google jest sprzedawcą (merchant of record), adres kupującego zawiera tylko kraj.
| Stan zamówienia | Co mówi dokumentacja Google |
|---|---|
| PENDING | Utworzone i czeka na przetworzenie |
| PROCESSED | Przetworzone pomyślnie |
| CANCELED | Anulowane przed przetworzeniem |
| PENDING_REFUND | Zgłoszony zwrot czeka na przetworzenie |
| PARTIALLY_REFUNDED | Zwrócono część kwoty zamówienia |
| REFUNDED | Zwrócono pełną kwotę zamówienia |
Zwrot za właściwe zamówienie
Gdy już wiesz, o które obciążenie chodzi klientowi, Play Console daje wybór zależny od tego, gdzie to zamówienie znajduje się w subskrypcji.
| Opcja | Dotyczy | Co się dzieje |
|---|---|---|
| Zwróć środki i cofnij dostęp (Refund and revoke) | Najnowszego zamówienia w subskrypcji | Zwrot wykonany, subskrypcja natychmiast usunięta, przyszłe odnowienia anulowane |
| Tylko zwrot środków (Refund only) | Starszego zamówienia w subskrypcji | Zwrot wykonany, subskrypcja pozostaje aktywna |
| Częściowy zwrot (Partial refund) | Zakupów w aplikacji i subskrypcji zamówionych po marcu 2018 r., nie płatnych aplikacji | Dowolny procent poniżej 100% lub kwota netto niższa niż suma zamówienia |
| Anuluj subskrypcję (Cancel subscription) | Aktywnej subskrypcji | Brak zwrotu, dostęp trwa do końca bieżącego okresu rozliczeniowego |
Przez API orders.refund przyjmuje nazwę pakietu i numer zamówienia. Zamówień starszych niż 3 lata nie można zwrócić. Opcjonalny parametr revoke ustawiony na true natychmiast kończy dostęp do subskrypcji lub produktu w aplikacji. Pomoc Google zaznacza też, że zwrotu nie da się cofnąć po jego wykonaniu, więc przekazany numer zamówienia jest ostateczny.
Dlaczego u subskrybenta pojawia się zamówienie na 0,00 USD?
Wyjaśnia to dokumentacja Google o cyklu życia subskrypcji. Gdy użytkownik ponownie zapisze się w Twojej aplikacji na ten sam plan podstawowy, zanim jego subskrypcja wygaśnie, Google Play tworzy zamówienie na 0,00 USD. Nie jest obciążany, bo już zapłacił za bieżący okres, a normalne rozliczenia wracają w pierwotnej dacie odnowienia. To nie jest bezpłatny okres próbny ani promocja. Przy tym zamówieniu nie ma czego zwracać. Jeśli klient chce pieniędzy z powrotem, znajdź wcześniejsze, opłacone zamówienie.
Ile kosztuje zwrot za niewłaściwe zamówienie
Zwrot oddaje cenę. Częściowe zwroty działają tak samo, proporcjonalnie. Przykład Google: częściowy zwrot 50% odbiera też 50% Twojej wypłaty i 50% opłaty serwisowej. Nie wraca natomiast nic z tego, co wydałeś na obsługę tego klienta: moc obliczeniowa, wywołania zewnętrznych API, przechowywanie danych, ewentualne prowizje partnerskie. Zwróć niewłaściwe zamówienie, a zapłacisz za to dwa razy.
Tak to wygląda w praktyce. Klient z planem miesięcznym pisze w sprawie obciążenia ..4 z zeszłego tygodnia. Ktoś z zespołu wyszukuje po e-mailu, widzi pierwsze zamówienie na górze listy i klika Tylko zwrot środków przy zamówieniu podstawowym sprzed kilku miesięcy. Klient dostaje zwrot za okres, z którego korzystał. Obciążenie, na które się skarżył, pozostaje nietknięte, a subskrypcja nadal się odnawia. Wciąż może poprosić bank o cofnięcie obciążenia z zeszłego tygodnia.

Droga przez bank jest dziś tą kosztowną. W przypadku zamówień złożonych po 3 sierpnia 2026 r. Google wskazuje, że gdy obciążenie zwrotne zostanie uznane, deweloper odpowiada za cenę zakupu pomniejszoną o opłatę serwisową Play, plus opłaty za obciążenie zwrotne naliczone przez bank. Obciążenia zwrotne są w banku ostateczne. Jeden źle odczytany sufiks może skończyć się utratą równowartości dwóch zwrotów, plus opłaty.
Które zwroty nigdy nie trafią do Twojej skrzynki
Większość zwrotów w Google Play w ogóle nie wymaga ani Ciebie, ani numeru zamówienia. Zasady zwrotów Google mówią, że klient może otrzymać zwrot przez Google Play w ciągu 48 godzin od zakupu, a po 48 godzinach powinien skontaktować się z deweloperem. Google zwraca też środki i cofa dostęp do subskrypcji, których nie potwierdzisz w ciągu trzech dni. Dowiadujesz się o tym po fakcie z Voided Purchases API, które podaje voidedSource (0 dla User, 1 dla Developer, 2 dla Google) oraz voidedReason, na przykład Remorse, Chargeback lub Unacknowledged_purchase.
Tylko jeden proces zwrotu w Google Play pyta o Twoje stanowisko. Gdy obciążenie zwrotne wymaga oceny dewelopera, masz 24 godziny na odpowiedź przez orders.reviewrefund z preferencją zwrotu APPROVE, DECLINE lub NEUTRAL oraz dowodami korzystania z zakupu. RefundHalt odpowiada na tę ocenę za Ciebie w wyznaczonym czasie, korzystając z danych o użyciu, które już masz, więc sporne zamówienie dostaje Twoje dowody zamiast milczenia.
Krótka lista kontrolna dla zgłoszeń z numerem zamówienia
- Poproś o pełny numer zamówienia z potwierdzenia Google Play, razem z sufiksem.
- Wyszukaj go w Play Console lub przez orders.get i najpierw sprawdź jego stan.
- Upewnij się, że data obciążenia zgadza się z opisem klienta.
- Używaj opcji Zwróć środki i cofnij dostęp tylko przy najnowszym zamówieniu, a Tylko zwrot środków przy starszych.
- Zapisz numer zamówienia, za które zwróciłeś środki, żeby późniejsze obciążenie zwrotne innego zamówienia łatwo było zauważyć.
Często zadawane pytania
- Co oznacza ..0 na końcu numeru zamówienia Google Play?
- Oznacza pierwsze odnowienie subskrypcji. Google Play nadaje każdemu odnowieniu podstawowy numer zamówienia subskrypcji z dwiema kropkami i licznikiem zaczynającym się od zera, więc GPA.1234-5678-9012-34567..0 to pierwsze odnowienie, a ..1 drugie. Numer podstawowy bez sufiksu to pierwotne obciążenie.
- Dlaczego getOrderId() w mojej aplikacji zwraca inny numer zamówienia niż ten na potwierdzeniu klienta?
- Bo Play Billing Library przy odnowieniach subskrypcji zwraca numer pierwotnego zamówienia. Przykład Google: zamiast GPA.1234-5678-9012-34567..0 dla pierwszego odnowienia getOrderId() zwraca GPA.1234-5678-9012-34567. Aby uzyskać własny numer odnowienia, użyj na serwerze latestSuccessfulOrderId z purchases.subscriptionsv2.
- Jak znaleźć zamówienie Google Play po numerze zamówienia?
- Wyszukaj je w Zarządzaniu zamówieniami w Play Console, które przyjmuje numer zamówienia lub pełny adres e-mail klienta, albo wywołaj orders.get w Google Play Developer API. orders.batchget wyszukuje od 1 do 1000 unikalnych numerów naraz, a całe żądanie kończy się błędem, jeśli którykolwiek z nich nie zostanie znaleziony.
- Czy mogę zwrócić środki za zamówienie Google Play starsze niż rok?
- Tak, do 3 lat. Dokumentacja orders.refund od Google mówi, że zamówień starszych niż 3 lata nie można zwrócić. Przy starszym zamówieniu w subskrypcji opcja Tylko zwrot środków w Play Console oddaje pieniądze i pozostawia subskrypcję aktywną.
- Dlaczego u subskrybenta jest zamówienie Google Play na 0,00 USD?
- Pojawia się, gdy użytkownik ponownie zapisze się w Twojej aplikacji na ten sam plan podstawowy, zanim jego subskrypcja wygaśnie. Użytkownik nie jest obciążany, bo już zapłacił za bieżący okres, a zwykłe rozliczenia wracają w pierwotnej dacie odnowienia. Google zaznacza, że nie oznacza to przyznania bezpłatnego okresu próbnego ani rabatu promocyjnego.
Źródła i materiały dodatkowe
- Android Developers: Purchase (Play Billing Library), getOrderId
- Google Play Developer API: REST Resource orders
- Google Play Developer API: orders.batchget
- Google Play Developer API: orders.refund
- Google Play Developer API release notes
- Google Play Developer API: purchases.voidedpurchases
- Play Console Help: Issue refunds or cancel orders
- Google Play Billing: Subscription lifecycle
- Google Play Help: Apps, games and in-app purchases refund policies
- Google Play Console Help: Updates to refund protection and chargeback cost responsibility
RefundHalt
Autopilot zwrotów dla App Store i Google Play
Czytaj dalej
Nadmierne prośby o zwrot mogą kosztować więcej niż same zwroty, bo oba sklepy z aplikacjami traktują je jako sygnał jakości
Wytyczna 5.6.4 Apple wprost wskazuje nadmierne prośby o zwrot jako oznakę, że aplikacja nie spełnia standardów jakości, a umowa dystrybucyjna Google pozwala usuwać aplikacje nowych deweloperów z powodu wskaźnika zwrotów. Oto co piszą oba sklepy, ile kosztuje usunięcie i jak trzymać się z dala od kłopotów.
Weryfikuj powiadomienia serwera App Store, zanim zareagujesz na zwrot, bo każdy może wysłać żądanie na Twój adres webhooka
Powiadomienie o zwrocie to tylko żądanie HTTPS, dopóki nie sprawdzisz jego podpisu. Oto jak weryfikować powiadomienia serwera App Store i wiadomości RTDN z Google Play, co podpisuje każdy ze sklepów i ile kosztuje Cię sfałszowany lub błędnie odrzucony zwrot.