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

时间:2017-04-27 04:14:17

标签: android in-app-billing subscription

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

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

2 个答案:

答案 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控制台。如果您已完成第一步,则结果应如下所示: 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。)访问令牌很快到期。通过刷新,您可以使用以下网址和标头获取新的访问权限: 发布 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

希望这会有所帮助。