Người dùng ủy quyền trong ứng dụng Android của tôi. Và tôi đang gửi mã thông báo của người dùng và thông tin khác đến máy chủ của tôi. Tại máy chủ này, tôi muốn thực hiện một số logic cho người dùng.Làm cách nào để có thể tiếp cận thông tin lịch của người dùng trên máy chủ?
Tôi muốn có chính xác this flow.
Tôi đã làm theo các bước quickstart.php in this link để nhận lịch của người dùng trên máy chủ.
Nhưng tôi nhận được lỗi sau:
google oauth exception' with message 'could not json decode the token'
Vì lý do này tôi đã cố gắng this solution. Nhưng tôi cũng gặp lỗi tương tự. Vì vậy, như là tùy chọn thứ 3 tôi tạo ra các định dạng json bản thân mình như trong this solution như dưới đây.
$access_token = '{
"access_token":'.$access_token.',
"token_type":"Bearer",
"expires_in":3600,
"id_token":'.$id_token.',
"refresh_token":" ",
"created":'. time() .'
}';
như bạn thấy Tôi không biết cách trao đổi mã thông báo làm mới. Tôi đã tìm kiếm cách nhận mã thông báo làm mới và thấy this question. Và triển khai this solution vào mã của tôi nhưng không có gì thay đổi.
Chỉnh sửa 4: Tôi đã cố gắng lấy mã thông báo truy cập according to this answer tại ứng dụng Android và gửi tới máy chủ ứng dụng. Tôi đang tham gia các mã như trước đây tôi đã làm:
GoogleSignInAccount acct = result.getSignInAccount();
code = acct.getServerAuthCode();//sending this code to AsyncTask to get access token
chức năng của tôi để có được truy cập Mã:
private void getAccessToken()throws GoogleAuthException, IOException{
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
List<String> scopes = new LinkedList<String>();
scopes.add("https://www.googleapis.com/auth/calendar");
scopes.add("https://www.googleapis.com/auth/calendar.readonly");
scopes.add("https://www.googleapis.com/auth/urlshortener");
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(transport, jsonFactory, client_id, client_secret, scopes).build();
try{
GoogleTokenResponse res = flow.newTokenRequest(code).execute();
accessToken = res.getAccessToken();
}catch(IOException e){
}
ở phía php máy chủ tôi đã thay đổi user-example.php tập tin chút như dưới đây bởi vì tôi có access token bây giờ:
$client = new Google_Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setAccessType("offline");
$client->setRedirectUri($redirect_uri);
$client->addScope("https://www.googleapis.com/auth/urlshortener");
$service = new Google_Service_Urlshortener($client);
if (isset($_REQUEST['logout'])) {
unset($_SESSION['access_token']);
}
$client->setAccessToken('{"access_token":"'. $access_token .'","token_type":"Bearer","expires_in":3600,"created":'. time() .'}');
if ($client->getAccessToken() && isset($_GET['url'])) {
$url = new Google_Service_Urlshortener_Url();
$url->longUrl = $_GET['url'];
$short = $service->url->insert($url);
$_SESSION['access_token'] = $client->getAccessToken();
Nhưng bây giờ tôi nhận được dưới đây lỗi:
Fatal error: Uncaught exception 'Google_Service_Exception' with message 'Error calling POST https://www.googleapis.com/urlshortener/v1/url : (403) Insufficient Permission' in C:\wamp\www\google-php\src\Google\Http\REST.php on line 110
Các biến trong dấu nháy đơn không được đánh giá. Break mở chuỗi cho các biến. '$ sp = 'hi i am'. $ name. ' và tôi viết các chuỗi. '; ' –
Tôi vẫn gặp lỗi giải mã json tương tự. : \ – melomg
Nếu hai mã thông báo này không phải là số nguyên, hãy đặt chúng thành dấu ngoặc kép. –