Google fournit la validation des reçus via l' API développeur de Google Play , dans l'API se trouvent deux points de terminaison qui vous intéresseront le plus: Purchases.products: get et Purchases.subscriptions: get .
Purchases.products: get
peut être utilisé pour vérifier un achat de produit sans renouvellement automatique, où Purchases.subscriptions: get
est pour vérifier et revérifier les abonnements de produits à renouvellement automatique.
Pour utiliser des points d' extrémité , vous devez connaître le packageName
, productId
, purchaseToken
tous ces éléments peuvent être trouvés dans la charge utile que vous avez reçu à l' achat. Vous avez également besoin d'un access_token
que vous pouvez obtenir en créant un compte de service Google API.
Pour commencer avec un compte de service, accédez d'abord à la page des paramètres d'accès à l'API de la console développeur de Google play et cliquez sur le bouton Créer un projet:
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.
Une boîte d'informations vous sera présentée avec des instructions pour créer votre compte de service. Cliquez sur le lien vers Google Developers Console et un nouvel onglet apparaîtra.
Cliquez maintenant sur Créer un nouvel ID client, sélectionnez Compte de service dans les options et cliquez sur Créer un ID client.
Un fichier JSON sera téléchargé, c'est votre jeton Web JSON que vous utiliserez pour échanger contre un, access_token
alors gardez-le en sécurité.
Ensuite, revenez à la console développeur de Google play et cliquez sur Terminé dans la zone d'informations. Vous devriez voir votre nouveau compte de service dans la liste. Cliquez sur Accorder l'accès à côté de l'e-mail du compte de service.
Ensuite, sous Choisir un rôle pour cet utilisateur, sélectionnez Finance et cliquez sur Ajouter un utilisateur.
Vous avez maintenant configuré votre compte de service et il dispose de tous les accès nécessaires pour effectuer les validations de reçus. Ensuite, échangez 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 gérer cela (liste non exhaustive):
Je n'entrerai pas dans les détails car il y a beaucoup de documentation sur la façon d'utiliser ces bibliothèques, mais je mentionnerai que vous voulez utiliser le https://www.googleapis.com/auth/androidpublisher
comme la portée OAuth2, le client_email
du JWT comme le issuer
et la clé publique que vous pouvez obtenir du private_key
et la phrase de passe notasecret
sera utilisée pour le signing_key
.
Une fois que vous avez le, access_token
vous êtes prêt à partir (au moins pour l'heure suivante, à quel point 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 consommables (sans renouvellement automatique), faites une get
demande http à: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 http 200, tout s'est déroulé comme prévu et votre achat était valide. Un 404 signifie que votre jeton est invalide, donc l'achat était très probablement une tentative de fraude. Un 401 signifiera que votre jeton d'accès est invalide et un 403 signifiera que votre compte de service a un accès insuffisant, vérifiez que vous avez activé Finance pour 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é, consultez https://developers.google.com/android-publisher/api-ref/purchases/products .
Les abonnements sont similaires, mais le point de terminaison ressemble à ceci:
https://www.googleapis.com/androidpublisher/v2/applications/packageName/purchases/subscriptions/subscriptionId/tokens/token?access_token=you_access_token
Et la réponse doit 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 les descriptions des propriétés et notez que startTimeMillis
et expiryTimeMillis
sera sujet à changement en fonction de la durée de l'abonnement.
Bonne validation!