Używam portfela Google do mojej bramki płatności, po zakupie produktu Google daje mi poniższą odpowiedź, że
{
"orderId":"12999763169054705758.1371079406387615",
"packageName":"com.example.app",
"productId":"exampleSku",
"purchaseTime":1345678900000,
"purchaseState":0,
"developerPayload":"bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
"purchaseToken":"rojeslcdyyiapnqcynkjyyjh"
}
Próbuję skorzystać z weryfikacji paragonów, którą niedawno wprowadził Google Play. W konsoli Google Developer utworzyłem klucz certyfikatu przez Konto usługi w Uprawnieniu. Ale jestem zdezorientowany, jak skorzystać z weryfikacji paragonu po zakupie produktu w sklepie Google Play.
Więc może ktoś mi pomóc jak to zrobić walidację Otrzymanie z InApp
zakupu.
android
in-app-purchase
android-pay
Binil Surendran
źródło
źródło
Odpowiedzi:
Google zapewnia weryfikację paragonów przez Google Play Developer API , w ramach API znajdują się dwa punkty końcowe, którymi będziesz najbardziej zainteresowany: Purchases.products: get i Purchases.subscriptions: get .
Purchases.products: get
może służyć do weryfikacji zakupu produktu bez automatycznego odnawiania, gdziePurchases.subscriptions: get
służy do weryfikacji i ponownej weryfikacji automatycznie odnawiających się subskrypcji produktów.Aby użyć punktu końcowego należy znać
packageName
,productId
,purchaseToken
wszystkie z nich można znaleźć w zawartości otrzymanej na zakup. Potrzebujesz również,access_token
które możesz uzyskać, tworząc konto usługi Google API.Aby rozpocząć korzystanie z konta usługi, najpierw przejdź do strony ustawień dostępu do interfejsu API konsoli programisty Google Play i kliknij przycisk Utwórz nowy projekt:
Powinieneś teraz zobaczyć nowy połączony projekt i kilka nowych sekcji, w sekcji Konto usługi kliknij przycisk Utwórz konto usługi.
Zostanie wyświetlone okno informacyjne z instrukcjami tworzenia konta usługi. Kliknij link do Google Developers Console, a pojawi się nowa karta.
Teraz kliknij Utwórz nowy identyfikator klienta, wybierz konto usługi z opcji i kliknij Utwórz identyfikator klienta.
Plik JSON zostanie pobrany, to jest Twój token sieciowy JSON, którego użyjesz do wymiany na taki,
access_token
więc zachowaj go w bezpiecznym miejscu.Następnie przełącz karty z powrotem do konsoli programisty Google Play i kliknij Gotowe w polu informacyjnym. Na liście powinno pojawić się nowe konto usługi. Kliknij Przyznaj dostęp obok adresu e-mail konta usługi.
Następnie w obszarze Wybierz rolę dla tego użytkownika wybierz Finanse i kliknij Dodaj użytkownika.
Skonfigurowałeś już swoje konto serwisowe i masz dostęp do wszystkich niezbędnych do weryfikacji paragonów. Następnym krokiem jest wymiana JWT na access_token.
access_token
Wygasa po jednej godzinie wymiany masz tak potrzebne niektóre kod serwera obsłużyć to i Google dostarczyły kilku bibliotek w wielu językach, aby poradzić sobie z tym (lista nie jest wyczerpująca):Nie będę wchodzić w szczegóły, ponieważ istnieje mnóstwo dokumentacji na temat korzystania z tych bibliotek, ale wspomnę, że chcesz użyć
https://www.googleapis.com/auth/androidpublisher
zakresu OAuth2 jako zakresu OAuth2,client_email
z JWT jakoissuer
i klucza publicznego, który można uzyskać zprivate_key
i hasłonotasecret
będzie używane dlasigning_key
.Gdy już masz
access_token
będziesz gotowy, możesz iść (przynajmniej przez następną godzinę, w którym to momencie będziesz chciał poprosić o nowy, postępując zgodnie z tym samym procesem w powyższym akapicie).Aby sprawdzić stan zakupu materiałów eksploatacyjnych (bez automatycznego odnawiania), przeprowadź http
get
żądanie do:https://www.googleapis.com/androidpublisher/v2/applications/com.example.app/purchases/products/exampleSku/tokens/rojeslcdyyiapnqcynkjyyjh?access_token=your_access_token
Jeśli otrzymasz kod odpowiedzi 200 http, wszystko poszło zgodnie z planem, a zakup był ważny. 404 oznacza, że twój token jest nieważny, więc zakup był najprawdopodobniej próbą oszustwa. 401 będzie oznaczać, że twój token dostępu jest nieprawidłowy, a 403 będzie oznaczać, że twoje konto usługi ma niewystarczający dostęp, sprawdź, czy włączyłeś Finanse dla konta dostępu w konsoli programisty Google Play.
Odpowiedź z 200 będzie wyglądać podobnie do tego:
{ "kind": "androidpublisher#productPurchase", "purchaseTimeMillis": long, "purchaseState": integer, "consumptionState": integer, "developerPayload": string }
Wyjaśnienie każdej usługi znajdziesz na https://developers.google.com/android-publisher/api-ref/purchases/products .
Subskrypcje są podobne, ale punkt końcowy wygląda następująco:
https://www.googleapis.com/androidpublisher/v2/applications/packageName/purchases/subscriptions/subscriptionId/tokens/token?access_token=you_access_token
Odpowiedź powinna zawierać te właściwości:
{ "kind": "androidpublisher#subscriptionPurchase", "startTimeMillis": long, "expiryTimeMillis": long, "autoRenewing": boolean }
Zobacz https://developers.google.com/android-publisher/api-ref/purchases/subscriptions, aby zapoznać się z opisami usług. Pamiętaj, że
startTimeMillis
iexpiryTimeMillis
będzie ulegać zmianom w zależności od czasu trwania abonamentu.Miłego sprawdzania!
źródło
Odpowiedź Marca jest doskonała. Dodam tylko, że biblioteka klienta Google Play Developer API Client dla Java znacznie upraszcza połączenie z serwera do serwerów Google Play. Biblioteka automatycznie obsługuje odświeżanie tokena uwierzytelniania, a także zapewnia bezpieczny interfejs API, dzięki czemu nie musisz grzebać w adresach URL.
Oto jak skonfigurować
Publisher
singletona:httpTransport = GoogleNetHttpTransport.newTrustedTransport(); jsonFactory = JacksonFactory.getDefaultInstance(); credential = GoogleCredential.fromStream(getClass().getResourceAsStream("/path/to/your/key.json")).createScoped(Collections.singleton(AndroidPublisherScopes.ANDROIDPUBLISHER)); publisher = new AndroidPublisher.Builder(httpTransport, jsonFactory, credential).setApplicationName(APP_NAME).build();
Poniższy kod pyta o zakup produktu:
Możesz podobnie zapytać o subskrypcje:
SubscriptionPurchase sub = publisher.purchases().subscriptions().get(PACKAGE_NAME, sku, token).execute(); sub.getAutoRenewing(); sub.getCancelReason(); ...
źródło
APP_NAME = APP_PACKAGE_NAME
.getClass().getResourceAsStream(...
użyłemnew FileInputStream(...
.credential.refreshToken();
między uzyskaniem referencji a wydawcą.@ marc-greenstock dostarczył świetnej odpowiedzi, jednak jest bardzo ważna rzecz dotycząca weryfikacji paragonu za pomocą Google Play Android Developer API.
Jeśli masz jakiekolwiek problemy z używaniem tego interfejsu API, a produkt w aplikacji został dodany PRZED udzieleniem uprawnień lub połączeniem z kontem usługi, musisz otworzyć „Produkty w aplikacji” i przeprowadzić aktualizację. Możesz na przykład edytować opis swojego produktu i zapisać. Powinieneś natychmiast uzyskać pozwolenie.
Spędziłem kilka godzin zastanawiając się, co zrobiłem źle ...
źródło
Ta odpowiedź jest doskonała. Kolejnym problemem, na który natknęliśmy się, podążając za wskazówkami, było to, że konto usługi nie pojawiło się w Konsoli Google Play. W końcu znaleźliśmy to rozwiązanie, które pomoże: konto usługi nie pojawia się w konsoli Google po utworzeniu
Zasadniczo przejdź do IAM w Google API Console i dodaj nowe konto usługi, a następnie pojawi się w Google Play Console. zrzut ekranu
źródło