Android : inApp 购买收据验证 google play

新手上路,请多包涵

我正在使用谷歌钱包作为我的支付网关,在购买产品后谷歌给了我以下回复

{
 "orderId":"12999763169054705758.1371079406387615",
 "packageName":"com.example.app",
 "productId":"exampleSku",
 "purchaseTime":1345678900000,
 "purchaseState":0,
 "developerPayload":"bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
 "purchaseToken":"rojeslcdyyiapnqcynkjyyjh"
 }

我正在尝试使用 google play 新引入的 Receipt Validation 。在 Google Developer 控制台中,我在权限中通过服务帐户制作了 证书密钥。但我很困惑如何在从 Google Play 商店购买产品后使用收据验证。

那么任何人都可以帮助我如何进行 InApp 购买的 收据验证

原文由 Binil Surendran 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

Google 通过 Google Play Developer API 提供收据验证,API 中有两个您最感兴趣的端点: Purchase.products: getPurchases.subscriptions: get

Purchases.products: get 可用于验证非自动续订产品购买,其中 Purchases.subscriptions: get 用于验证和重新验证自动续订产品订阅。

要使用任一端点,您必须知道 packageNameproductIdpurchaseToken 所有这些都可以在您购买时收到的有效负载中找到。您还需要一个 access_token 您可以通过创建 Google API 服务帐户来获得它。

要开始使用服务帐户,请先转到 Google Play 开发者控制台 API 访问设置页面,然后单击创建新项目按钮:

创建一个新的 Google API 项目

您现在应该会看到一个新的链接项目和几个新部分,在“服务帐户”部分中,单击“创建服务帐户”按钮。

创建一个新的服务帐户

您将看到一个信息框,其中包含创建服务帐户的说明。单击指向 Google Developers Console 的链接,将生成一个新选项卡。

打开谷歌开发者控制台

现在单击 Create new Client ID,从选项中选择 Service account,然后单击 Create Client ID。

创建新的客户 ID

将下载一个 JSON 文件,这是您用于交换 access_token 的 JSON Web 令牌,因此请妥善保管。

接下来,将选项卡切换回 Google Play 开发者控制台,然后在信息框中单击完成。您应该会在列表中看到您的新服务帐户。单击服务帐户电子邮件旁边的授予访问权限。

授予访问权限

接下来在为该用户选择角色下,选择财务并单击添加用户。

将角色设置为财务

您现在已经设置了您的服务帐户,并且它具有执行收据验证所需的所有权限。接下来是将您的 JWT 交换为 access_token。

access_token 在交换一小时后过期,因此您需要一些服务器代码来处理此问题,Google 提供了多种语言的多个库来处理此问题(列表并不详尽):

  • 红宝石: https ://github.com/google/google-api-ruby-client
  • Node.js: https ://github.com/google/google-api-nodejs-client
  • Java: https ://github.com/google/google-api-java-client
  • Python: https ://github.com/google/google-api-python-client
  • C#: https ://github.com/googleapis/google-api-dotnet-client

我不会详细介绍,因为有很多关于如何使用这些库的文档,但我会提到你想使用 https://www.googleapis.com/auth/androidpublisher 作为 OAuth2 范围, client_email 来自the JWT as the issuer and the public key you can get from the private_key and the passphrase notasecret will be used for the signing_key .

一旦你有了 access_token 你就可以开始了(至少在接下来的一个小时内,你需要按照上一段中的相同过程请求一个新的)。

要检查消耗品(非自动续订)购买的状态,请发送 http get 请求至: https://www.googleapis.com/androidpublisher/v2/applications/com.example.app/purchases/products/exampleSku/tokens/rojeslcdyyiapnqcynkjyyjh?access_token=your_access_token

如果您收到 200 http 响应代码,则一切都按计划进行并且您的购买是有效的。 404 表示您的令牌无效,因此购买很可能是欺诈企图。 401 表示您的访问令牌无效,403 表示您的服务帐户访问权限不足,请检查您是否已在 Google Play 开发者控制台中为访问帐户启用 财务

来自 200 的响应将类似于以下内容:

 {
  "kind": "androidpublisher#productPurchase",
  "purchaseTimeMillis": long,
  "purchaseState": integer,
  "consumptionState": integer,
  "developerPayload": string
}

有关每个属性的说明,请参阅 https://developers.google.com/android-publisher/api-ref/purchases/products

订阅类似,但端点如下所示:

https://www.googleapis.com/androidpublisher/v2/applications/packageName/purchases/subscriptions/subscriptionId/tokens/token?access_token=you_access_token

响应应包含以下属性:

 {
  "kind": "androidpublisher#subscriptionPurchase",
  "startTimeMillis": long,
  "expiryTimeMillis": long,
  "autoRenewing": boolean
}

有关属性说明,请参阅 https://developers.google.com/android-publisher/api-ref/purchases/subscriptions 并注意 startTimeMillisexpiryTimeMillis 将根据情况发生变化关于订阅期限。

验证愉快!

原文由 Marc Greenstock 发布,翻译遵循 CC BY-SA 4.0 许可协议

我遇到了类似的问题,问题出在我们在谷歌开发者项目中所做的设置中。

有关设置,请参阅 create-play-service-credentials 。使用您创建应用内商品时使用的同一主帐户。

确保删除前一个。

链接到 Google 开发者项目 您的 Play 开发者帐户需要链接到 Google 开发者项目。

1a。打开设置 > 开发者帐户菜单并选择 API 访问

API访问

1b。选择链接以将您的 Play 帐户连接到 Google 开发者项目

选择项目链接

1c。同意条款与条件

同意条款条件

2.创建服务帐户 接下来我们需要创建一个服务帐户。这是从 Google API 控制台完成的。

2a.选择创建服务帐户

创建服务帐户

2b。创建服务帐户密钥凭据

服务帐户

2c。输入服务帐户的详细信息- 授予角色访问权限有一个“可选”步骤。确保您授予对当前用户角色的访问权限。

输入服务帐户详细信息

2d。下载您的 JSON 凭证: json 凭证

3. 授予访问权限

3a。在 Play 管理中心中,对新创建的服务帐号选择授予访问权限

授予访问权限

3b。授予以下权限:

申请权限

在此之后等待 48 小时以允许 Google 传播 API 的所有访问权限。

原文由 Ankit Jindal 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题