{"id":137857,"date":"2022-12-15T00:00:00","date_gmt":"2022-12-15T00:00:00","guid":{"rendered":"https:\/\/adapty.io\/fr-android-in-app-purchases-part-5-server-side-purchase-validation\/"},"modified":"2022-12-15T00:00:00","modified_gmt":"2022-12-15T00:00:00","slug":"android-in-app-purchases-part-5-server-side-purchase-validation","status":"publish","type":"post","link":"https:\/\/adapty.io\/fr\/blog\/android-in-app-purchases-part-5-server-side-purchase-validation\/","title":{"rendered":"Achats int\u00e9gr\u00e9s sous Android, 5e partie : validation des achats c\u00f4t\u00e9 serveur"},"content":{"rendered":"\n

La validation c\u00f4t\u00e9 serveur peut vous aider \u00e0 valider l’authenticit\u00e9 des achats. L’appareil envoie une demande aux serveurs de Google pour savoir si l’achat a effectivement eu lieu et s’il est valable.<\/p>\n\n\n\n

Dans ce guide, nous allons voir comment configurer la validation c\u00f4t\u00e9 serveur (server-side) pour les applications (app) fonctionnant sous Android. <\/p>\n\n\n\n

Pourquoi valider les achats?<\/h2>\n\n\n\n

Il convient de noter que la validation c\u00f4t\u00e9 serveur n’est pas obligatoire : les achats int\u00e9gr\u00e9s aux applications fonctionneront toujours sans elle. Elle pr\u00e9sente cependant des avantages non n\u00e9gligeables :<\/p>\n\n\n\n

    \n
  1. Analyse avanc\u00e9e des paiements<\/strong>, ce qui est particuli\u00e8rement important pour les abonnements puisque tout ce qui se passe apr\u00e8s l’activation n’est pas trait\u00e9 par le dispositif. Sans traitement des achats c\u00f4t\u00e9 serveur, vous ne serez pas en mesure de r\u00e9cup\u00e9rer l’\u00e9tat actuel de l’abonnement et de savoir si l’utilisateur a renouvel\u00e9 ou annul\u00e9 son abonnement, s’il y a des probl\u00e8mes de paiement, etc.<\/li>\n\n\n\n
  2. Pouvoir v\u00e9rifier l’authenticit\u00e9 de l’achat. <\/strong>Vous aurez la certitude que la transaction n’est pas frauduleuse et que l’utilisateur a r\u00e9ellement pay\u00e9 votre produit.<\/li>\n\n\n\n
  3. Abonnements multi-plateformes. <\/strong>Si vous pouvez v\u00e9rifier l’\u00e9tat de l’abonnement de l’utilisateur en temps r\u00e9el, vous pouvez le synchroniser avec d’autres plateformes. Par exemple, l’utilisateur qui a achet\u00e9 l’abonnement \u00e0 partir d’un appareil iOS pourra l’utiliser sous Android, le Web et d’autres plateformes. <\/li>\n\n\n\n
  4. La possibilit\u00e9 de contr\u00f4ler l’acc\u00e8s au contenu du c\u00f4t\u00e9 du serveur<\/strong>, ce qui vous prot\u00e8ge des utilisateurs qui tentent d’acc\u00e9der aux donn\u00e9es sans abonnement en ex\u00e9cutant simplement des requ\u00eates au serveur. <\/li>\n<\/ol>\n\n\n\n

    D’apr\u00e8s notre exp\u00e9rience, le premier avantage suffit \u00e0 lui seul \u00e0 mettre en place le traitement des achats c\u00f4t\u00e9 serveur.<\/p>\n\n\n\n\n\n

    Validation du paiement<\/h2>\n\n\n\n

    Nous pouvons r\u00e9sumer la validation des paiements (purchase validation) Android avec ce sch\u00e9ma :<\/p>\n\n\n\n

    \"\"<\/figure>\n\n\n\n

    Authentification pour les demandes de Google Play Developer API<\/h3>\n\n\n\n

    Pour travailler avec Google Play Developer API, vous devez d’abord g\u00e9n\u00e9rer une cl\u00e9 pour signer les demandes. Tout d’abord, vous devez relier votre compte Google Play Console (o\u00f9 vous g\u00e9rez votre application) \u00e0 votre compte Google Cloud (o\u00f9 vous g\u00e9n\u00e9rerez une cl\u00e9 pour la signature des demandes). Une fois que tout est configur\u00e9, vous devrez accorder \u00e0 l’utilisateur des droits de gestion des achats. Il faudrait un article d\u00e9di\u00e9 pour d\u00e9crire ce processus. Heureusement, nous l’avons d\u00e9j\u00e0 couvert dans un guide \u00e9tape par \u00e9tape que vous trouverez dans Adapty documentation<\/a>. <\/p>\n\n\n\n

    Notez que vous devrez g\u00e9n\u00e9ralement attendre 24 heures ou plus apr\u00e8s avoir g\u00e9n\u00e9r\u00e9 une cl\u00e9 pour qu’elle commence \u00e0 fonctionner. Pour \u00e9viter cela, il suffit de mettre \u00e0 jour la description de tout produit ou abonnement int\u00e9gr\u00e9 \u00e0 l’application, ce qui activera instantan\u00e9ment la cl\u00e9. <\/p>\n\n\n\n

    Nous utilisons la biblioth\u00e8que officielle google-api-python-client<\/a> pour travailler avec Google Play Developer API. Cette biblioth\u00e8que est disponible pour la majorit\u00e9 des langages populaires, et je recommande de l’utiliser car elle prend en charge toutes les m\u00e9thodes dont vous pourriez avoir besoin.<\/p>\n\n\n\n

    Validation des transaction d’abonnement :<\/h3>\n\n\n\n

    Contrairement \u00e0 la validation c\u00f4t\u00e9 serveur d’iOS<\/a>, sous Android, la validation des abonnements et des autres produits est mise en \u0153uvre \u00e0 l’aide de diverses m\u00e9thodes. Par cons\u00e9quent, lorsque vous validez une transaction, vous devez savoir si vous avez affaire \u00e0 un produit ou \u00e0 un abonnement. En pratique, cela signifie que vous devrez transf\u00e9rer ces donn\u00e9es \u00e0 partir de l’application mobile et conserver l’indicateur dans la base de donn\u00e9es au cas o\u00f9 une nouvelle validation du jeton serait n\u00e9cessaire.<\/p>\n\n\n\n

    La deuxi\u00e8me diff\u00e9rence importante est que si chaque transaction poss\u00e8de son propre jeton dans Android, toutes les transactions iOS utilisent un secret partag\u00e9 propre \u00e0 l’application pour stocker l’historique complet de la transaction. Cela signifie que si vous voulez \u00eatre en mesure de renouveler les achats de l’utilisateur \u00e0 tout moment, vous devrez stocker tous les jetons d’achat, au lieu d’en choisir un seul arbitrairement.<\/p>\n\n\n\n

    Pour valider l’abonnement, vous devrez invoquer la m\u00e9thode  purchases.subscriptions.get<\/em><\/a>.  En gros, c’est un appel \u00e0 une requ\u00eate GET :<\/p>\n\n\n\n

    <\/path><\/path><\/svg><\/span>
    https<\/span>:<\/span>\/\/androidpublisher.googleapis.com\/androidpublisher\/v3\/applications\/{packageName}\/purchases\/subscriptions\/{subscriptionId}\/tokens\/{token}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n

    Tous les param\u00e8tres sont obligatoires :<\/p>\n\n\n\n