Tôi muốn lấy "mã thông báo truy cập" mới dựa trên "mã thông báo làm mới" được lưu trong cơ sở dữ liệu.(JAVA) Phân tích API Google - không thể lấy "mã thông báo truy cập" mới bằng cách sử dụng "mã thông báo làm mới"
Đây là mã tôi đã viết:
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);
}
}
tôi nhận được tin nhắn này:
com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad
Yêu cầu {"error": "invalid_grant"}
Tôi sử dụng cùng CLIENT_ID, CLIE NT_SECRET và "mã thông báo làm mới" trong tập lệnh php và ở đó tôi đã quản lý để nhận "mã thông báo truy cập" mới bằng cách sử dụng "mã thông báo làm mới" khi "mã thông báo truy cập" hết hạn.
Tôi đã viết mã dựa trên javadoc.google-oauth-java-client.
Mọi người ở đây đều biết cách sửa đổi mã để lấy mã thông báo truy cập mới?
Xin cảm ơn trước.
CẬP NHẬT: vấn đề là tôi đã lưu trong cơ sở dữ liệu refresh_token mà không thực hiện json_decode trên nó và nó chứa "\" được coi là ký tự thoát trong JSON.
Tôi đã thử mã của bạn và mã này đã hoạt động đối với tôi. Tôi nghĩ rằng đó là vấn đề về dữ liệu/định dạng với mã thông báo làm mới của bạn. – user1697575