我在移动应用中实施了应用内结算功能。它使用自动续订订阅。我想通过应用程序检查订阅到期日期。我找到了此链接来查看订阅详情:Purchases.subscriptions:get
文档显示需要一些授权。我试过但我无法得到结果。我有客户端secret.json文件,但它不包含客户端密钥ID。所以请帮我订阅订阅到期日。
答案 0 :(得分:0)
我的回答很晚,但也许对其他人有所帮助。请在此处查看我的回答:Server side authorization with Google Play Developer API?
以下是您手动执行此操作的步骤:
1。)使用以下链接在Google API中的OAuth2配置中创建凭据:https://developers.google.com/mobile/add?platform=android&cntapi=signin&cnturl=https:%2F%2Fdevelopers.google.com%2Fidentity%2Fsign-in%2Fandroid%2Fsign-in%3Fconfigured%3Dtrue&cntlbl=Continue%20Adding%20Sign-In
2。)转到Developer API控制台。如果您已完成第一步,则结果应如下所示:
3.)转到Google Play开发者控制台 - >所有应用 - >设置 - > API访问并链接您在Developer API控制台中定义的项目(步骤2,左上角的黑条)。 (如果您无法在Google Play中链接您的项目,因为您没有找到一些项目,那么您在Google Developer API和Google Play开发者控制台中使用了不同的Google帐户。)
4.。)使用回调网址调用以下链接:
https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&redirect_uri=http://www.yourdomain.com/oauth2callback&client_id=[WEBAPPLICATION_ID_FROM_ABOVE.apps.googleusercontent.com]
My / oauth2callback脚本是一个简单的PHP脚本。 (这不是生产安全的。只是为了说明):
<强> oauth2callback.php 强>
<?php
print_r($_REQUEST);
?>
5.。)从上面调用网址后,系统会要求您提供Google帐户和权限以访问API。确认后,您将被重定向到回调网址并获得如下结果:
4 / vPv_eYX-az6YucwdpBzATpJEu8129gN9aYsUIMI3qgQ
6.)¹通过使用以下标题调用 https://accounts.google.com/o/oauth2/token POST 请求获取oauth2访问令牌并刷新令牌:
grant_type=authorization_code
code=4/vPv_eYX-az6YucwdpBzATpJEu8129gN9aYsUIMI3qgQ
client_id=[YOUR_WEBAPPLICATIONID.apps.googleusercontent.com]
client_secret=[YOUR CLIENT SECRET OF THIS WEBAPPLICATION ID]
redirect_uri=http://www.yourdomain.com/oauth2callback
(从步骤2开始,在Developer Console中单击OAuth2客户端ID的Web客户端ID时,可以找到客户端密码)
结果如下:
{
"access_token": "ya29.GdsCBbnM584k3SUzoxDgIdaY26pEM_p_AdhkIkFq3tsai8U7x8DuFKq3WEF7KquxkdLO89KHpuUFdJOgkhpGbGyDfxkD32bK1ncnsu2IkA0e_5ZayOEr86u4A1IN",
"expires_in": 3600,
"refresh_token": "1/U5HF1m0nHQwZaF2-X35f_xyFaSOofdw3SEubnkkYUQ0",
"token_type": "Bearer"
}
7。)访问令牌需要调用Google Developer API请求,例如:https://www.googleapis.com/androidpublisher/v2/applications/[packageName]/purchases/subscriptions/subscriptionId/tokens/[purchaseToken]?access_token=ya29.GdsCBbnM584k3SUzoxDgIdaY26pEM_p_AdhkIkFq3tsai8U7x8DuFKq3WEF7KquxkdLO89KHpuUFdJOgkhpGbGyDfxkD32bK1ncnsu2IkA0e_5ZayOEr86u4A1IN
8。)访问令牌很快到期。通过刷新,您可以使用以下网址和标头获取新的访问权限: 发布 https://accounts.google.com/o/oauth2/token
grant_type=refresh_token
client_secret=[YOUR CLIENT SECRET]
refresh_token=1/U5HF1m0nHQwZaF2-X35f_xyFaSOofdw3SEubnkkYUQ0
client_id=[YOUR_WEBAPPLICATION_ID.apps.googleusercontent.com]
结果:
{
"access_token": "ya29.GlsCBZuN7hYJILi5VaVggIsCIb1_5feGvcjvQFmJRnPYXsnhsi_w3Md87tQwGd_WXmifo4s5739c3IU5INPmby8q64k0LdDFkO2JpNRG13K9sizvU1Sc-3cWzbf8",
"expires_in": 3600,
"token_type": "Bearer"
}
提示(1):如果您没有从步骤6的请求中获得刷新令牌,请将以下查询参数附加到您的请求中:prompt=consent
答案 1 :(得分:0)
我对此也有些挣扎,但至少我发现需要做些什么。
Google提供了一个Android库google-api-services-androidpublishe,可用于访问Purchase.Subscription.Get API。
implementation 'com.google.apis:google-api-services-androidpublisher:v3-rev74-1.25.0'
这是Kotlin代码示例:
import com.google.api.client.http.apache.ApacheHttpTransport
import com.google.api.client.json.jackson2.JacksonFactory
import com.google.api.services.androidpublisher.AndroidPublisher
...
fun retrieveSubscriptionInfo(sku: String) {
val packageName = ""
val sku = ""
val purchasedSubscriptionToken = ""
val apacheHttpTransport = ApacheHttpTransport()
val jacksonJsonFactory = JacksonFactory.getDefaultInstance()
val AndroidPublisher.Builder(apbacheHttpTransport, jacksonJsonFactory, null).build()
val request = publisher.Purchases().subscriptions().get(packageName, sku, purchasedSubscriptionToken);
return request.execute()
}
请注意,在执行上述代码之前,您必须首先授权AndroidPublisher
。您必须请求用户权限才能查询Purchase.Subscription.Get
希望这会有所帮助。