我们如何在服务器端验证 Android 应用内计费收据?
Posted
技术标签:
【中文标题】我们如何在服务器端验证 Android 应用内计费收据?【英文标题】:How do we verify Android in-app billing receipt on the server side? 【发布时间】:2012-01-13 03:07:42 【问题描述】:我正在为一款 android 游戏实施应用内结算,我们希望使用服务器来存储购买信息。
据我目前了解,Android Market会以Broadcast receiver的形式向app返回一个关于购买状态的回调。但是由于我们在服务器上保存交易信息,我的应用程序必须发出一些 http post 请求并更新我的服务器。这个http post请求很有可能被黑客手动模仿。如何通过我的服务器代码验证 Android 市场收据信息?
我的服务器是否有任何可用的 Google 结帐回调?或者有没有办法验证 http 客户端提供的 IAB 响应是真实的,并且它只是在我的应用中完成的购买!
关于苹果ios IAP流程,they have a validate web API@https://sandbox.itunes.apple.com/verifyReceipt我们可以通过
req.method = URLRequestMethod.POST;
req.data = "\"receipt-data\" : \""+ t.receipt +"\"";
它会说明收据是否正确。我们有适用于 Android 的类似功能吗?
【问题讨论】:
【参考方案1】:这是一个旧帖子,但我希望对其他人有所帮助。
有一种方法可以从服务器端验证购买,你必须使用这个 REST API。
https://developers.google.com/android-publisher/api-ref/purchases/products/get
【讨论】:
【参考方案2】:更新:您可以使用getPurchases()
方法来检索“未消费”的购买,如开发者文档中所述:http://developer.android.com/google/play/billing/billing_reference.html#getPurchases
原始答案(现已过时)
Google Checkout API 已弃用。您现在应该使用购买状态 API。
如果您打算使用购买状态 API,上面的链接提到了这些限制:
您可以使用 API 仅检查单个商品的状态 - 目前不支持批量请求订单状态。 您可以查询2013年6月12日及之后的订单详情,但不能查询之前的订单。 您可以查询使用 In-app Billing v3 API 进行的任何项目类型的购买,或使用 In-app Billing v1 和 v2 进行的托管项目的购买。您不能使用 Purchase Status API 来查询使用 In-app Billing v1 或 v2 购买的非托管商品。【讨论】:
链接消失了,它只是重定向到developer.android.com/google/play/developer-api.html#overview 谢谢,我已经更新了答案,希望它更新一点。【参考方案3】:编辑:此答案已过时,请参阅 Dan J 的答案。
没有回调,但 Google Checkout 有一个 API。你的答案是here。
【讨论】:
这个答案已经过时了,Dan J 是对的。愿 OP 接受那个。以上是关于我们如何在服务器端验证 Android 应用内计费收据?的主要内容,如果未能解决你的问题,请参考以下文章