Wszystkie artykuły
Playbook8 min czytania

Seryjne nadużycie zwrotów kosztuje cię dwa razy, oto jak sklepy pozwalają ci się bronić

Klient, który raz za razem żąda zwrotu, to nie przypadek. Nadużycie zwrotów kosztuje cię oddane pieniądze plus moc obliczeniową, którą już wydałeś, a oba sklepy dają ci sygnał tożsamości, appAccountToken Apple i obfuscated account ID Google, aby powiązać ten wzorzec w całość.

Kołowrót w przyćmionej hali dworcowej, przez który jedna postać przechodzi raz za razem, obrazujący seryjne nadużycie zwrotów

Najważniejsze wnioski

  • Tylko dwa procesy zwrotu w ogóle pozwalają deweloperowi przedłożyć dowody przeciwko nadużyciu zwrotów: CONSUMPTION_REQUEST Apple, z oknem 12 hours, oraz weryfikacja obciążenia zwrotnego w Google Play przez Review Refund API, z oknem 24 hours.
  • appAccountToken Apple to UUID, który generujesz i dołączasz do zakupu, a StoreKit wiąże go z powstałą transakcją, dzięki czemu twój serwer może powiązać każdy zwrot z dokładnie tym kontem, które go dokonało.
  • obfuscated account ID Google Play to zahaszowany ciąg znaków, ograniczony do 64 characters, którego samo Google używa do wykrywania nietypowej aktywności, takiej jak wiele urządzeń kupujących na jednym koncie w krótkim czasie.
  • Przechowywanie danych osobowych w postaci jawnej w obfuscated account ID Google powoduje zablokowanie twoich zakupów, więc pole musi być wartością zaszyfrowaną lub hashem jednokierunkowym, nigdy surowym adresem e-mail.
  • Pole voidedReason w Google Play oznacza friendly_fraud i fraud jako powody odrębne od zwykłego zwrotu typu remorse, co pozwala kierować powtarzających się nadużywających do kolejki weryfikacji zamiast na automatyczną ścieżkę zwróć-i-zapomnij.
  • Google podaje, że w 2022 zablokowało ponad $2 billion oszukańczych i nadużywających transakcji, a pola tożsamości zasilające ten system działają tylko wtedy, gdy wypełniasz je przy każdym zakupie.
  • Każdy zwrócony zakup, który zachowuje dostęp, to moc obliczeniowa, pamięć i wydatki na API, za które nadal płacisz od pieniędzy już oddanych, a seryjny zwracający mnoży ten rachunek celowo.

Pojedynczy zwrot to koszt prowadzenia biznesu. To samo konto zwracające po raz czwarty, po tym jak za każdym razem wykorzystało to, co kupiło, to nadużycie zwrotów, i jest to wzorzec, który dostrzeżesz tylko wtedy, gdy każdy zakup niesie tożsamość, którą kontrolujesz. Apple i Google dają ci tę tożsamość, i oba dają ci wąskie okno, by przedstawić ją sklepowi, zanim zapadnie decyzja o zwrocie lub obciążeniu zwrotnym. Przegap okno albo nigdy nie dołącz tożsamości, a seryjny zwracający wygląda dokładnie jak niezadowolony klient po raz pierwszy. Oto jak ich odróżnić i ile ta różnica jest warta w pieniądzu.

Dlaczego nadużycie zwrotów to problem tożsamości, a nie problem zwrotów

To sklep decyduje o zwrocie. Nie powstrzymasz klienta od zapytania, a w większości procesów nie powstrzymasz sklepu od przyznania. To, co możesz zrobić, to zdecydować, czy dane konto robiło to już wcześniej i czy zakupiona treść została faktycznie dostarczona i wykorzystana. Oba to pytania o tożsamość: który z twoich użytkowników stoi za tą transakcją i jaka jest jego historia. Jeśli twoje zakupy nie niosą stabilnego identyfikatora prowadzącego z powrotem do twoich własnych rekordów użytkowników, nie odpowiesz na żadne z tych pytań, a każdy zwrot przychodzi bez kontekstu.

To jest prawdziwa luka. Mechanika zwrotu jest ustalona przez zasady. Dowody, które do niej wniesiesz, należą w całości do ciebie, i zaczynają się w chwili zakupu, a nie w chwili zwrotu.

Dwa okna, w których dowody zmieniają wynik

Istnieją dokładnie dwa procesy, w których cokolwiek wyślesz, może poruszyć decyzję. CONSUMPTION_REQUEST Apple uruchamia się, gdy klient prosi o zwrot za produkt konsumowalny lub subskrypcję odnawialną automatycznie, i masz 12 hours na odpowiedź. Weryfikacja obciążenia zwrotnego w Google Play uruchamia się, gdy użytkownik kwestionuje obciążenie w swoim banku, i masz 24 hours na reakcję przez Review Refund API. Każdy inny zwrot, 48-hour samoobsługowy zwrot w Play, zwrot przyznany przez wsparcie, automatyczny zwrot za niepotwierdzony zakup, zapada bez ciebie.

Oba te kanały dowodowe są znacznie silniejsze, gdy transakcja już niesie twój identyfikator. Informacje o konsumpcji Apple mogą zawierać appAccountToken obok historii i wydatków konta, a weryfikacja Google może opierać się na obfuscated account ID, który obserwuje od chwili zakupu. Konto bez identyfikatora to konto bez historii do przedłożenia.

Dwa pola tożsamości, obok siebie

Apple i Google rozwiązały ten sam problem niemal w ten sam sposób, z różnymi nazwami i różnymi regułami. Oba pozwalają oznaczyć zakup wartością, która wskazuje z powrotem na twój własny rekord użytkownika. Żadne nie jest domyślnie włączone. Oba są bezwartościowe, jeśli nie ustawisz ich w chwili zakupu.

Apple: appAccountToken

appAccountToken to UUID, który generujesz i przekazujesz, gdy zaczyna się zakup. StoreKit wiąże go z powstałą transakcją, i pojawia się on w danych transakcji, które twój serwer weryfikuje, oraz w informacjach o konsumpcji, które odsyłasz podczas CONSUMPTION_REQUEST. Ponieważ to twoja wartość, mapuje ona transakcję sklepu bezpośrednio na konto w twojej bazie danych, bez udziału adresu e-mail czy nazwiska. Musi to być prawdziwy UUID, a wszystko inne jest odrzucane. Apple dodało później punkt końcowy Set App Account Token, który potrafi dołączyć lub zaktualizować token na przeszłych transakcjach, w tym zakupach dokonanych poza twoją aplikacją, takich jak realizacja kodów ofertowych.

Google Play: obfuscated account ID

Odpowiednikiem u Google jest setObfuscatedAccountId, opcjonalny ciąg znaków powiązany z kontem kupującym. Własna dokumentacja Google jest jednoznaczna co do jego celu: Google Play używa go do wykrywania nietypowej aktywności, takiej jak wiele urządzeń dokonujących zakupów na tym samym koncie w krótkim czasie, oraz do blokowania niektórych oszukańczych transakcji, zanim się zakończą. Jest ograniczony do 64 characters i nie może zawierać danych osobowych w postaci jawnej. Zapisz tam surowy adres e-mail, a Google od razu zablokuje zakup, ponieważ pole oczekuje wartości zaszyfrowanej lub hasha jednokierunkowego. Pokrewne pole, setObfuscatedProfileId, istnieje dla aplikacji, w których jedno konto ma kilka profili.

PoleSklepTyp i limitUstawiane przezDomyślnieCo sklep z tym robi
appAccountTokenAppleUUIDCiebie, przy zakupieNieustawioneWiąże transakcję z twoim użytkownikiem, zwracane w danych transakcji i konsumpcji
obfuscatedAccountIdGoogle PlayZahaszowany ciąg, maks. 64 znakiCiebie, przy zakupieNieustawioneWykrywa nietypową aktywność i blokuje część oszustw przed zakończeniem

Ile naprawdę kosztuje zwrot od seryjnego nadużywającego

Sam zwrot to najmniejsza część rachunku. Gdy sklep przyznaje zwrot, oddajesz przychód, i tyle jest widoczne w księdze. Tego, czego nie ma w wierszu zwrotu, jest wszystko, co wydałeś na dostarczenie produktu, który jest teraz darmowy.

Wyobraź sobie produkt konsumowalny, który uruchamia realną pracę: generowanie obrazu, serię wywołań API do dostawcy modelu, eksport wideo, wypłatę dla twórcy. Zapłaciłeś za tę moc obliczeniową w chwili, gdy klient jej użył. Zwrot odzyskuje cenę, ale nie odzyskuje faktury dostawcy. Seryjny zwracający to ktoś, kto nauczył się, że treść przetrwa zwrot, więc uruchamia pętlę ponownie: kup, skonsumuj, zwróć, powtórz. W każdym cyklu ponosisz koszt dostawy po raz drugi.

Do tego dochodzi własne przesunięcie kosztów przez sklep. Od August 3 2026 Google Play przenosi cenę zakupu i opłaty banku za obciążenie zwrotne na dewelopera, dla zamówień złożonych po tej dacie. Obciążenie zwrotne, które kiedyś było głównie problemem Google, staje się twoim przychodem plus opłatą, a powtarzający się kwestionujący podnosi tę liczbę za każdym razem. Pola tożsamości to właśnie to, co pozwala ci dostarczyć Review Refund API dowody na zakwestionowanie nieuprawnionego sporu w oknie 24 hours.

Google ujmuje skalę wprost: podaje, że w 2022 zablokowało ponad $2 billion oszukańczych i nadużywających transakcji. Ta liczba istnieje, ponieważ sygnały, wśród nich obfuscated account ID, były wypełnione. Aplikacja, która wysyła zakupy z pustymi polami tożsamości, rezygnuje z tej ochrony.

Odcisk palca odczytywany na podświetlonym szklanym czytniku, obrazujący, jak pola tożsamości sklepu wiążą zakup z kontem stojącym za nadużyciem zwrotów

Jak wyłapać powtarzających się zwracających, zanim sklep zdecyduje

Oznacz każdy zakup tożsamością, która należy do ciebie

Ustawiaj appAccountToken na każdym zakupie StoreKit i setObfuscatedAccountId na każdym zakupie Play Billing, oba generowane z twojego własnego rekordu użytkownika. Na Apple użyj prawdziwego UUID przypisanego do konta. Na Google zahaszuj klucz konta, aby żadne dane osobowe nie podróżowały w postaci jawnej. Zrób to w chwili zakupu, bo na Google to jeden krok, którego nie odzyskasz później.

Prowadź księgę opartą na tej tożsamości

Zapisuj każdy zakup, dostawę, zdarzenie konsumpcji i zwrot względem identyfikatora. Gdy przychodzi CONSUMPTION_REQUEST lub weryfikacja obciążenia zwrotnego, pełna historia konta, wraz z wcześniejszymi zwrotami, jest o jedno zapytanie od ciebie. Informacje o konsumpcji Apple mają dokładnie na to jawne pola: consumptionStatus, deliveryStatus, playTime, accountTenure, lifetimeDollarsPurchased oraz twój refundPreference.

Czytaj voidedReason i kieruj nadużywających inaczej

Gdy zakup w Google zostaje unieważniony, pole voidedReason mówi ci dlaczego, a friendly_fraud i fraud to odrębne wartości od zwykłego zwrotu typu remorse. Kieruj je do kolejki weryfikacji i surowszej zasady, nie na tę samą automatyczną ścieżkę co zwrot po raz pierwszy. Własne wytyczne Google to model wielokrotnych przewinień: ostrzeż pierwszego przewiniającego, podejmij stanowczsze działania wobec powtarzających się i wyłącz zakupy dla konta, które nie przestaje.

Odpowiadaj w oknie za każdym razem

Dowody liczą się tylko w obrębie dwóch okien. Zautomatyzuj odpowiedź na CONSUMPTION_REQUEST tak, by wychodziła z dużym zapasem w ciągu 12 hours, a weryfikację obciążenia zwrotnego tak, by wychodziła w ciągu 24 hours. Nieskazitelna historia przedłożona za późno to historia, której sklep nigdy nie przeczyta.

Sygnał, który chcesz wyłapaćGdzie się znajdujePole lub proces, który go ujawnia
To samo konto, wiele urządzeń, krótkie oknoGoogle PlayWykrywanie nietypowej aktywności przez obfuscated account ID
To konto zwracało już wcześniejTwoja księgaHistoria oparta na appAccountToken lub obfuscated account ID
Treść została dostarczona i skonsumowanaAppledeliveryStatus i consumptionStatus w informacjach o konsumpcji
Spór to w rzeczywistości oszustwo pierwszej stronyGoogle Playwartość voidedReason friendly_fraud

Co sklepy zrobią, a czego nie zrobią za ciebie

Warto być precyzyjnym co do podziału pracy, bo łatwo założyć, że sklepy zajmują się nadużyciem, a zwykle nie mówią ci, gdy tego nie robią. Google aktywnie używa obfuscated account ID do blokowania części oszustw, zanim zakup się zakończy, a jego systemy wyłapują znaczną część na poziomie platformy. Apple decyduje o każdym zwrocie samo i traktuje twoje informacje o konsumpcji jako dane wejściowe, nigdy jako głos. Żaden sklep nie prowadzi za ciebie twojej listy nadużywających, nie odejmuje zwróconego produktu konsumowalnego od twojego salda ani nie mówi powtarzającemu się zwracającemu nie w twoim imieniu. Tożsamość należy do sklepu, by działać na marginesach, i do ciebie, by działać wszędzie indziej.

To ten sam powód, dla którego RefundHalt opiera wszystko na tożsamości zakupu: zwrot, weryfikacja obciążenia zwrotnego i żądanie konsumpcji dla tego samego konta sprowadzają się do jednej historii, więc seryjny zwracający pojawia się jako wzorzec za pierwszym razem, gdy się powtórzy, a nie dopiero po czwartej fakturze, którą już zapłaciłeś.

Często zadawane pytania

Czym jest nadużycie zwrotów w aplikacji?
Nadużycie zwrotów to klient wielokrotnie żądający zwrotów po otrzymaniu i wykorzystaniu tego, co kupił, tak że zachowuje treść lub korzyść, jednocześnie odzyskując pieniądze. W sklepach z aplikacjami zwykle objawia się jako to samo konto zwracające produkty konsumowalne lub subskrypcje raz za razem, albo jako friendly fraud, gdy legalne obciążenie jest kwestionowane w banku.
Jak powiązać zakup w aplikacji z konkretnym użytkownikiem?
Na Apple wygeneruj UUID i przekaż go jako appAccountToken, gdy zaczyna się zakup, a StoreKit wiąże go z transakcją i zwraca w danych transakcji i konsumpcji. W Google Play wywołaj setObfuscatedAccountId z zahaszowaną wartością powiązaną z kontem. Oba mapują transakcję sklepu na twój własny rekord użytkownika bez ujawniania danych osobowych.
Czy Apple lub Google mogą powiedzieć mi, że konto jest powtarzającym się zwracającym?
Nie bezpośrednio. Google używa obfuscated account ID do wykrywania nietypowej aktywności i blokowania części oszustw przed zakupem, a Apple pozwala przedłożyć historię konta podczas żądania konsumpcji, ale żaden sklep nie wręcza ci listy powtarzających się zwracających. Budujesz ją sam z własnej księgi opartej na polach tożsamości.
Dlaczego Google blokuje mój zakup, gdy ustawiam identyfikator konta?
Ponieważ obfuscated account ID nie może zawierać danych osobowych w postaci jawnej. Przechowywanie w nim czegoś takiego jak surowy adres e-mail powoduje, że Google Play blokuje zakup. Użyj wartości zaszyfrowanej lub hasha jednokierunkowego i mieść się w limicie 64 characters.
Czy kwestionowanie zwrotów przez żądanie konsumpcji powstrzymuje nadużycie?
Może je ograniczyć. CONSUMPTION_REQUEST to jeden z zaledwie dwóch procesów, w których twoje dowody docierają do sklepu, zanim ten zdecyduje, a historia konta oraz dane o dostawie i konsumpcji pomagają Apple rozpoznać nadużycie zwrotów i friendly fraud. To jednak nie jest blokada. Apple wciąż decyduje, a nadużycie przychodzące przez procesy niepodlegające zakwestionowaniu pozostaje bez zmian.

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