web-dev-qa-db-fra.com

Comment vérifier Android transactions de facturation dans l'application sur mon serveur?

J'ai fait un Android application où les éléments peuvent être achetés à l'aide de in-app-facturation . Lorsqu'un élément est acheté, la transaction peut facilement être synchronisée entre Android Market et le téléphone - à utiliser dans l'application. Mais, j'ai besoin que mon serveur soit au courant de l'achat. La décision de livrer des données spécifiques à une application doit être effectuée sur mon serveur, pas dans le client. app.

Par exemple.

  1. L'utilisateur achète l'élément x de Android marché.
  2. Les données de transaction y sont envoyées au client.
  3. Le client envoie Y à mon serveur.
  4. Le client demande au serveur de fournir du contenu pour X.
  5. Server délivre le contenu si y est valide . Comment cela peut-il être accompli?

q: Comment vérifier que les données de transaction provenant du Android Client (probablement originaires de serveurs Google) n'est pas faux? c'est-à-dire qu'un pirate informatique n'a pas généré les données.

Google Server -> Android Client -> Mon serveur -> Android Client

Peut-être que c'est plus d'un PHP question qu'autre chose. Qu'est-ce que le script de mon serveur (PHP) devrait-il faire pour vérifier que les données récupérées sont réelles?

34
l33t

Utilisez openssl_verify ($ données, $ signature, $ clé)

Les variables $ Data et $ Signature doivent être envoyées à partir du Android Client sur votre serveur PHP à l'aide de HTTPS. La transaction contient les deux éléments. Envoyez-le à vos serveurs avant de reconnaître la transaction sur le Client. (Voir la documentation ici - http://developer.android.com/guide/market/billing/billing_integrate.html )

La variable $ Key est votre clé publique Google disponible à partir de votre compte Publisher à partir du panneau de facturation de licences et de l'application. Copiez la clé publique et utilisez-la dans votre code PHP, de préférence à l'aide d'un fichier de configuration que vous installez sur vos serveurs plutôt que dans votre code PHP actuel.

Si l'appel OpensSl_verify réussit, vous devez stocker les numéros de commande sur vos serveurs et vous assurer qu'ils sont uniques afin qu'ils ne puissent pas être rejoués. Sachez qu'un seul reçu de données et une paire de signatures pourraient contenir de nombreux numéros de commande bien que son ordre habituellement.

20
abdollar

Les données de transaction sont signées avec une clé privée spécifique à votre application. Il existe également une nonce pour empêcher les replays (c'est-à-dire envoyer la même chose, valide, données plusieurs fois). Si vous vérifiez que la nonce est unique et que la signature est valide sur votre serveur, vous pouvez être raisonnablement sûr que ce n'est pas faux. Vérifiez la pièce à propos de l'IAB de ce fichier Google IO pour une discussion.

4
Nikolay Elenkov