Google Drive API - 无效的授权:错误的请求

时间:2016-10-12 17:20:04

标签: php google-api google-drive-api google-api-php-client drive

我尝试使用PHP实现Google Drive API。这是我的目标,

  1. 从用户
  2. 申请Google云端硬盘文件夹ID
  3. 输入后,对用户进行身份验证并获取授权码
  4. 获取并设置访问令牌以从文件夹
  5. 获取文件详细信息

    这里是代码示例,

    PHP

    public $google_client;
    
    function __construct(){
        $this->google_client = new Google_Client();
        $this->google_client->setApplicationName(APPLICATION_NAME);
        $this->google_client->setScopes(SCOPES);
        $this->google_client->setAuthConfig(CLIENT_SECRET_PATH);
        $this->google_client->setAccessType('offline');
    }
    
    function get_drive_auth_url(){
        $folder_id = trim($_POST['folder_id']) || null;
        $auth_code = trim($_POST['auth_code']) || null;
    
        if(!$folder_id || !$auth_code){
            $auth_url = $this->google_client->createAuthUrl();
            $response = array('type' => true, 'message' => 'success', 'data' => $auth_url);
            echo json_encode($response);
            exit();
        } else {
            $access_token = $this->google_client->fetchAccessTokenWithAuthCode($auth_code);
            print_r($access_token);
            exit();
        }
    
    }
    

    JS

    var folder_id = jQuery(this).val() || '';
    if(!folder_id){
        alert('Please provide a valid folder id.');
        return false;
    }
    
    // AJAX Request to fetch the auth url
    jQuery.ajax({
        url: woocommerce_params.ajax_url,
        method: 'POST',
        dataType: 'json',
        data: {
            action: 'get_drive_auth_url'
        },
        success:function(response) {
            var url = response.data || '';
            if(!url){
                return false;
            }
    
            window.open(url, 'Google Drive Authorization', 'width=600,height=350', true);
            var auth_code = prompt('Please provide the authorization code.');
            if(auth_code){
                //AJAX Request to pass the folder id and auth code
                jQuery.ajax({
                    url: woocommerce_params.ajax_url,
                    method: 'POST',
                    dataType: 'json',
                    data: {
                        action: 'get_drive_auth_url',
                        auth_code: auth_code,
                        folder_id: folder_id
                    },
                    success:function(res) {
                        console.log(res);
                    },
                    error: function(errorThrown){ console.log(errorThrown);
                        alert('Error: ' + errorThrown.status + ' ' + errorThrown.statusText);
                    }
                });
            }
        },
        error: function(errorThrown){
            alert('Error: ' + errorThrown.status + ' ' + errorThrown.statusText);
        }
    });
    

    错误

    Array( [error] => invalid_grant [error_description] => Bad Request)

    感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这是我的错误,

替换以下代码,

$folder_id = trim($_POST['folder_id']) || null;
$auth_code = trim($_POST['auth_code']) || null; // This returns 1

$folder_id = trim($_POST['folder_id']);
$auth_code = trim($_POST['auth_code']); // This return the actual auth code