web-dev-qa-db-fra.com

Android: validation de la facture d'achat inApp google play

J'utilise Google Wallet pour ma passerelle de paiement, après avoir acheté le produit Google, il me répond ci-dessous que

{ 
 "orderId":"12999763169054705758.1371079406387615", 
 "packageName":"com.example.app",
 "productId":"exampleSku",
 "purchaseTime":1345678900000,
 "purchaseState":0,
 "developerPayload":"bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
 "purchaseToken":"rojeslcdyyiapnqcynkjyyjh"
 }

J'essaie d'utiliser validation du reç que Google Play a récemment introduit.Dans la console de développeur Google que j'ai créée clé de certificat par compte de service dans l'autorisation. Mais je ne sais pas comment utiliser la validation des reçus après avoir acheté un produit sur Google Play Store.

Alors quelqu'un peut-il m'aider, s'il vous plaît, à faire le validation du reç sur InApp Purchase.

70
Binil Surendran

Google fournit la validation des reçus via Google Play Developer API . Cette dernière regroupe deux points finaux qui vous intéresseront le plus: Purchases.products: get et Purchases. abonnements: get .

Purchases.products: get peut être utilisé pour vérifier un achat de produit sans renouvellement automatique, où Purchases.subscriptions: get sert à vérifier et à revérifier les abonnements de produit à renouvellement automatique.

Pour utiliser l’un ou l’autre des points de terminaison, vous devez connaître les packageName, productId, purchaseToken, tous ces éléments se trouvant dans la charge utile que vous avez reçue lors de l’achat. Vous devez également disposer d'un access_token que vous pouvez obtenir en créant un compte de service Google API.

Pour commencer à utiliser un compte de service, accédez d'abord à la console développeur de Google play page des paramètres d'accès à l'API , puis cliquez sur le bouton Créer un nouveau projet:

Create a new Google API Project

Vous devriez maintenant voir un nouveau projet lié et quelques nouvelles sections. Dans la section Compte de service, cliquez sur le bouton Créer un compte de service.

Create a new Service Account

Une boîte d’information avec les instructions pour créer votre compte de service vous sera présentée. Cliquez sur le lien vers la console Google Developers et un nouvel onglet apparaîtra.

Open the Google Developers Console

Maintenant, cliquez sur Créer un nouvel ID client, sélectionnez Compte de service parmi les options et cliquez sur Créer un ID client.

Create a new Client ID

Un fichier JSON sera téléchargé. Il s'agit de votre jeton Web JSON que vous utiliserez pour échanger un access_token afin de le conserver en sécurité.

Revenez ensuite sur la console développeur de Google Play, puis cliquez sur Terminé dans la boîte d’informations. Vous devriez voir votre nouveau compte de service dans la liste. Cliquez sur Accorder l'accès à côté de l'email du compte de service.

Grant access

Ensuite, sous Choisissez un rôle pour cet utilisateur, sélectionnez Finance, puis cliquez sur Ajouter un utilisateur.

Set the role to Finance

Vous avez maintenant configuré votre compte de service et celui-ci dispose de tous les accès nécessaires pour effectuer des validations de réception. La prochaine étape consiste à échanger votre JWT contre un access_token.

Le access_token expire après une heure d'échange, vous avez donc besoin d'un code serveur pour gérer cela et Google a fourni plusieurs bibliothèques dans de nombreuses langues pour le gérer (liste non exhaustive):

Je n’entrerai pas dans les détails car la documentation sur l’utilisation de ces bibliothèques est abondante, mais je tiens à mentionner que vous souhaitez utiliser le https://www.googleapis.com/auth/androidpublisher comme portée de OAuth2, le client_email du JWT en tant que issuer et la clé publique que vous pouvez obtenir du private_key et de la phrase secrète notasecret seront utilisés pour le signing_key.

Une fois que vous avez le access_token vous êtes prêt (au moins pour la prochaine heure, heure à laquelle vous voudrez en demander un nouveau en suivant le même processus dans le paragraphe ci-dessus).

Pour vérifier l'état d'un achat de consommable (sans renouvellement automatique), envoyez une requête http get à: https://www.googleapis.com/androidpublisher/v2/applications/com.example.app/purchases/products/exampleSku/tokens/rojeslcdyyiapnqcynkjyyjh?access_token=your_access_token

Si vous obtenez un code de réponse de 200 http, tout se passera comme prévu et votre achat sera valide. Un 404 signifiera que votre jeton est invalide et qu'il s'agissait donc probablement d'une tentative de fraude. Un 401 signifie que votre jeton d'accès est invalide et un 403, votre compte de service n'a pas un accès suffisant. Vérifiez que vous avez activé Finance le compte d'accès dans la console développeur de Google Play.

La réponse d'un 200 ressemblera à ceci:

{
  "kind": "androidpublisher#productPurchase",
  "purchaseTimeMillis": long,
  "purchaseState": integer,
  "consumptionState": integer,
  "developerPayload": string
}

Pour une explication de chaque propriété, voir https://developers.google.com/Android-publisher/api-ref/purchases/products .

Les abonnements sont similaires, mais le système d'extrémité ressemble à ceci:

https://www.googleapis.com/androidpublisher/v2/applications/packageName/purchases/subscriptions/subscriptionId/tokens/token?access_token=you_access_token

Et la réponse devrait contenir ces propriétés:

{
  "kind": "androidpublisher#subscriptionPurchase",
  "startTimeMillis": long,
  "expiryTimeMillis": long,
  "autoRenewing": boolean
}

Voir https://developers.google.com/Android-publisher/api-ref/purchases/subscriptions pour la description des propriétés et notez que startTimeMillis et expiryTimeMillis seront soumis changer en fonction de la durée de l'abonnement.

Bonne validation!

176
Marc Greenstock

La réponse de Marc est excellente. J'ajouterai seulement que le bibliothèque de clients de l'API de développeur Google Play pour Java simplifie considérablement la connexion de votre serveur aux serveurs de Google Play. La bibliothèque gère automatiquement l'actualisation du jeton d'authentification et fournit également une API typée afin que vous n'ayez pas à vous tracasser avec des URL.

Voici comment configurer le singleton Publisher:

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();

Le code suivant interroge un achat de produit:

ProductPurchase product = publisher.purchases().products().get(PACKAGE_NAME, sku, token).execute();
Integer purchaseState = product.getPurchaseState();
product.getPurchaseTimeMillis();
product.getConsumptionState();
product.getDeveloperPayload();

Vous pouvez également interroger des abonnements:

SubscriptionPurchase sub = publisher.purchases().subscriptions().get(PACKAGE_NAME, sku, token).execute();
sub.getAutoRenewing();
sub.getCancelReason();
...
19
Jeshurun

Cette réponse est excellente. Un autre problème que nous avons rencontré en suivant les instructions est que le compte de service ne s’affiche pas dans la console Google Play. Nous avons fini par trouver cette solution pour vous aider: Le compte de service n'apparaît pas dans la console Google après la création

Fondamentalement, accédez à IAM sur la console API Google et ajoutez le nouveau compte de service, puis celui-ci apparaîtra sur la console Google Play. capture d'écran

0
soarling