我一直在https://developers.google.com/+/web/signin/server-side-flow跟踪指南,直到我将授权码发送到我的服务器。然后在PHP中,我尝试使用以下内容获取访问令牌:
$data = "code=".urlencode(trim($access_code)).
"&grant_type=authorization_code".
"&client_id=".urlencode($this->client_id).
"&client_secret=".urlencode($this->client_secret).
"&redirect_uri=".urlencode(trim($redirect_uri));
$curl = curl_init("https://accounts.google.com/o/oauth2/token");
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = json_decode(curl_exec($curl), true);
curl_close($curl);
return $result;
在PHP中redirect_uri与在google dev控制台中重定向uris中的redirect_uri完全相同,但是调用始终返回:
array(1) { ["error"]=> string(21) "redirect_uri_mismatch" }
我做错了什么?
供参考,这是我的谷歌API设置:
http://such-nom.com
http://www.such-nom.com
var传递为$ redirect_uri:
$redir = 'http://such-nom.com';
编辑:当服务器端生成请求令牌而不是通过谷歌按钮时,似乎完全相同的PHP。
答案 0 :(得分:3)
原来问题是添加一个尾部斜杠并等了几个小时。 因此,完整的URL列表如下所示:
http://such-nom.com
http://www.such-nom.com
http://such-nom.com/
http://www.such-nom.com/