Wszystkie artykuły
Dogłębna analiza8 min czytania

Weryfikacja obciążenia zwrotnego w Google Play daje ci 24 godziny na obronę, oto co wysłać

Gdy bank cofa płatność w Google Play, Google wysyła na twój serwer PendingRefundReviewNotification i uruchamia 24-godzinny zegar. Odpowiedz przez API ReviewRefund z preferencją zwrotu i realnym dowodem zużycia, albo spór zostanie rozstrzygnięty bez ciebie. Oto cały przepływ, pole po polu.

Smartfon pokazujący ekran sporu płatniczego obok karty bankowej i małej klepsydry na ciemnym biurku, ilustrujący 24-godzinny zegar weryfikacji obciążenia zwrotnego w Google Play

Najważniejsze wnioski

  • Weryfikacja obciążenia zwrotnego w Google Play zaczyna się, gdy bank klienta cofa płatność, a Google Play wysyła na twój serwer PendingRefundReviewNotification. Od tego powiadomienia masz 24 godziny na odpowiedź przez API ReviewRefund.
  • Weryfikacja obciążenia zwrotnego to jedyny przepływ zwrotów w Androidzie, który prosi dewelopera o dowody. Samoobsługowy zwrot w ciągu 48 godzin, zwroty przez wsparcie i anulowane zakupy są rozstrzygane bez ciebie.
  • Odpowiadasz, wywołując orders.reviewrefund z refundPreference o wartości APPROVE, DECLINE lub NEUTRAL, wraz z dowodami: wartością consumptionPercentageMilliunits i opcjonalną listą zdarzeń zużycia.
  • Google Play zapisuje tylko twoje pierwsze wywołanie ReviewRefund dla danego powiadomienia. Każde późniejsze wywołanie jest ignorowane i nadal zwraca OK, więc twoja pierwsza odpowiedź musi być kompletna i poprawna.
  • Powiadomienie niesie pendingRefundToken i orderId, a jedynym powodem zwrotu, który obsługuje oczekująca weryfikacja, jest CHARGEBACK, który przychodzi jako code 7.
  • consumptionPercentageMilliunits jest mierzone w mili-jednostkach, więc 100000 oznacza, że klient wykorzystał 100 procent tego, co kupił. Tak informujesz Google Play, że produkt został w pełni dostarczony.
  • Od 3 sierpnia 2026 deweloperzy ponoszą przy każdym przegranym sporze cenę zakupu pomniejszoną o opłatę serwisową Play plus opłatę za obciążenie zwrotne pobieraną przez bank, więc nieodpowiedziana weryfikacja obciążenia zwrotnego to bezpośrednie obciążenie twojego własnego przychodu.

Gdy bank klienta cofa płatność w Google Play, Google Play nie zwraca po prostu pieniędzy i nie przechodzi dalej. Wysyła na twój serwer PendingRefundReviewNotification i uruchamia 24-godzinny zegar. Odpowiedz na to powiadomienie przez API ReviewRefund preferencją zwrotu i dowodem tego, co klient faktycznie wykorzystał, a Google Play uwzględni twój wkład w to, jak kwestionuje obciążenie zwrotne. Milcz, a spór zostanie rozstrzygnięty bez słowa od jedynej strony, która wie, jak produkt został zużyty.

Weryfikacja obciążenia zwrotnego w Google Play to jedyny przepływ zwrotów w Androidzie, który prosi cię o dowody, bezpośredni odpowiednik CONSUMPTION_REQUEST od Apple. Teraz ma większe znaczenie niż kiedyś. Od 3 sierpnia 2026 Google Play przenosi koszt obciążeń zwrotnych na deweloperów, więc spór, na który nie odpowiesz, wychodzi z twojego konta, nie Google. Oto dokładnie, co niesie powiadomienie, co odsyłasz, jakie pola tworzą twój dowód i gdzie milczenie zamienia się w pieniądze.

Czym naprawdę jest weryfikacja obciążenia zwrotnego w Google Play

Obciążenie zwrotne to nie żądanie zwrotu. Klient idzie do swojego banku lub sieci kartowej i kwestionuje płatność, a bank cofa środki. Google Play obsługuje większość z nich samodzielnie. Dla części otwiera weryfikację i pyta najpierw ciebie, bo masz informacje, których Google nie ma: czy zamówienie zostało dostarczone i ile z niego klient wykorzystał. Ta weryfikacja to przepływ stojący za API ReviewRefund.

To jedno miejsce w systemie zwrotów Androida, gdzie twój dowód zmienia wynik. Każda inna ścieżka zwrotu w Google Play przebiega bez ciebie. Klient może samodzielnie uzyskać zwrot w ciągu 48 godzin od zakupu, wsparcie może go przyznać, a niepotwierdzony zakup jest automatycznie zwracany, wszystko rozstrzyga Google. Weryfikacja obciążenia zwrotnego jest wyjątkiem i warto traktować ją jako jedyną rozmowę o zwrocie, do której faktycznie możesz dołączyć.

To androidowa wersja okna dowodowego Apple

Dwa sklepy, dwa przepływy, które proszą dewelopera o dowody, i to cała lista. Apple wysyła CONSUMPTION_REQUEST i daje ci 12 godzin na odpowiedź przez Send Consumption Information. Google Play wysyła PendingRefundReviewNotification i daje ci 24 godziny na odpowiedź przez orders.reviewrefund. Mechanika się różni, ale lekcja jest identyczna: gdy sklep pyta, co klient wykorzystał, precyzyjna odpowiedź to różnica między zachowaniem sprzedaży a jej oddaniem.

Jedna różnica ma znaczenie w praktyce. Dane zużycia Apple to pięć pól liczbowych i nic więcej. Dowód Google Play jest bogatszy. Możesz wysłać procent zużycia plus listę pojedynczych zdarzeń użycia, każde ze znacznikiem czasu, identyfikatorem konta, a nawet adresem IP i przybliżoną location. Google Play daje ci więcej miejsca na opisanie dostawy, co oznacza więcej miejsca na przekonujący argument.

Zegar 24-godzinny i jak powiadomienie do ciebie dociera

Weryfikacja przychodzi jako Real Time Developer Notification na twój temat Cloud Pub/Sub, ten sam kanał, który dostarcza twoje zdarzenia subskrypcji i zakupów. Wiadomość to ładunek zakodowany w base64 z obiektem pendingRefundReviewNotification w środku. Zegar startuje, gdy to powiadomienie zostaje opublikowane, a nie gdy akurat je przeczytasz, więc konsument, który odpytuje raz dziennie, to konsument, który przegapia spory.

PendingRefundReviewNotification, pole po polu

Powiadomienie jest małe. Mówi ci, które zamówienie jest weryfikowane, wręcza token, który musisz zacytować z powrotem, i nazywa powód. Oto każde pole, które niesie.

PoleTypCo oznacza
versionstringWersja powiadomienia, zaczyna się od "1.0"
pendingRefundTokenstringToken identyfikujący tę weryfikację. Przekazujesz go z powrotem w wywołaniu ReviewRefund
orderIdstringZamówienie w weryfikacji, na przykład GPA.1234-5678-9012-34567
refundReasonintDlaczego zażądano zwrotu. Oczekująca weryfikacja niesie zawsze tylko CHARGEBACK, code 7
obfuscatedAccountIdstringIdentyfikator konta ustawiony przy zakupie, jeśli go ustawiłeś
obfuscatedProfileIdstringIdentyfikator profilu ustawiony przy zakupie, jeśli go ustawiłeś

Tylko obciążenie zwrotne otwiera oczekującą weryfikację

refundReason przy oczekującej weryfikacji to zawsze CHARGEBACK, dostarczany jako liczba całkowita 7. W świecie Google Play istnieją inne powody zwrotu, ale nie docierają do ciebie tym przepływem, bo nie masz w nich głosu. Jeśli widzisz PendingRefundReviewNotification, bank cofnął płatność, a Google Play decyduje, czy ją zakwestionować. To jedyny wyzwalacz.

Co odsyłasz przez API ReviewRefund

Odpowiadasz pojedynczym POST do orders.reviewrefund. Pełna ścieżka to POST https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/orders/{orderId}:reviewrefund, autoryzowana zakresem https://www.googleapis.com/auth/androidpublisher, tym samym zakresem OAuth, którego już używa twoja integracja z Play Developer API. Sukces zwraca puste ciało z HTTP 200.

W ciele mieszka twoja sprawa. Odsyłasz pendingRefundToken z powiadomienia, podajesz preferencję zwrotu i dołączasz dowód zużycia.

Twoja preferencja zwrotu to rekomendacja, nie werdykt

Pole refundPreference przyjmuje jedną z trzech wartości i jest radą dla Google Play, nie ostateczną decyzją. Google wciąż jest właścicielem wyniku. Ale to rada poparta danymi, których Google samo nie widzi, więc ma wagę.

refundPreferenceZnaczenie
APPROVEWolisz, żeby Google Play przyznał pełny zwrot
DECLINEWolisz, żeby Google Play odmówił zwrotu
NEUTRALNie masz preferencji i zdajesz się na Google Play
REFUND_PREFERENCE_UNSPECIFIEDDomyślna wartość wartownicza, nieużywana w prawdziwej odpowiedzi

Pola dowodowe, które popierają DECLINE

Samo DECLINE to twierdzenie bez dowodu. Pola zużycia są dowodem. consumptionPercentageMilliunits to liczba całkowita w mili-jednostkach, więc 100000 mówi, że klient zużył 100 procent tego, co kupił, a 50000 mówi połowę. consumptionUsageEvents to opcjonalna tablica, w której każde zdarzenie może nieść obfuscatedAccountId, obfuscatedProfileId, consumptionTime, ipAddress, consumptionItemDescription i przybliżoną location. sampleContentProvided to wartość logiczna na wypadek, gdy dałeś klientowi darmową próbkę płatnej treści. Razem mówią, w schemacie samego Google Play, że produkt został dostarczony i użyty.

Stoper obok stosu paragonów transakcyjnych i laptop pokazujący pulpit danych na ciemnym biurku, ilustrujący zbieranie dowodu zużycia w oknie weryfikacji obciążenia zwrotnego w Google Play

Twoje pierwsze wywołanie to twoje jedyne wywołanie

Google Play zapisuje pierwsze wywołanie ReviewRefund, które wykonasz wobec powiadomienia, i ignoruje każde wywołanie po nim, wciąż zwracając status OK. Nie ma wersji roboczej ani poprawki. Jeśli twoja pierwsza odpowiedź to pospieszne NEUTRAL bez dowodów, bo twój potok nie był gotowy, to właśnie ta odpowiedź trafia do akt, a późniejsze wywołanie z pełną historią zużycia zostaje po cichu odrzucone. Zbuduj kompletną odpowiedź, zanim cokolwiek wyślesz.

Ile weryfikacja kosztuje cię w pieniądzach

Przez lata przegrane obciążenie zwrotne w Google Play kosztowało dewelopera sprzedaż i niewiele więcej, bo Google Play pokrywał dalsze opłaty. To kończy się 3 sierpnia 2026. Dla zamówień złożonych po tej dacie Google Play dzieli koszt obciążenia zwrotnego z deweloperami, a udział dewelopera to cena zakupu pomniejszona o opłatę serwisową Play, plus powiązana opłata za obciążenie zwrotne pobierana przez instytucję finansową. Google Play nadal pokrywa część opłaty serwisowej. Opłata bankowa to nowy ciężar po twojej stronie bilansu.

Zwrot nigdy nie jest prawdziwą liczbą

Spór oddaje płatność klienta, ale płatność nigdy nie była twoim jedynym kosztem. Wygenerowane wideo, seria wywołań API modelu, wypłata dla twórcy, przydzielona pamięć, całe te pieniądze opuściły twoje konto w chwili, gdy zamówienie zostało dostarczone, i nic z tego nie wraca wraz z obciążeniem zwrotnym. Teraz dodaj na wierzch opłatę banku za obciążenie zwrotne. Płacisz fakturę dostawcy, zwracasz sprzedaż i pokrywasz opłatę za spór, trzy koszty za jedno zamówienie, które miałeś dowód, by obronić.

Skala, z którą walczy Google

Google Play twierdzi, że w 2025 zablokował US$3.4B oszustw i nadużyć i dodaje wykrywanie oszustw przez 2026. Zmiana podziału kosztów jest częścią tego samego dążenia: daj deweloperom powód, by wprowadzać dowody do systemu, a system zakwestionuje więcej nieuprawnionych sporów. API ReviewRefund to sposób, w jaki trafia twój dowód. Pusta odpowiedź to głos za tym, by obciążenie zwrotne typu friendly fraud utrzymało się na twój koszt.

Jak być gotowym, zanim powiadomienie dotrze

Okno 24 godzin nie jest problemem. Problem w tym, że dowód, którego potrzebujesz, musi istnieć przed sporem, uchwycony w chwili zakupu i zużycia, a nie odtworzony po pojawieniu się tokenu. Zespół, który zaczyna zbierać dane, gdy powiadomienie dociera, już przegrał.

Dołącz tożsamość w chwili zakupu

Ustaw obfuscatedAccountId za pomocą setObfuscatedAccountId przy każdym zakupie, żeby identyfikator konta z powiadomienia mapował się wprost na użytkownika w twoim systemie. Trzymaj go jako hash, 64 znaki lub mniej, nigdy jako e-mail w postaci jawnej ani inne dane osobowe, bo identyfikatory jawne powodują blokowanie zakupów. Bez tego połączenia nie połączysz pendingRefundToken z realną historią użycia, a twoje DECLINE nie ma nic za sobą.

Rejestruj zużycie na bieżąco

Zapisuj, co dostarczyło płatne zamówienie, kiedy i komu, w formie, którą na żądanie zamienisz w consumptionPercentageMilliunits i consumptionUsageEvents.

  • Oznaczaj znacznikiem czasu każdą jednostkę zużycia, żeby consumptionTime przy każdym zdarzeniu było prawdziwe, nie szacowane.
  • Śledź dostawę wobec zakupu, żeby móc podać procent zużycia z pewnością, zamiast zgadywać.
  • Trzymaj identyfikatory konta i profilu obok użycia, żeby zdarzenie składało się w jednym zapytaniu, gdy token dotrze.
  • Rejestruj IP żądania i przybliżoną location, jeśli je masz, ponieważ Google Play akceptuje oba jako pola zdarzenia.

Odpowiadaj w oknie, automatycznie

Okno 24 godzin jest wygodne dla maszyny i brutalne dla człowieka, który musi być przytomny i uważny. Odpowiedź powinna być automatyczna: powiadomienie wchodzi, konto wyszukane, zużycie złożone, jedno wywołanie ReviewRefund wychodzi, wszystko bez człowieka w pętli. To część, którą RefundHalt wykonuje za ciebie. Nasłuchujemy PendingRefundReviewNotification, dopasowujemy zamówienie do użycia, które już śledzimy dla tego konta, i odpowiadamy orders.reviewrefund w oknie z preferencją zwrotu i realnym dowodem zużycia. Token to nić, a dowód to sprawa. Miej oba gotowe, a jedyna rozmowa o zwrocie, do której możesz dołączyć, jest tą, którą możesz wygrać.

Często zadawane pytania

Czym jest weryfikacja obciążenia zwrotnego w Google Play?
Weryfikacja obciążenia zwrotnego w Google Play to przepływ, którego Google Play używa, by poprosić dewelopera o dowody przed rozstrzygnięciem zakwestionowanej płatności. Gdy bank klienta cofa płatność, Google Play może wysłać na twój serwer PendingRefundReviewNotification i dać ci 24 godziny na odpowiedź przez API ReviewRefund, podając preferencję zwrotu i dowód tego, ile klient zużył. To jedyna ścieżka zwrotu w Androidzie, gdzie twój wkład wpływa na wynik.
Ile mam czasu na odpowiedź na powiadomienie o obciążeniu zwrotnym w Google Play?
24 godziny. Google Play wysyła PendingRefundReviewNotification jako Real Time Developer Notification, a ty musisz wywołać API ReviewRefund w ciągu 24 godzin od tego powiadomienia. Zegar startuje, gdy powiadomienie zostaje opublikowane na twoim temacie Cloud Pub/Sub, więc twój konsument musi nasłuchiwać w czasie rzeczywistym, a nie odpytywać według harmonogramu.
Co pozwala mi wysłać API orders.reviewrefund?
Wysyłasz pendingRefundToken z powiadomienia, refundPreference o wartości APPROVE, DECLINE lub NEUTRAL oraz dowód zużycia. Pola dowodowe to consumptionPercentageMilliunits, liczba całkowita w mili-jednostkach, gdzie 100000 oznacza 100 procent zużycia, opcjonalna tablica consumptionUsageEvents ze znacznikiem czasu, identyfikatorem konta, adresem IP, opisem i location na zdarzenie, oraz wartość logiczna sampleContentProvided. Udane wywołanie zwraca puste ciało z HTTP 200.
Czy mogę zaktualizować odpowiedź ReviewRefund po jej wysłaniu?
Nie. Google Play zapisuje twoje pierwsze wywołanie ReviewRefund dla danego powiadomienia i ignoruje każde późniejsze wywołanie, wciąż zwracając status OK. Nie ma wersji roboczej ani poprawki, więc twoja pierwsza odpowiedź musi być kompletna. Zbierz preferencję zwrotu i cały dowód zużycia, zanim wykonasz pojedyncze wywołanie.
Ile kosztuje przegrane obciążenie zwrotne w Google Play po 3 sierpnia 2026?
Dla zamówień złożonych po 3 sierpnia 2026 deweloper ponosi cenę zakupu pomniejszoną o opłatę serwisową Play, plus opłatę za obciążenie zwrotne pobieraną przez instytucję finansową. Google Play nadal pokrywa część opłaty serwisowej. To na dodatek do mocy obliczeniowej, wywołań API, pamięci i wypłat, które już wydałeś na dostarczenie zamówienia, a których zwrot nie oddaje.
Które powody zwrotu wyzwalają powiadomienie o oczekującej weryfikacji?
Tylko CHARGEBACK, który przychodzi w powiadomieniu jako refundReason code 7. Inne zwroty w Google Play, takie jak 48-godzinne okno samoobsługowe, zwroty przez wsparcie i anulowane zakupy, są rozstrzygane bez dewelopera i nie otwierają oczekującej weryfikacji. Jeśli otrzymasz PendingRefundReviewNotification, bank cofnął płatność, a Google Play decyduje, czy ją zakwestionować.

Ź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ć.