最后,我可以解析我的recent problems处理OAuth2身份验证以访问google API。
但现在我在查询android开发人员API以检索有关订阅的状态信息时遇到困难。 我正在使用以下REST API调用:
https://www.googleapis.com/androidpublisher/v1/applications/的 APP_PACKAGE /订阅/的 SUBSCRIPTION_ID /购买/的 PURCHASE_TOKEN ?的access_token = AUTH_TOKEN < / p>
我检索此请求的身份验证令牌如下:
// Build the HTTP parameter
Map<String,String> params = [:]
params.put("grant_type", "refresh_token")
params.put("refresh_token", googleRefreshToken.encodeAsURL())
params.put("client_id", googleClientId.encodeAsURL())
params.put("client_secret", googleClientSecret.encodeAsURL())
// Send the POST request
// This action might throw an exception in case any parameter were wrong, invalid or not specified.
String result = HttpRequestHandler.sendRequest("https://accounts.google.com/o/oauth2/token", params);
JSONElement jsonResult = JSON.parse(result)
这很好用,但上面提到的REST调用返回500错误 - 没有任何给定的消息。
{
"error": {
"code": 500,
"message": null
}
}
我读到有些人几乎有类似的问题,但只有在联系cancel API时才会这样。
一些信息:
由于我没有检索到任何错误消息,我现在真的不知道如何继续。 有没有人知道这个问题?
编辑1
在玩各种测试用例时,我得到了非常奇怪的结果。 例如: 如果我使用&lt; = 7个字符的PURCHASE_TOKEN,那么我收到以下回复:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "notFound",
"message": "The subscription purchase token was not found.",
"locationType": "parameter",
"location": "token"
}
],
"code": 404,
"message": "The subscription purchase token was not found."
}
}
当我使用PURCHASE_TOKEN时,我仍然会收到500错误&gt; 7个字符。 就像从here复制的示例令牌一样: rojeslcdyyiapnqcynkjyyjh
编辑2
每次在这里,然后服务器甚至会随机响应503后端错误。
{
"error": {
"errors": [
{
"domain": "global",
"reason": "backendError",
"message": "Backend Error"
}
],
"code": 503,
"message": "Backend Error"
}
}
编辑3
如果我使用Java API(而不是直接URL调用),我会得到相同的错误。
// Build token for the response
TokenResponse tokenResponse = new TokenResponse();
tokenResponse.setAccessToken(googleAccessToken);
tokenResponse.setRefreshToken(googleRefreshToken);
tokenResponse.setExpiresInSeconds(3600L);
tokenResponse.setScope(OAuth2Handler.SCOPE_ANDROID_PUBLISHER);
tokenResponse.setTokenType("Bearer");
// Init credential container
HttpRequestInitializer credential = new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setClientSecrets(googleClientId, googleClientSecret)
.build()
.setFromTokenResponse(tokenResponse);
// Connect to the android publisher API
Androidpublisher publisher = new Androidpublisher.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
.setApplicationName("NameOfMyApplicationInGooglePlayStore")
.build();
// Retrieve subscription purchase information
Androidpublisher.Purchases purchases = publisher.purchases();
Androidpublisher.Purchases.Get get = purchases.get(
packageName,
subscriptionId,
purchaseToken
);
// Analyse result
SubscriptionPurchase subscription = get.execute();
亲切的问候, 克里斯托弗