Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谷歌OAuth2返回“;不支持的“U型授权”;via cURL(PHP)_Php_Curl_Google Api - Fatal编程技术网

谷歌OAuth2返回“;不支持的“U型授权”;via cURL(PHP)

谷歌OAuth2返回“;不支持的“U型授权”;via cURL(PHP),php,curl,google-api,Php,Curl,Google Api,我想获取有关谷歌账户的数据。我使用下一个代码: $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'https://www.googleapis.com/oauth2/v4/token', CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT =>

我想获取有关谷歌账户的数据。我使用下一个代码:

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://www.googleapis.com/oauth2/v4/token',
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTPHEADER => [
        'Cache-Control: no-cache',
        'Content-Type: application/x-www-form-urlencoded',
    ],
    CURLOPT_POSTFIELDS => [
        'code' => $code,
        'client_id' => '{MY_CLIENT_ID}',
        'client_secret' => '{MY_CLIENT_SECRET}',
        'redirect_uri' => '{SOME_URL}'
        'grant_type' => 'authorization_code',
    ]
));

$result = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);
结果我得到了下一个错误:

{
    "error": "unsupported_grant_type",
    "error_description": "Invalid grant_type: "
}
我使用以下说明:

变量
$code
和其他数据有效!因为我尝试通过“邮递员”发送请求,在那里我得到了正确的结果


请告诉我哪里有错?

试着这样做:

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://www.googleapis.com/oauth2/v4/token',
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_POSTFIELDS => http_build_query([
        'code' => $code,
        'client_id' => '{MY_CLIENT_ID}',
        'client_secret' => '{MY_CLIENT_SECRET}',
        'redirect_uri' => '{SOME_URL}'
        'grant_type' => 'authorization_code',
    ]),
));
顺便说一句,您可以使用

CURLOPT_VERBOSE => true,

试着这样做:

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://www.googleapis.com/oauth2/v4/token',
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_POSTFIELDS => http_build_query([
        'code' => $code,
        'client_id' => '{MY_CLIENT_ID}',
        'client_secret' => '{MY_CLIENT_SECRET}',
        'redirect_uri' => '{SOME_URL}'
        'grant_type' => 'authorization_code',
    ]),
));
顺便说一句,您可以使用

CURLOPT_VERBOSE => true,

我在c#做这件事,我想我的问题可能与此有关。在指定重定向url或任何其他字符串时,请确保转义URI,否则它将打乱post请求。这是因为请求是使用application/x-www-form-urlencoded类型发送的。

我是用c#完成的,我认为我的问题可能与此相关。在指定重定向url或任何其他字符串时,请确保转义URI,否则它将打乱post请求。这是因为请求是使用application/x-www-form-urlencoded类型发送的。

我收到了相同的错误消息。经过一些研究,我知道我正在使用access\u type='offline'创建代码,这是一个问题

因此,我从请求中删除了这个参数,并在不使用access\u type='offline'的情况下生成了新代码

问题解决了


如果您有任何问题,请尝试或告诉我。

我收到了相同的错误消息。经过一些研究,我知道我正在使用access\u type='offline'创建代码,这是一个问题

因此,我从请求中删除了这个参数,并在不使用access\u type='offline'的情况下生成了新代码

问题解决了


如果您有任何问题,请尝试或告诉我。

确保您的授权码未过期。因为这就是我做错的,我得到了同样的错误反应。我实际上是通过发送一个旧的授权代码来测试我的代码。当我将代码绑定到实际的oauth工作流时,它就工作了

确保您的授权码未过期。因为这就是我做错的,我得到了同样的错误反应。我实际上是通过发送一个旧的授权代码来测试我的代码。当我将代码绑定到实际的oauth工作流时,它就工作了

上述代码在此行末尾缺少逗号:

'redirect_uri' => '{SOME_URL}'
完整代码应为:

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://www.googleapis.com/oauth2/v4/token',
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTPHEADER => [
        'Cache-Control: no-cache',
        'Content-Type: application/x-www-form-urlencoded',
    ],
    CURLOPT_POSTFIELDS => [
        'code' => $code,
        'client_id' => '{MY_CLIENT_ID}',
        'client_secret' => '{MY_CLIENT_SECRET}',
        'redirect_uri' => '{SOME_URL}',
        'grant_type' => 'authorization_code',
    ],
));

$result = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

上述代码在此行末尾缺少逗号:

'redirect_uri' => '{SOME_URL}'
完整代码应为:

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://www.googleapis.com/oauth2/v4/token',
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTPHEADER => [
        'Cache-Control: no-cache',
        'Content-Type: application/x-www-form-urlencoded',
    ],
    CURLOPT_POSTFIELDS => [
        'code' => $code,
        'client_id' => '{MY_CLIENT_ID}',
        'client_secret' => '{MY_CLIENT_SECRET}',
        'redirect_uri' => '{SOME_URL}',
        'grant_type' => 'authorization_code',
    ],
));

$result = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

谢谢你的回答!我试过你的方法,我也犯了同样的错误。。。但是当我尝试不同的“重定向uri”时,我解决了我的问题。我不明白,为什么我不能在params中使用每个URI?他们都加入了我的谷歌应用程序列表,但6个URI中只有一个(不是第一个!)是有效的!我错过了谷歌应用程序的哪些设置?我找到了解决方案。顺便说一句,需要设置“redirect_uri”与在第一个请求中设置的URL相同,该请求获取“code”。这就是全部。旁白:也许我从文件中漏掉了这张纸条…:(谢谢你的回答!我尝试了你的方法,但我得到了相同的错误…但是!当我尝试不同的“重定向uri”时,我解决了我的问题。我不明白,为什么我不能在params中使用每个uri?它们都添加到我的谷歌应用程序列表中,但只有一个(不是第一个!)from 6 URI是有效的!我在设置我的Google应用程序时遗漏了什么?我找到了解决方案。顺便说一句,需要设置“redirect_URI”与在第一个请求中设置的URL相同,并获得“code”。仅此而已。注意:可能我遗漏了文档中的注释…:(如果这样做行得通,那将是一件奇怪的事情,但这仍然不是根本原因,如果我们真的想要脱机访问类型并且仍然希望它工作呢?如果这样做行得通,那将是一件奇怪的事情,但这仍然不是根本原因,如果我们真的想要脱机访问类型并且仍然希望它工作呢?