繁体   English   中英

针对OAuth2authorization_code发布请求获取无效赠款以进行Google Play结算购买验证

[英]Getting Invalid Grant on OAuth2 authorization_code post request for Google Play Billing purchase verification

我正在尝试按照Google-Play-Billing文档的建议在后端实施购买验证。 遵循此文档进行订阅购买验证后,它告诉我必须使用我的Android应用程序的程序包名称subscription_idPurchase token对该URL( Purchases.subscriptions:get )发出get请求。 但是,在向该URL发出get请求之前,必须为API请求授权后端服务器。 因此,按照该文档中指向此处的链接,我开始执行这些步骤。 我创建了OAuth 2.0客户端ID ,然后通过转到浏览器中的下一个URL生成了初始刷新令牌。 我的client_id设置为刚刚生成的OAuth 2.0客户端ID ,我的redirect_uri设置为urn:ietf:wg:oauth:2.0:oob ,这是我从Google API Console下载的JSON文件收到的。 我成功检索了初始刷新令牌并将其放入后端代码中。

现在的目标是在我的android应用程序中成功购买,然后将发布请求和必要的参数发送到我的后端。 这部分工作正常。 但是,当遵循授权文档的后续步骤时,该部分说“为了通过获取我的access_code将POST请求发送给……交换此代码以访问和刷新令牌对 ”,我设置了字段到文档所说的将字段设置为的内容,但是我的请求返回为400错误,错误消息为:“ invalid_grant ”。 我不明白为什么会收到此错误。

这是我的邮寄要求代码:

List <NameValuePair> parameters = new ArrayList <>();
parameters.add(new BasicNameValuePair("grant_type", "authorization_code"));
parameters.add(new BasicNameValuePair("code", initial_code));
parameters.add(new BasicNameValuePair("client_id", client_id));
parameters.add(new BasicNameValuePair("client_secret", client_secret));
parameters.add(new BasicNameValuePair("redirect_uri", redirect_uri));

RequestConfig requestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.IGNORE_COOKIES).build();
HttpClientBuilder httpClientBuilder = HttpClients.custom().setDefaultRequestConfig(requestConfig);

try (CloseableHttpClient httpClient = httpClientBuilder.build()) {
    HttpPost request = new HttpPost("https://accounts.google.com/o/oauth2/token");
    request.addHeader("content-type", "application/x-www-form-urlencoded");
    request.setEntity(new UrlEncodedFormEntity(parameters));

    try (CloseableHttpResponse response = httpClient.execute(request)) {
        HttpEntity entity = response.getEntity();
        final StatusLine statusLine = response.getStatusLine();
        if (entity != null) {
            System.out.println("Response returned: " + statusLine.getStatusCode() + " - " + EntityUtils.toString(entity));
        }
    }
}

请帮忙!

好吧,我知道了我的问题。 我需要更快地发出第一个发布请求,以交换初始的refresh_token和access_code和新的refresh_token。 这个新的refresh_token最终将成为我以后所有API请求的永久refresh_token。 我的问题是,在我发出初始发布请求之前,初始的refresh_token一直过期。 我没有意识到它会在1小时后过期,因此我一直使用相同的初始refresh_token却没有意识到它已过期。

我按照Google文档的其余步骤进行操作,现在我的后端服务器正在成功验证我的应用内订阅购买。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM