我想根据数据库中保存的“刷新令牌”获取新的“访问令牌”。
这是我写的代码:
GoogleCredential.Builder credentialBuilder = new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT).setJsonFactory(JSON_FACTORY)
.setClientSecrets(CLIENT_ID, CLIENT_SECRET);
credentialBuilder.addRefreshListener(new MyCredentialRefreshListener());
credential = credentialBuilder.build();
credential.setRefreshToken("saved_refresh_token_from_database");
try {
credential.refreshToken();
} catch (IOException e) {
e.printStackTrace();
}
class MyCredentialRefreshListener implements CredentialRefreshListener {
public void onTokenResponse(Credential cr, TokenResponse tr) {
System.out.println("Credential was refreshed successfully.");
}
public void onTokenErrorResponse(Credential cr, TokenErrorResponse tr) {
System.out.println(tr);
}
}
我收到这条消息:
com.google.api.client.auth.oauth2.TokenResponseException: 400 错误
请求{“错误”:“invalid_grant”}
我在 php 脚本中使用相同的 CLIENT_ID、CLIENT_SECRET 和“刷新令牌”,当“访问令牌”过期时,我设法使用“刷新令牌”获取新的“访问令牌”。
我基于javadoc.google-oauth-java-client编写了代码。
这里的任何人都知道如何修改代码以获得新的访问令牌?
提前致谢。
更新:问题是我在数据库中保存了 refresh_token 而没有对其进行 json_decode 并且它包含一个“\”,它被认为是 JSON 中的转义字符。