我制作了一个可以使用 in-app-billing 购买商品的 Android 应用.购买商品后,交易可以轻松地在 Android Market 和手机之间同步 - 以便在应用程序中使用。但是,我需要我的服务器来了解购买。应在我的服务器上而不是在客户端应用程序中决定交付特定于应用程序的数据。
例如
- 用户从 Android Market 购买商品 X。
- 交易数据 Y 被发送到客户端。
- 客户端将 Y 发送到我的服务器。
- 客户端要求服务器为 X 提供内容。
- 如果 Y 有效,服务器会交付内容。如何做到这一点?
问:我如何验证来自 Android 客户端(可能来自 Google 服务器)的交易数据不是假的? IE。黑客没有生成数据。
Google 服务器 -> Android 客户端 -> 我的服务器 -> Android 客户端
也许这更像是一个 PHP 问题。为了验证检索到的数据是否真实,我的服务器脚本 (PHP) 究竟应该做什么?
最佳答案
使用 openssl_verify ($data, $signature, $key)
变量 $data 和 $signature 应该使用 https 从 android 客户端发送到您的 php 服务器。交易包含这两个项目。在您确认客户端上的交易之前将其发送到您的服务器。(请参阅此处的文档 - http://developer.android.com/guide/market/billing/billing_integrate.html)
变量 $key 是您的 Google 公钥,可从您的发布商帐户的“许可和应用内结算”面板获取。复制公钥并在您的 php 代码中使用它,最好使用您安装在服务器上的配置文件,而不是在您的实际 php 代码中。
如果 openssl_verify 调用成功,您应该将订单号存储在您的服务器上,并确保它们是唯一的,这样它们就不会被重放。请注意,单个数据收据和签名对可能包含许多订单号,尽管通常是一个订单。
关于php - 如何在我的服务器上验证 Android 应用内结算交易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8379819/