使用PHP cURL获取access_token时,Google OAuth2.0会返回“invalid_request”

时间:2016-09-01 23:13:18

标签: php wordpress curl oauth-2.0 google-api

我遇到了与此处所述相同的问题“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的新手,但整个星期都在处理它,所以非常熟悉,但希望有人知道比我更多,帮助我解决这个问题。我想确保用户永远不会遇到登录问题,因为服务器端脚本中有一些会话详细信息。

注意: 这与Perry Butler's WP-OAuth plugin

合作

1 个答案:

答案 0 :(得分:2)

我对google oauth并不熟悉,因为我想回答这个问题是权威,但是我从你的代码中看到了一些问题。

1,您有很多明确超出此代码范围的定义。 2,您的网址将附加应该应用于请求帖子的所有参数。

我要尝试的第一件事是改变这一行:

$url = URL_TOKEN . $url_params;

要:

$url = URL_TOKEN;

在请求中添加一些调试,并显示正在调用的$ url。似乎没有任何规范以外的东西。