我遇到了这里描述的相同问题" POST使用CURL在PHP给出无效请求错误。在看到这篇文章之前,我的代码已经设置成接受的答案。
// 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
正在以某种方式被重用,但我运行了一个unset,只是为了确保问题仍然存在。这里有证据证明,当收到invalid_request
错误时,我实际上有一个访问码:
Array(
[state] => 57c8b107a5a021.27458568
[code] => 4/Q8bswW3yheJ6tLFQnTd-pkfG6zVdbMk9UehgroR7f60
)
我是OAuth的新手,但整个星期都在处理它,所以非常熟悉,但希望有人比我知道得更多,帮助我解决这个问题。我想确保用户永远不会因为服务器端脚本中的一些会话细节而遇到登录问题。
注意:这是与Perry Butler的WP-OAuth插件合作
我不熟悉google oauth,因为我想回答这个问题是权威,但我从你的代码中看到一些问题。
1中,有很多定义明显超出了这段代码的范围。2,你的url被附加了所有的参数,这些参数应该被应用到请求的post .
我要做的第一件事就是改变这一行:
$url = URL_TOKEN . $url_params;
:
$url = URL_TOKEN;
在请求中添加一些调试,并显示正在调用的$url。没有什么不正常的