python - 如何执行身份验证以验证 Google 应用内订阅

标签 python google-api in-app-purchase google-oauth

我想在服务器端验证来自 androidpublisher API 的用户订阅。我们在我们的应用程序中订阅了一个月的产品。我们遵循的循环如下

  • 用户将获得产品列表。如果他已订阅,他将获得完整的产品列表。否则他将只能获得免费产品。
  • 当用户订阅时,他会从 google 那里收到一张购买收据。该收据将保存在我们的数据库中。每当用户需要产品列表时,都会从 Google API 验证该收据。如果有效,他将得到完整的结果。否则部分。

Google 为此提供了以下 API。

GET https://www.googleapis.com/androidpublisher/v2/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}

此 API 需要授权。我为此尝试了以下代码

receipt_json = json.loads(subscription_object.receipt)
service = build(serviceName='androidpublisher', version='v2', developerKey='key')
response = service.purchases().subscriptions().get(
        packageName=receipt_json.get('packageName'),
        subscriptionId=receipt_json.get('productId'),
        token=receipt_json.get('purchaseToken'))

但我得到的回应低于

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "required",
    "message": "Login Required",
    "locationType": "header",
    "location": "Authorization"
   }
  ],
  "code": 401,
  "message": "Login Required"
 }
}

请指导我如何在验证收据之前进行授权。重要的一点,我想在服务器端验证收据。不是客户端。因此,用户不会看到或点击任何链接来授权此请求。

最佳答案

看起来您实际上并没有发送任何身份验证 key / token 。您可以尝试使用 OAuth2 凭据(访问 token 或刷新 token )进行身份验证:

import httplib2
from googleapiclient.discovery import build
from oauth2client.client import OAuth2Credentials

credentials = OAuth2Credentials(...)
http = credentials.authorize(http=httplib2.Http())

service = build(serviceName='androidpublisher', version='v2', http=http)

关于python - 如何执行身份验证以验证 Google 应用内订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46648420/

相关文章:

python - 将矢量数据与 numpy 相关联

python - 模块 're' 没有属性 'findall'

Python 装饰器? - 有人可以解释一下吗?

android - 无法在 Android 上设置范围 Google 登录

api - 通过 API 访问 “Anyone with the link” Google 电子表格

iphone - App Store审核多种应用内购买方法

flutter - 如何在Flutter中本地存储高级内容购买状态?

Swift:检测何时显示应用内购买的购买警报

python - 对于 Pandas 系列,s.sort_index(inplace=True) 不应该改变 s 吗?

iphone - Google 路线导航 API (iPhone)