前提
好了,二话不说,先扔一个链接: https://developer.android.com/google/play/billing/billing_reference.html#getBuyIntent 以上是谷歌支付 Google Play In-app Billing 的服务器验证说明文档。 支付的时候,Android 客户端 通过调用 getBuyIntent()
方法获得以下 3个 参数:
- RESPONSE_CODE
- INAPP_PURCHASE_DATA
- INAPP_DATA_SIGNATURE
详细说明:
其中,INAPP_PURCHASE_DATA
是一段 json 字符串,包含订单的信息,具体内容如下: 有几个字段我们必须关注的:
- developerPayload : 这个是客户端的透传参数,建议放置自身的交易流水号(自有服务器的订单号)
- purchaseState :支付的结果, 0 (支付了), 1 (取消), 2 (退款)
- productId :商品ID
- orderId : 谷歌的订单ID (Ps: 当处于沙箱环境的时候,没有这个字段)
验证
作为服务端,需要接收 客户端 将 INAPP_PURCHASE_DATA
和 INAPP_DATA_SIGNATURE
参数。 以下是 PHP 服务端的实例:
1 |
|
进阶
当然,如果需要进一步的验证的话,可以通过 Google Play Developer API
来验证订单的真实情况。 以下是 Google Play Developer API
验证订单接口的文档: https://developers.google.com/android-publisher/api-ref/purchases/products/get 从安全角度考虑,可以考虑接入这一部分。不过,使用这些 API 的话,还需要 服务端 获取 Oauth2.0 的 Server to Server 的 Access token, 这部分暂时没有深入研究,但是其实也不难,具体的文档如下: https://developers.google.com/identity/protocols/OAuth2ServiceAccount#authorizingrequests 通过 生成 JWT 来获取请求 access token。 日后补充 这部分。 Have fun!!!