我需要获取Google有效令牌才能使用Google API,但是 我的代码不起作用。你能建议我吗?
$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;
// 输出 { “错误”: “invalid_grant”} //
谢谢!
答案 0 :(得分:1)
在使用postfields之前,你不必放“curl_setopt($ ch,CURLOPT_POST,true);”吗?我正在工作,除了那个,我没有在我的秘密上使用urlencode,它是相同的
答案 1 :(得分:1)
您可能会发现通过其中一个官方客户端库更容易使用Google API,尤其是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
答案 2 :(得分:0)
记下您的服务帐户的电子邮件地址 (也可在JSON密钥文件中使用)与 您使用上述电子邮件发送的服务帐户
基于(一个很棒的文档)的信息 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