Comment configurer un point de terminaison de vérification de produits in-app personnalisé ?

Posté le 2. février 2022 par Jan Bunk


La mise en place de votre propre point de terminaison de vérification est un peu compliquée, c'est pourquoi nous n'avons malheureusement pas la capacité d'écrire un guide détaillé étape par étape sur cette procédure. Nous allons cependant vous indiquer les principales étapes dans ce guide.

L'application enverra un objet JSON via une requête POST tel que le suivant à votre point de terminaison de vérification :

Exemple JSON d'achat sur Google Play :


{
    // the userIdentifier you passed via Javascript
    "userIdentifier": "user123",
    // your app's ID (only relevant if you have multiple apps using the same verification endpoint)
    "appId": 1234,
    "purchaseDetails": {
        "verificationData": {
          "serverVerificationData": "abcdefghijklmnopqrstuvwx.AO-J1Oyabcdefghijklmnopqrstuvwxyz123456789_-abcdefghijklmnopqrstuvwxyz123456789_-abcdefghijklmnopq",
          // the "autoRenewing" property in localVerificationData is only sent if the product is a subscription
          "localVerificationData": "{\"orderId\":\"GPA.1234-1234-1234-12345\",\"packageName\":\"example.package.name\",\"productId\":\"exampleProductId\",\"purchaseTime\":1643389081662,\"purchaseState\":0,\"purchaseToken\":\"abcdefghijklmnopqrstuvwx.AO-J1Oyabcdefghijklmnopqrstuvwxyz123456789_-abcdefghijklmnopqrstuvwxyz123456789_-abcdefghijklmnopq\",\"autoRenewing\":true,\"acknowledged\":false}",
          "source": "google_play"
        },
        "productID": "consumable",
        "purchaseID": "GPA.1234-1234-1234-12345",
        // can also be "restored" if triggered by a call to restorePurchases()
        "status": "purchased",
        "transactionDate": "1643389081662"
      }
    }
}
    

Exemple JSON d'achat sur l'App Store :


{
  "appId": 1234,
  "userIdentifier": "user123",
  "purchaseDetails": {
    "verificationData": {
      "serverVerificationData": "veryLongBase64String",
      "localVerificationData": "veryLongBase64String",
      "source": "app_store"
    },
    "productID": "consumable",
    "purchaseID": "123",
    // can also be "restored" if triggered by a call to restorePurchases()
    "status": "purchased",
    "transactionDate": "1644239123000"
  }
}
    

Ensuite, sur la base du source, vous devez vérifier l'achat avec Google Play (if source==google_play) ou avec l'App Store (if source==app_store).

Puis, si l'achat est valide, vous devez accorder à l'utilisateur l'accès au produit acheté. Plus d'infos sur le déblocage des produits achetés

Enfin, renvoyez un code d'état 200 et ce JSON, afin que l'application puisse confirmer l'achat :


{
    "complete_purchase": true
}
    

Ou, si l'achat n'est pas valide, renvoyez un code d'état 200 et ce JSON, auquel cas l'application ne confirmera pas l'achat :


{
    "complete_purchase": false
}
    

Si vous ne renvoyez pas un code d'état 200, l'application essaiera de répéter la demande. Si l'application ne parvient pas à obtenir une réponse indiquant que l'achat a été vérifié, elle ne confirmera pas l'achat. L'achat sera alors automatiquement remboursé dans un délai de trois jours (s'il était effectivement valable).