Получить Google API Token - PullRequest
       9

Получить Google API Token

5 голосов
/ 16 апреля 2011

Мне нужно получить действительный токен Google для использования API Google, но мой код не работает.Не могли бы вы дать мне совет?

$client_id = '495225261106.apps.googleusercontent.com';
$client_secret = urlencode('MY_SECRET_CDE');
$redirect_uri = urlencode('http://MYPAGE.net/test.php');
//$grant_type = urlencode('authorization_code'); //it does not work either.
$grant_type = 'authorization_code';

$post_string = "code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp6&client_id={$client_id}&client_secret={$client_secret}&redirect_uri={$redirect_uri}&grant_type={$grant_type}";

//echo_key_value('post_string',$post_string);

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://accounts.google.com/o/oauth2/token');
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$result = curl_exec($ch);   // Execute the HTTP command
$errmsg = curl_error($ch); 

if($errmsg) echo $errmsg;

// вывод: {"error": "invalid_grant"} //

Спасибо!

Ответы [ 3 ]

1 голос
/ 02 сентября 2011

Возможно, вам будет проще использовать API Google, особенно OAuth, через одну из официальных клиентских библиотек.

Вот ссылка на PHP: http://code.google.com/p/google-api-php-client/

И ссылка на документацию по OAuth 2.0 с библиотекой (с хорошим примером кода): http://code.google.com/p/google-api-php-client/wiki/OAuth2

1 голос
/ 07 июля 2011

Не нужно ли ставить "curl_setopt ($ ch, CURLOPT_POST, true);" перед использованием постполей? Мой работает и, кроме того, и я не использовал urlencode в моем секрете, это то же самое

0 голосов
/ 07 сентября 2018

Инструкции по установке

  • Перейдите в консоль разработчиков Google
    https://console.developers.google.com/project Выберите проект или создайте новый (а затем выберите его)
  • ВключитьAPI для вашего проекта В боковой панели слева разверните APIs и auth> API. Найдите «drive». Нажмите «Drive API», нажмите синюю кнопку «Enable API»
  • Создайте учетную запись службы для вашего проекта.На боковой панели слева разверните раздел API и авторизация> Учетные данные. Нажмите синюю кнопку «Добавить учетные данные»
  • Выберите параметр «Сервисная учетная запись»
  • Установите флажок «Создать новый закрытый ключ». ВыберитеОпция типа ключа «JSON»
  • Нажмите синюю кнопку «Создать», ваш файл ключа JSON будет сгенерирован и загружен на ваш компьютер (это единственная копия!)
  • откройте файл json и сохранитезакрытый ключ к файлу с именем rsa

запишите адрес электронной почты своей учетной записи службы (также доступен в файле ключа JSON). Поделитесь документом (или документами) со своей учетной записью службы, используя emai.Я отметил выше

на основе информации из (фантастического документа) https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority

для списка возможных областей применения API, установите https://developers.google.com/identity/protocols/googlescopes#sheetsv4

для чисторешение на основе bash

#!/bin/bash

client_email='your client email'
scope='https://www.googleapis.com/auth/spreadsheets.readonly'

jwt1=`echo -n '{"alg":"RS256","typ":"JWT"}' | openssl base64 -e`

exp=$(($(date +%s)+3600))
iat=$(date +%s)

jwt2=`echo -n '{\
"iss":"'"$client_email"'",\
"scope":"'"$scope"'",\
"aud":"https://accounts.google.com/o/oauth2/token",\
"exp":'$exp',\
"iat":'$iat'}' | openssl base64 -e`

jwt3=`echo -n "$jwt1.$jwt2" | tr -d '\n' | tr -d '=' | tr '/+' '_-'`

jwt4=`echo -n "$jwt3" | openssl sha -sha256 -sign rsa | openssl base64 -e`

jwt5=`echo -n "$jwt4" | tr -d '\n' | tr -d '=' | tr '/+' '_-'`

echo $jwt3
echo $jwt5

curl -H -vvv "Content-type: application/x-www-form-urlencoded" -X POST "https://accounts.google.com/o/oauth2/token" -d \
"grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=$jwt3.$jwt5"

для решения на основе javascript nodejs см.

https://gist.github.com/cloverbox/5ce51a1d8889da9045c5b128a3a2502f

...