购买Google Play应用内结算第3版的服务器端验证(第2部分)

bri*_*tzl 24 android in-app-purchase in-app-billing

所以我想我理解了应用内计费和服务器端验证是如何工作的,这要归功于对我之前的一个问题的回答,但现在我想起来我仍然迷失了......

这就是我拥有的和我想做的事情:

我有一个应用程序,用户可以购买几个"项目".每个项目都存储在服务器上,并且项目应该在购买时可以在应用程序中下载.这些项目是可以只购买一次的管理项目(即非消耗品).我在Google Play开发者控制台中定义项目没有问题,我可以成功购买.

我不明白的是我如何让我的服务器不仅验证购买(使用purchaseToken和签名),还知道它是项目X而不是购买的项目Y?是否有一些Google API,服务器可以与Google通信并询问某个purchaseToken属于哪个商品ID?还有其他方法可以做到这一点吗?

bri*_*tzl 43

我不想回答我自己的问题,但是,嘿,没有人做过!我和我的同事们今天早上又重新审视了这个问题.在我再次了解TrivialDrive示例中客户端验证的工作原理之后,我终于找到了解决问题的方法.伙计,当我明白什么是错的时候,我是不是想戴上我的"愚蠢帽子".

我认为是buyToken和用于验证购买的签名,但是这样就没有办法验证它是购买的商品A还是商品B.

如果您想在向买方提供内容之前进行服务器端验证(或任何类型的验证),那么它实际上是原始JSON数据(如果您使用IabHelper类,则从Purchase类获取原始JSON)您应该与签名和公钥一起使用.由于它是您传递给服务器的原始JSON数据,因此它还包含有关购买的所有信息(例如SKU ID等).

将开发人员有效负载设置为唯一标识用户(而不是设备!)的内容也很重要.在我们的例子中,每个用户在服务器上都有一个帐户,我使用唯一的用户ID作为开发人员有效负载.

/Mr.Stupid签约!

  • StackOverflow鼓励回答您自己的问题,所以不要担心. (9认同)

use*_*421 12

自2013年6月起,您可以使用Purchase Status APIGoogle API客户端库直接在服务器端使用Google Play验证购买.