Instagram Basic Display APIのaccess_tokenを取得できません


9

Instagramからaccess_tokenを取得して、Basic Display APIを新しいアプリに使用しようとしています(Webページにツイートを表示するだけです)。

私は次の手順に従いました:https : //developers.facebook.com/docs/instagram-basic-display-api/getting-started

しかし、ステップ5:コードをトークンに交換するのに行き詰まっています

cURLリクエストは常に、「一致するコードが見つからなかったか、すでに使用されていました」というメッセージとともに400エラーを返します。

しかし、多くのテストの後で、access_tokenを1回だけ取得しましたが、約1時間後に有効期限が切れました。これは非常にランダムなようです。

Instagram Basic Display APIはかなり新しいようです。少し前に、https://www.instagram.com/developer/の Webサイトで作成したアプリを使用しましたが、以前は機能していました。今、このサイトはこのメッセージを表示します:

更新:2019年10月15日から、Instagram Basic Display APIを支持して、Instagram APIプラットフォームでの新しいクライアント登録および許可レビューが中止されます。

... developers.facebook.comへのリンクがあります。


どこでアクセストークンを取得できますか?使用しても同じ400エラーが発生し続けるcurl
Gianfranco P.

@GianfrancoP。Facebookアプリを公開しようとしましたか?(アプリのFacebook開発者コンソール)
Maxime Freschard '28

ようやくアクセストークンを取得できました。私のアプリは以前に公開されていましたが、今はInstagramログインを追加しているので、今日数時間の時点で承認を待っています。私はなんとかそれをうまく動かすことができました、私が正確に何が間違っていたかはわかりません、tbh
Gianfranco P.

ここではいくつかのコードで私の答えをチェックしstackoverflow.com/a/59305113/1474270それが役立つかもしれない
patJnr

回答:



3

アプリケーションを実装しようとしたときにこの問題が発生しました。
私の問題は、権限を許可したときに生成されたコードでした。生成されたコードの末尾から#_
を削除して、もう一度トークンを生成してみてください

生成されたコードの例: AQBvrqqBJJTM49U1qTQWRMD96oRyMR3B_04JSfjc-nUIi0iGbSc3x_EceggQi9IyG3B3Rj3ocreMThQoPJbPpeXLUM4exJMy4o01fXcRtT_I9NovaNAqmWSneFt3MYv_k7ifAUUeMlC050n5xnjQP6oAvDBfCFQvTdrFaR95-5i71YsfQlmjYWDG6fcWRvOB9nqr6J9mbGMXMi9Y4tKlSfElaYm0YKRijZQDG2B5PaxQ8A #_

生成されたコードは、編集: AQBvrqqBJJTM49U1qTQWRMD96oRyMR3B_04JSfjc-nUIi0iGbSc3x_EceggQi9IyG3B3Rj3ocreMThQoPJbPpeXLUM4exJMy4o01fXcRtT_I9NovaNAqmWSneFt3MYv_k7ifAUUeMlC050n5xnjQP6oAvDBfCFQvTdrFaR95-5i71YsfQlmjYWDG6fcWRvOB9nqr6J9mbGMXMi9Y4tKlSfElaYm0YKRijZQDG2B5PaxQ8A


1

元のドキュメント(https://developers.facebook.com/docs/instagram-basic-display-api/getting-started)に従ってコマンドラインツールを使用しようとしましたが、うまくいきません...

ここでは、3つの簡単なステップで行うことを示します。

  1. 最初に:Postman https://www.postman.com/downloads/をインストールします
  2. POSTリクエストを行いhttps://api.instagram.com/oauth/access_token、体内のパラメータとしないのparams。x-www-form-urlencodedオプションが有効になっていることを確認してください。
  3. あなたは今の状態を取得する必要200 OKの両方で、応答をaccess_tokenしてuser_id
{
    "access_token": "IGQVJYUXlDN...",
    "user_id": 17841400...
}

幸せな日々!!

正しい設定については、スクリーンショットを参照してください。

ここに画像の説明を入力してください


0

私も同じ問題を抱えていたので、キャッシュ、coockie、その他のブラウザーデータをクリアすることを解決しました。

それから私は新しい要求をしました。

試してみてください。


0

私は解決策を見つけました。

直接URIは、最初に使用したものと同じでなければなりません。

例。あなたが使う

www.abc.com/auth 

コードを取得します。トークンを交換するとき、redirect_uriは以下と同じでなければなりません。

www.abc.com/auth

0

以前のInstagram APIも使用していました。新しいAPIでコードを機能させるには、いくつか変更する必要がありました。あなたが何を使っているのかわからない、これは私がPHPでそれをした方法です。

$url = 'https://api.instagram.com/oauth/access_token';

$fields = array(
    'app_id' => 'YOUR_APP_ID',
    'app_secret' => 'YOUR_APP_SECRET_ID',
    'grant_type' => 'authorization_code',
    'redirect_uri' => 'YOUR_REDIRECT_URL',
    'code' => $code
);

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_VERIFYPEER, false);

$result = curl_exec($ch);
curl_close($ch);

//get the access token from the string sent from Instagram
$splitString = explode('"access_token":', $result);
$removeRest = explode(',', $splitString[1]);
$withSpace = str_replace('"','', $removeRest[0]);
$access_token = str_replace(' ','', $withSpace);

こんにちは@Nobody、私もGuzzle(cURLライブラリ)でPHPを使用しています。私のコードはあなたのものと似ています。昨日1回は機能しましたが、ほとんどの場合機能しません...
Maxime Freschard、

こんにちは、@ Nobody、どのようにapi.instagram.com/oauth/authorizeエンドポイントを呼び出して、cURLでコードを取得しますか?そうすると、Instagramのログインページにリダイレクトされます。
Maxime Freschard

Maxime、cURLを使用する必要はありません。Instagramは、サイトにリダイレクトした後、URLにコードを含めます。HTTP GETを使用してコードを取得できます:$ code = $ _GET ['code'];
誰もいない

-1

PHPを使用していますが、libは使用していません。多分これはあなたを助けるでしょう。

curl.php

class InstagramApi 
{

public function GetAccessToken($client_id, $redirect_uri, $client_secret, $code) {      
    $url = 'https://api.instagram.com/oauth/access_token';

    $curlPost = 'app_id='. $client_id . '&redirect_uri=' . $redirect_uri . '&app_secret=' . $client_secret . '&code='. $code . '&grant_type=authorization_code';
    $ch = curl_init();      
    curl_setopt($ch, CURLOPT_URL, $url);        
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);      
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);            
    $data = json_decode(curl_exec($ch), true);  
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    curl_close($ch);    

    if($http_code != '200')         
        throw new Exception('Error : Failed to receieve access token');

    return $data;

  }

index.php

include "curl.php";
include "instagram_keys.php"; // holding APP ID, SECRET KEY, REDIRECT URI

 $instagram_ob = new InstagramApi();
 $insta_data = $instagram_ob->GetAccessToken(INSTAGRAM_CLIENT_ID, INSTAGRAM_REDIRECT_URI, INSTAGRAM_CLIENT_SECRET, $_GET['code']);  
  echo  $insta_data['access_token'];
  echo  $insta_data['user_id'];

注:$_GET['code']は必須であり、コードの入手方法を知っている必要があります。こちらをお読みください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.