我遇到了与此处所述相同的问题“POST using CURL in PHP gives invalid request Error。在发布该帖子之前,我的代码已经设置为接受的答案。
// First I get the access code like so
function get_oauth_code($wpoa) {
$params = array(
'response_type' => 'code',
'client_id' => CLIENT_ID,
'scope' => SCOPE,
'state' => uniqid('', true),
'redirect_uri' => REDIRECT_URI,
);
$_SESSION['WPOA']['STATE'] = $params['state'];
$url = URL_AUTH . http_build_query($params);
header("Location: $url");
exit;
}
$params = array(
'grant_type' => 'authorization_code',
'client_id' => CLIENT_ID,
'client_secret' => CLIENT_SECRET,
'code' => $_GET['code'],
'redirect_uri' => REDIRECT_URI,
);
$url_params = http_build_query($params);
$url = URL_TOKEN . $url_params;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, (get_option('wpoa_http_util_verify_ssl') == 1 ? 1 : 0));
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, (get_option('wpoa_http_util_verify_ssl') == 1 ? 2 : 0));
$result = curl_exec($curl);
当我第一次尝试登录时,这工作正常,但如果我退出并重新尝试(不是每个时间,但始终如此),则会返回以下错误响应
Array ( [error] => invalid_request )
由于对该答案的以下评论,我认为access_code
可能正在重复使用,但是为了确保问题仍然存在,我只是为了确保问题。这是一个证据,当收到invalid_request
错误时,我确实有一个访问代码:
Array(
[state] => 57c8b107a5a021.27458568
[code] => 4/Q8bswW3yheJ6tLFQnTd-pkfG6zVdbMk9UehgroR7f60
)
我一般都是OAuth的新手,但整个星期都在处理它,所以非常熟悉,但希望有人知道比我更多,帮助我解决这个问题。我想确保用户永远不会遇到登录问题,因为服务器端脚本中有一些会话详细信息。
合作答案 0 :(得分:2)
我对google oauth并不熟悉,因为我想回答这个问题是权威,但是我从你的代码中看到了一些问题。
1,您有很多明确超出此代码范围的定义。 2,您的网址将附加应该应用于请求帖子的所有参数。
我要尝试的第一件事是改变这一行:
$url = URL_TOKEN . $url_params;
要:
$url = URL_TOKEN;
在请求中添加一些调试,并显示正在调用的$ url。似乎没有任何规范以外的东西。