Interfejs Google Play Developer API zawiera dodatkowe funkcje do raportowania transakcji z programów rozliczeniowych i programów linków. W tym przewodniku opisujemy, jak raportować transakcje z tych programów rozliczeniowych.
Do obsługi transakcji zewnętrznych z backendu może być potrzebnych kilka komponentów. Aby je utworzyć, musisz skonfigurować integrację z backendem zgodnie z instrukcjami w artykule Konfigurowanie interfejsu Google Play Developer API. Aby utworzyć funkcje backendu dewelopera, które nie są specyficzne dla programów rozliczeniowych i programów linków , zapoznaj się z artykułem System rozliczeniowy Google Play.
Słowniczek terminów
Konwencje terminologiczne stosowane w tym przewodniku:
- Programy rozliczeniowe i programy linków: programy, które ułatwiają zakupy treści cyfrowych lub pobieranie aplikacji poza Google Play. Obejmuje to programy rozliczeń alternatywnych i treści zewnętrznych.
- Interfejsy API transakcji zewnętrznych: interfejsy API używane do raportowania transakcji w ramach kwalifikujących się programów rozliczeniowych i programów linków.
- Transakcja zewnętrzna: kwalifikująca się transakcja, która ma miejsce poza aplikacją zgodnie z definicją w programach rozliczeń alternatywnych i treści zewnętrznych.
- Token transakcji zewnętrznej: token udostępniany przez Bibliotekę Płatności w Play , którego możesz użyć, gdy użytkownik zainicjuje transakcję zewnętrzną. Ten token służy do powiadamiania Google Play o autoryzowanej transakcji zewnętrznej.
- Identyfikator zewnętrzny transakcji: unikalny identyfikator wygenerowany przez Ciebie w celu identyfikacji transakcji zewnętrznej.
Zgłaszanie nowych transakcji zewnętrznych do Google Play
Zintegruj się z interfejsem externaltransactions API, aby zgłaszać
transakcje, które mają miejsce poza systemem rozliczeniowym Google Play w obsługiwanych
krajach, w tym transakcje o wartości 0 USD wynikające z zakupów w ramach bezpłatnego okresu próbnego i
instalacji aplikacji. Możesz rozpoczynać i zgłaszać transakcje w ramach programów rozliczeniowych i programów linków tylko w przypadku kwalifikujących się krajów uprawnionych użytkowników, zgodnie z zasadami programów rozliczeń alternatywnych i treści zewnętrznych. W przeciwnym razie wywołanie interfejsu API zostanie odrzucone. Dotyczy to wszystkich transakcji, w tym nowych zakupów, odnowień, doładowań, uaktualnień, przejść na niższy poziom i pobierania aplikacji.
Raportowanie transakcji zewnętrznych
Po autoryzacji płatności w ramach programu rozliczeniowego lub programu linków należy wywołać interfejs externaltransactions API, aby zgłosić transakcję zewnętrzną.
Dotyczy to wszystkich transakcji, w tym opłat początkowych, odnowień, zwrotów środków i innych. Wymagania dotyczące raportowania znajdziesz w wytycznych dotyczących odpowiedniego programu rozliczeniowego lub programu linków.
Każda transakcja zewnętrzna jest zgłaszana z identyfikatorem transakcji zewnętrznej. W przypadku zakupów cyklicznych (np. subskrypcji z automatycznym odnawianiem) musisz wysłać zewnętrzny identyfikator transakcji powiązany z pierwszą transakcją w ramach zakupu cyklicznego jako parametr wszystkich kolejnych transakcji, w tym zwrotów środków. Rejestruje to serię transakcji związanych z tym zakupem. W przypadku zakupów, gdy produkt się zmienia (np. uaktualnienie lub przejście na niższą wersję) albo gdy transakcja cykliczna zostanie anulowana lub wygaśnie, a ten sam produkt zostanie kupiony ponownie, należy wysłać nowy identyfikator zewnętrzny transakcji. W ramach tego identyfikatora nie wolno podawać żadnych informacji umożliwiających identyfikację, informacji zastrzeżonych ani poufnych.
Zgłaszanie transakcji początkowej
Za każdym razem, gdy w programach rozliczeniowych i programach linków
zostanie autoryzowany nowy zakup lub pobranie aplikacji, musisz wywołać interfejs externaltransactions API.
W przypadku pobierania aplikacji, zakupów jednorazowych i pierwszych transakcji w ramach zakupu cyklicznego (np. subskrypcji) wymagany jest externalTransactionToken otrzymany przez aplikację za pomocą Biblioteki Płatności w Google Play. Nazywamy to transakcją początkową. Po transakcji początkowej zgłaszaj kolejne transakcje (np. odnowienia subskrypcji), podając nowy, unikalny externalTransactionId. Więcej informacji znajdziesz w artykule
Zgłaszanie kolejnych transakcji związanych z zakupem.
Przykład:
- Deweloper konfiguruje i włącza w swojej aplikacji rozliczenia alternatywne.
- Użytkownik 1 mieszka w Korei Południowej, czyli w obsługiwanym kraju, i próbuje kupić
product1za 12634,10 KRW miesięcznie w ramach bezpłatnego okresu próbnego trwającego miesiąc. - Aplikacja uruchamia proces zakupu z użyciem
ProductDetailsdlaproduct1i oferty wybranej przez użytkownika. - Użytkownik 1 wybiera alternatywny system rozliczeniowy dewelopera.
- Element
UserChoiceBillingListenerotrzymuje wartośćmy_tokenjakoexternalTransactionToken. - Deweloper wysyła odpowiednie informacje do swojego backendu (wartość
externalTransactionTokeni kupowane produkty). Następnie uruchamia proces zakupuproduct1w alternatywnym systemie rozliczeniowym. Ta transakcja otrzymuje po stronie dewelopera unikalny identyfikator transakcji, który jest używany do zgłaszania jej do Google Play: 123-456-789. Identyfikator transakcji jest wymagany, nawet jeśli użytkownik korzysta z bezpłatnego okresu próbnego. - Gdy w alternatywnym systemie rozliczeniowym dojdzie do transakcji zakupu, deweloper zgłasza ją do Google Play za pomocą tego żądania. Początkowo jest ona zgłaszana jako transakcja o wartości 0 USD, ponieważ użytkownik otrzymuje bezpłatny miesiąc.
POST /androidpublisher/v3/applications/com.myapp.android/externalTransactions?externalTransactionId=123-456-789
Body
{
"originalPreTaxAmount" : {
"priceMicros" : "0",
"currency" : "KRW"
},
"originalTaxAmount" : {
"priceMicros" : "0",
"currency" : "KRW"
},
"transactionTime" : "2022-02-22T12:45:00Z",
"recurringTransaction" : {
"externalTransactionToken" : "my_token",
"externalSubscription" : {
"subscriptionType" : "RECURRING"
}
},
"userTaxAddress" : {
"regionCode" : "KR"
}
}
Podczas zgłaszania transakcji początkowej pamiętaj o tych kwestiach:
- Wartość
subscriptionTypemoże byćRECURRING(w przypadku subskrypcji z automatycznym odnawianiem) lubPREPAID(w przypadku subskrypcji przedpłaconych). - Element
OtherRecurringProductmusi być używany do reprezentowania jednorazowych zakupów, które wymagają wielu płatności lub płatności z opóźnieniem. Na przykład w przypadku zamówienia w przedsprzedaży może wystąpić początkowa transakcja o wartości 0 USD, a następnie druga transakcja w późniejszym terminie za cenę SKU, gdy zamówienie w przedsprzedaży zostanie zrealizowane. Więcej informacji o zgłaszaniu kolejnych transakcji znajdziesz w artykule Zgłaszanie kolejnych transakcji związanych z zakupem. - Podczas zgłaszania
początkowych transakcji ofert zewnętrznych musisz podać
ExternalOfferDetails. Nie jest to wymagane w przypadku kolejnych transakcji.
Jeśli transakcja jest przeprowadzana z użytkownikiem w Indiach, gdzie podatek zależy od jego
obszaru administracyjnego (np. stanu lub prowincji), uwzględnij ten obszar w polu
userTaxAddress. Odpowiednie obszary administracyjne znajdziesz na wstępnie zdefiniowanej liście ciągów znaków w przewodniku po interfejsie API.
POST /androidpublisher/v3/applications/com.myapp.android/externalTransactions?externalTransactionId=123-456-789
Body
{
"originalPreTaxAmount" : {
"priceMicros" : "0",
"currency" : "INR"
},
"originalTaxAmount" : {
"priceMicros" : "0",
"currency" : "INR"
},
"transactionTime" : "2023-11-01T12:45:00Z",
"recurringTransaction" : {
"externalTransactionToken" : "my_token",
"externalSubscription" : {
"subscriptionType" : "RECURRING"
}
},
"userTaxAddress" : {
# Tax varies in India based on state, so include that information in
# administrativeArea
"regionCode" : "IN",
"administrativeArea" : "KERALA"
}
}
Oferty zewnętrzne
Jeśli zgłaszana transakcja jest objęta programem ofert zewnętrznych, musisz ustawić pole externalOfferDetails, jeśli jest to transakcja jednorazowa lub pierwsza transakcja w serii cyklicznej:
- Podczas zgłaszania transakcji pobierania aplikacji ustaw
linkTypenaLINK_TO_APP_DOWNLOADi podaj odpowiednie wartości dlainstalledAppPackageiinstalledAppCategory. Więcej informacji znajdziesz w artykule Zgłaszanie pobrania aplikacji. - Podczas zgłaszania transakcji ofert treści cyfrowych ustaw
linkTypenaLINK_TO_DIGITAL_CONTENT_OFFER. - Po zainstalowaniu aplikacji zewnętrznej w ramach programu ofert zewnętrznych musisz zgłaszać transakcje dokonane w tej aplikacji. Podczas zgłaszania tych transakcji połącz je z pierwotnym zdarzeniem pobrania aplikacji:
- Podaj
externalTransactionTokenze zdarzenia pobrania aplikacji. - W polu
externalOfferDetailsustawappDownloadEventExternalTransactionIdnaexternalTransactionIdzdarzenia pobrania aplikacji. Pozostałe pola wexternalOfferDetailsnie są wymagane.
- Podaj
Przykładowe żądanie transakcji w aplikacji zewnętrznej pobranej w ramach ofert zewnętrznych:
POST /androidpublisher/v3/applications/com.myapp.android/externalTransactions?externalTransactionId=ABC-DEF-GHI
Body
{
"originalPreTaxAmount" : {
"priceMicros" : "990000", # 0.99 EUR
"currency" : "EUR"
},
"originalTaxAmount" : {
"priceMicros" : "90000", # 0.09 EUR
"currency" : "EUR"
},
"transactionTime" : "2025-11-22T12:45:00Z",
"oneTimeTransaction" : {
"externalTransactionToken" : "my_external_transaction_token_for_link_to_download_event"
},
"userTaxAddress" : {
"regionCode" : "DE"
},
"externalOfferDetails" : {
"appDownloadEventExternalTransactionId" : "my_external_transaction_id_for_link_to_download_event"
}
}
Zaktualizowane informacje o opłacie za obsługę Usług Google Play w przypadku różnych typów transakcji można znaleźć w artykule Zmiany w programie ofert zewnętrznych dla użytkowników z Europejskiego Obszaru Gospodarczego.
Zgłaszanie kolejnych transakcji związanych z zakupem
W niektórych przypadkach z tym samym zakupem zewnętrznym jest powiązanych więcej niż 1 płatność użytkownika, np. odnowienia subskrypcji lub doładowania abonamentu przedpłaconego.
Te kolejne transakcje możesz zgłaszać za pomocą tego samego interfejsu API w Externaltransactions. Jak opisano w Zgłaszanie nowego zakupu, externalTransactionToken w przypadku kolejnych transakcji nie jest wymagany. Zamiast tego w przypadku każdego odnowienia lub doładowania jako parametr zapytania jest wysyłany nowy, unikalny externalTransactionId, a identyfikator transakcji początkowej jest uwzględniany w polu initialExternalTransactionId.
Kontynuacja poprzedniego przykładu:
- Pierwsze odnowienie subskrypcji użytkownika 1 następuje w alternatywnym systemie rozliczeniowym. Identyfikator transakcji początkowej to 123-456-789.
- Deweloper zgłasza cykliczność transakcji w parametrze zapytania URL jako zewnętrzny identyfikator transakcji dla tej nowej transakcji, a w polu
initialExternalTransactionIdodwołuje się do zewnętrznego identyfikatora transakcji początkowej.
Przykładowe żądanie:
POST /androidpublisher/v3/applications/com.myapp.android/externalTransactions?externalTransactionId=abc-def-ghi
Body
{
"originalPreTaxAmount" : {
"priceMicros" : "12634000000", # 12634 KRW
"currency" : "KRW"
},
"originalTaxAmount" : {
"priceMicros" : "1263000000", # 1263 KRW
"currency" : "KRW"
},
"transactionTime" : "2022-02-22T12:45:00Z",
"recurringTransaction" : {
"initialExternalTransactionId" : "123-456-789",
"externalSubscription" : {
"subscriptionType" : "RECURRING"
}
},
"userTaxAddress" : {
"regionCode" : "KR"
}
}
Zgłaszanie uaktualnienia lub przejścia na niższą wersję
Aby zgłosić uaktualnienie lub przejście na niższą wersję, gdy użytkownik ma subskrypcję w alternatywnym systemie rozliczeniowym, użyj tego samego punktu końcowego i funkcji w interfejsie Externaltransactions API, wysyłając externalTransactionToken, który został udostępniony aplikacji w przypadku transakcji uaktualnienia lub przejścia na niższą wersję. Działa to
podobnie jak zgłaszanie nowego zakupu.
Zgłaszanie pobrania aplikacji
Aby zgłosić instalację aplikacji w systemie rozliczeniowym ofert zewnętrznych, musisz
wywołać Externaltransactions.createexternaltransaction, wysyłając
externalTransactionToken który został udostępniony aplikacji. Zgłoś to jako transakcję
jednorazową o zerowym koszcie. Ten proces jest podobny do zgłaszania
transakcji początkowej. Pamiętaj, aby w
treści żądania uwzględnić ExternalOfferDetails.
Przykładowe żądanie:
POST /androidpublisher/v3/applications/com.myapp.android/externalTransactions?externalTransactionId=123-456-789
Body
{
"originalPreTaxAmount" : {
"priceMicros" : "0",
"currency" : "USD"
},
"originalTaxAmount" : {
"priceMicros" : "0",
"currency" : "USD"
},
"transactionTime" : "2025-12-22T12:45:00Z",
"oneTimeTransaction" : {
"externalTransactionToken" : "my_token",
},
"userTaxAddress" : {
"regionCode" : "US"
},
"externalOfferDetails" : {
"linkType" : "LINK_TO_APP_DOWNLOAD",
"installedAppPackage" : "my.external.app",
"installedAppCategory" : "APP"
}
}
Migracja z ręcznego raportowania transakcji rozliczeń alternatywnych
Aby przenieść aktywne subskrypcje, które rozpoczęły się w okresie, gdy oferowano rozliczenia alternatywne bez automatycznego raportowania, utwórz nową transakcję o zerowym koszcie, używając pola migratedTransactionProgram zamiast określać initialExternalTransactionId lub externalTransactionToken. Ustaw transactionTime na czas, w którym użytkownik po raz pierwszy zarejestrował się w każdej aktywnej subskrypcji. Następnie zgłaszaj każdą kolejną transakcję związaną z tymi subskrypcjami w normalny sposób za pomocą interfejsów API, podając initialExternalTransactionId użyty wcześniej do utworzenia transakcji odnowienia.
Po przeniesieniu subskrypcji nie musisz już ręcznie zgłaszać kolejnych transakcji związanych z subskrypcją, o ile są one zgłaszane za pomocą zautomatyzowanych metod opisanych na tej stronie.
Podczas przenoszenia subskrypcji pamiętaj o limitach, aby sprawdzić, czy migracja nie spowoduje wyczerpania limitu. Jeśli trzeba przenieść wiele subskrypcji, rozłóż je na kilka dni lub poproś o zwiększenie limitu.
Pola migratedTransactionProgram można używać tylko podczas migracji z ręcznego raportowania. Zostanie ono wycofane, gdy ręczne raportowanie nie będzie już obsługiwane.
Przykładowe żądanie:
# Note that the externalTransactionId specified here will used to report
# subsequent transactions.
POST /androidpublisher/v3/applications/com.myapp.android/externalTransactions?externalTransactionId=abc-def-ghi
Body
{
# Be sure to set the price to 0 for this transaction since it does not reflect
# an actual subscription renewal.
"originalPreTaxAmount" : {
"priceMicros" : "0",
"currency" : "KRW"
},
"originalTaxAmount" : {
"priceMicros" : "0",
"currency" : "KRW"
},
# The transaction time should be set to when the user signed up for this
# subscription.
"transactionTime" : "2022-02-22T12:45:00Z",
"recurringTransaction" : {
"migratedTransactionProgram" : "USER_CHOICE_BILLING",
"externalSubscription" : {
"subscriptionType" : "RECURRING"
}
},
"userTaxAddress" : {
"regionCode" : "KR"
}
}
Wymagania dotyczące programów partnerskich Play
Deweloperzy uczestniczący w programach partnerskich, takich jak program Media Experience w Play, muszą podać
transaction_program_code podczas zgłaszania transakcji zewnętrznych. Jeśli jesteś deweloperem kwalifikującym się do udziału w programie, skontaktuj się z menedżerem ds. rozwoju biznesu, aby uzyskać więcej informacji o tym, jak ustawić to pole.
Zgłaszanie zwrotów środków za zakupy do Google Play
Zintegruj się z interfejsem externaltransactions API, aby zgłaszać transakcje, za które użytkownicy otrzymali zwrot środków poza systemem rozliczeniowym Google Play. Aby Google Play mogło prawidłowo zidentyfikować transakcję, za którą został zwrócony koszt, w parametrach adresu URL należy uwzględnić odpowiedni externalTransactionId wcześniej zgłoszonej transakcji.
Podczas zgłaszania zwrotów środków za zakupy subskrypcji odwołuj się do externalTransactionId konkretnego cyklu subskrypcji, za który zwracasz środki.
Przykład: załóżmy, że subskrypcja ma te transakcje:
Transakcja początkowa z zewnętrznym identyfikatorem transakcji ABC.1234-5678-9012-34567
Pierwsza transakcja cykliczna z zewnętrznym identyfikatorem transakcji ABC.1234-5678-9012-34567..0
Druga transakcja cykliczna z zewnętrznym identyfikatorem transakcji ABC.1234-5678-9012-34567..1
Aby zgłosić zwrot środków za wszystkie transakcje związane z subskrypcją, musisz wysłać 3 osobne prośby o zwrot środków: jedną w przypadku transakcji początkowej i 2 w przypadku kolejnych transakcji.
Ta metoda akceptuje zarówno pełne zwroty środków (gdzie kwota jest taka sama jak kwota, którą użytkownik zapłacił w pierwotnej transakcji zewnętrznej), jak i częściowe zwroty środków (gdzie kwota jest mniejsza niż kwota, którą użytkownik zapłacił w pierwotnej transakcji zewnętrznej). W przypadku częściowych zwrotów środków musisz podać kwotę przed opodatkowaniem, która została zwrócona.
Limity interfejsu API
Interfejs Externaltransactions API podlega limitom interfejsu API w przypadku
wszystkich wywołań, tak jak każdy inny punkt końcowy w interfejsie Google Play Developer API.
Dodatkowo interfejs Externaltransactions API ma limit 1200 zapytań na minutę
(QPM) w przypadku wywołań Externaltransactions.createexternaltransaction lub
Externaltransactions.refundexternaltransaction. Wywołania Externaltransactions.getexternaltransaction nie są wliczane do tego limitu 1200 zapytań na minutę.