如何获取Purchases.subscriptions:Android中的详细信息

问题描述 投票:3回答:2

我在移动应用中实施了应用内结算功能。它使用自动续订订阅。我想通过应用程序检查订阅到期日期。我找到了这个链接来查看订阅详情:Purchases.subscriptions:get

文档显示需要一些授权。我试过但我无法得到结果。我有客户端secret.json文件,但它不包含客户端密钥ID。所以请帮我订购订阅到期日。

android in-app-billing subscription
2个回答
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控制台。如果你已经完成了第一步,那么结果应该是这样的:Credentials

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.)访问令牌很快到期。通过刷新,您可以使用以下网址和标题获取新的访问权限:POST 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


0
投票

我也有点挣扎,但至少我发现了需要做的事情。

谷歌提供了一个可用于访问google-api-services-androidpublishe API的安卓库Purchase.Subscription.Get

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

希望这有用。

© www.soinside.com 2019 - 2024. All rights reserved.