Tôi đã theo dõi lại một lần nữa THIS TUTORIAL để tải lên tệp trên Google Drive bằng php, trực tiếp từ REMOTE SERVER của tôi: vì vậy tôi đã tạo Dự án API mới từ Google API Console, đã bật dịch vụ API Drive, yêu cầu OAuth ID và khách hàng bí mật, đã viết chúng trong một kịch bản, sau đó tải nó cùng với Google APIs Client Library for PHP thư mục để http://www.MYSERVER.com/script1.php này, để lấy đang Auth:Tự động làm mới mã thông báo bằng cách sử dụng google drive api bằng tập lệnh php
<?php
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';
$drive = new Google_Client();
$drive->setClientId('XXX'); // HERE I WRITE MY Client ID
$drive->setClientSecret('XXX'); // HERE I WRITE MY Client Secret
$drive->setRedirectUri('urn:ietf:wg:oauth:2.0:oob');
$drive->setScopes(array('https://www.googleapis.com/auth/drive'));
$gdrive = new Google_DriveService($drive);
$url = $drive->createAuthUrl();
$authorizationCode = trim(fgets(STDIN));
$token = $drive->authenticate($authorizationCode);
?>
Khi tôi ghé thăm http://www.MYSERVER.com/script1.php tôi phép uỷ quyền và nhận được Auth mã mà tôi có thể viết trong tập lệnh thứ hai. Sau đó, tôi tải nó lên http://www.MYSERVER.com/script2.php, người trông giống như:
<?php
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';
$drive = new Google_Client();
$drive->setClientId('X'); // HERE I WRITE MY Client ID
$drive->setClientSecret('X'); // HERE I WRITE MY Client Secret
$drive->setRedirectUri('urn:ietf:wg:oauth:2.0:oob');
$drive->setScopes(array('https://www.googleapis.com/auth/drive'));
$gdrive = new Google_DriveService($drive);
$_GET['code']= 'X/XXX'; // HERE I WRITE AUTH CODE RETRIEVED AFTER RUNNING REMOTE script.php
file_put_contents('token.json', $drive->authenticate());
$drive->setAccessToken(file_get_contents('token.json'));
$doc = new Google_DriveFile();
$doc->setTitle('Test Drive');
$doc->setDescription('Document');
$doc->setMimeType('text/plain');
$content = file_get_contents('drive.txt');
$output = $gdrive->files->insert($doc, array(
'data' => $content,
'mimeType' => 'text/plain',
));
print_r($output);
?>
Vâng, bây giờ các tập tin được tải lên drive.txt trên Google Drive và cấu trúc của tập tin token.json của tôi là một loại:
{"access_token":"XXX","token_type":"Bearer","expires_in":3600,"refresh_token":"YYY","created":1365505148}
Bây giờ, như bạn có thể tưởng tượng tôi có thể gọi script2.php và tải lên tập tin cho đến một thời gian nhất định. Cuối cùng, vấn đề là: Tôi không muốn mã thông báo hết hạn, tôi không muốn cho phép ủy quyền mỗi lần hết hạn (gọi lại script1.php): Tôi cần gọi script2.php định kỳ trong suốt trong ngày, để tải lên tệp của tôi tự động, mà không có sự tương tác của người dùng. Vì vậy, cách tốt nhất để tự động làm mới mã thông báo mãi mãi trong ngữ cảnh này là gì? Tôi có cần một tập lệnh khác không? Tôi có thể thêm một số mã vào script2.php không? hoặc sửa đổi tệp token.json? Và tôi có thể đọc thời gian còn lại trước khi mã thông báo hết hạn? Cảm ơn!
Cảm ơn bạn @Burcu, điểm được nói cách của bạn "Nếu mã thông báo truy cập của bạn hết hạn": KHI tÔI cÓ THỂ XEM rằng thẻ truy cập của tôi hết hạn? nó có vĩnh viễn hay không? – Huxley
@Huxley, nó sẽ ném một 'Google_AuthException'. Mặt khác, thư viện máy khách này sẽ tự động làm mới mã thông báo truy cập nếu mã thông báo hiện tại sắp hết hạn. Vì vậy, thông thường bạn sẽ không bao giờ thấy lỗi xác thực. Tôi đang chỉnh sửa câu trả lời của mình ở trên. –
Tôi đã truy xuất refresh_token và access_token từ OAuth 2.0 Playground console và lưu nó trong tệp tin token.json của tôi: nó giống nhau? chúng có vĩnh viễn không? – Huxley