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