Skip to main content
 首页 » 编程设计

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

2025年01月19日6落叶无声

我想在服务器端验证来自 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)