2017-04-14 19 views
0

Googleアカウントに関するデータを取得したいと思います。私は次のエラーを取得した結果ではGoogle OAuth2はcURL(PHP)で「unsupported_grant_type」を返します

$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: " 
} 

私はこれからの命令を使用します。

https://developers.google.com/identity/protocols/OpenIDConnect

変数$codeと別のデータが有効である私は、次のコードを使用します!私は "PostMan"経由でリクエストを送信しようとしているので、正しい結果が得られます。

私が間違っている箇所を教えてください。

答えて

0

このような方法であることをやろう:

$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', 
    ]), 
)); 

ところで、私はC#でこれをやっていた

CURLOPT_VERBOSE => true, 
+0

ありがとうございます!私はあなたのやり方を試してみて、私は同じエラーがある...しかし、!私は別の "redirect_uri"を試したとき、私は自分のトラブルを解決しました。そして、私は理解できません、どうして私がparamsで使うことができるURIはありませんか?それらはすべて私のGoogle Appのリストに追加されましたが、6つのURIから1つだけ(最初ではありません)有効です! Google Appの設定を忘れたのは何ですか? – vitaliy

+1

解決策が見つかりました。ところで、最初のリクエストで設定した "コード"を取得したURLと同じ "redirect_uri"を設定する必要があります。それで全部です。 P.S .:多分私は文書からこのメモを逃した:... – vitaliy

0

を使用してカールリクエストをデバッグし、私の問題が関連している可能性が考えられます。 redirect_urlや他の文字列を指定するときは、URIをエスケープしてください。さもなければ、それはポストリクエストを混乱させます。これは、要求がapplication/x-www-form-urlencodedタイプを使用して送信されるためです。

関連する問題