1

Я пытаюсь получить доступ к API Gmail с помощью моего приложения. Я должен был правильно выполнить все настройки, и я проверяю запрос API, в конкретном запросе на получение сообщений только как чтение.API Gmail: пример запроса API

Мой код:

public function gmail_get_messages() 
{ 
    $client = new Google_Client(); 

    $client->setApplicationName("Gmail API test"); 
    $client->setDeveloperKey("MY_KEY"); 
    $client->setClientSecret('MY_CLIENT_SECRET'); 
    $client->setScopes(array('https://www.googleapis.com/auth/gmail.readonly')); 

    // $client->setAccessToken($token); 

    $service = new Google_Service_Gmail($client); 

    $url = 'https://www.googleapis.com/gmail/v1/users/MY_EMAIL/messages'; 

    $header = array("Authorization: access_token {MY_ACCESS_TOKEN}"); 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
    curl_setopt($ch, CURLOPT_ENCODING, "gzip"); 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)'); 

    $retValue = curl_exec($ch); 
    $response = json_decode(curl_exec($ch)); 
    $ee  = curl_getinfo($ch); 
    print_r($ee); 

    print_r($retValue); 
} 

Ответ:

{ "error": { "errors": [ { "domain": "global", "reason": "authError", "message": "Invalid Credentials", "locationType": "header", "location": "Authorization" } ], "code": 401, "message": "Invalid Credentials" } } 

Один главный пункт касается лексемы. Я получил токен доступа и токен обновления как файл в формате json, но я не знаю, как их включить в запрос.

Как правильно передать токены на запрос? Единственное, чего нет, или что-то еще?

Если кто-то может подать пример надлежащего запроса, я был бы очень благодарен!

+0

Разве вы не только что отредактировали другой вопрос? http://stackoverflow.com/questions/30613152/gmail-api-how-to-get-access-token, почему вам нужен новый? – DaImTo

+1

Я действительно отредактировал этот вопрос и ответил тоже. Наконец, я смог получить токены в json-файле. Теперь я пытаюсь включить токены в свой запрос API, чтобы он работал. – johnnyfittizio

ответ

1

Я думаю, вы близки! Попробуйте назначить токен доступа клиенту следующим образом:

$client = new Google_Client(); 


$client->setApplicationName('Gmail API test'); 
$client->setDeveloperKey('MY_KEY'); 
$client->setClientSecret('MY_CLIENT_SECRET'); 
$client->SetClientId('MY_CLIENT_ID'); 
$client->setScopes(array('https://www.googleapis.com/auth/gmail.readonly')); 
$client->setAccessToken('{"access_token":"MY_ACCESS_TOKEN", 
          "token_type":"Bearer"‌​,"expires_in":3600, 
          "refresh_token":"MY_REFRESH TOKEN","created":1433329214}'); 

$service = new Google_Service_Gmail($client); 

$messages = $service->users_messages->listUsersMessages('me'); 
$list = $messages->getMessages(); 

// Look at the contents of the first message 
$message = $list[0]; 
$parts = $message->getPayload()->getParts(); 

$body = $parts[0]['body']; 
$rawData = $body->data; 
$sanitizedData = strtr($rawData,'-_', '+/'); 
$decodedMessage = base64_decode($sanitizedData); 
var_dump($decodedMessage); 
+0

Пока не работает. Я получаю ту же ошибку. У вас есть, возможно, полный пример рабочего запроса? – johnnyfittizio

+0

@johnnyfittizio Ah, bummer :(Это редактирование работает для вас? – Tholle

+0

Спасибо за ваши усилия! Я получаю эту ошибку: не удалось исключить «Google_Auth_Exception» с сообщением «Не удалось json декодировать токен». Могу ли я передать token как внешний json-файл? Возможно, однажды сделано, что все будет нормально работать. – johnnyfittizio

Смежные вопросы