3

Unirest.io PHP を使用して Twitter から API トークンを取得しようとしています。私のコードは次のとおりです。

[in PHP]
$response = Unirest::post("https://api.twitter.com//oauth2/token",
  array(
"Authorization" => "Basic [AUTH_KEY]",
"Content-Type" => "application/x-www-form-urlencoded;charset=UTF-8"
),
array("grant_type" => "client_credentials")

);

私がTwitterから得るものは次のとおりです。

{
 errors: [
 {
 code: 170,
 label: "forbidden_missing_parameter",
 message: "Missing required parameter: grant_type"
  }
 ]
 }

私が理解しているように、リクエストの「本文」に「grant_type」:「client_credentials」を含める必要があります。これは、上記のユニレストリクエストに含まれていると思いましたが、明らかにそうではありません。ヘルプやコメントはありますか?

4

1 に答える 1

1

これは本当に遅れていますが、将来誰かを助けるかもしれません. 少し前にこの問題がありましたが、これが私がそれを修正した方法です。基本的に、「grant_type」を配列ではなく文字列として渡しました

$uri = "https://api.twitter.com/oauth2/token";

$headers = [
    "Authorization: Basic ".XXXXXXX, 
    "Content-Type: application/x-www-form-urlencoded;charset=UTF-8",
];

$verb = "POST";

//here is where i replaced the value of body with a string instead of an array
$body = 'grant_type=client_credentials';

$ch = curl_init($uri);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $verb);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLINFO_HTTP_CODE, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

$result = curl_exec($ch);
$response = json_decode($result);

Twitterが文書化したように、期待される結果を返しました。

于 2018-03-16T17:00:29.407 に答える