Невозможно получить access_token для Instagram Basic Display API - PullRequest
4 голосов
/ 21 октября 2019

Я пытаюсь получить access_token из Instagram, чтобы использовать их API базового отображения для нового приложения (просто отображать твиты на веб-странице).

Я выполнил следующие действия: https://developers.facebook.com/docs/instagram-basic-display-api/getting-started

Но я застрял на шаге 5: обмен кода на токен

Запрос cURL всегда возвращает ошибку 400 с сообщением: «Совпадающий код не найден или уже использовался» *

Однако, после многих тестов, я получил access_token только один раз, но он истек примерно через час. Это кажется очень случайным.

API Basic Instagram Display выглядит довольно новым. Некоторое время назад я использовал приложения, созданные на веб-сайте https://www.instagram.com/developer/, и он работал. Теперь этот сайт отображает это сообщение:

ОБНОВЛЕНИЕ: С 15 октября 2019 года регистрация новых клиентов и проверка разрешений на платформе API Instagram прекращены в пользу API Basic Display Display.

... со ссылкой на developers.facebook.com.

Ответы [ 4 ]

2 голосов
/ 22 октября 2019

Мне просто удалось удалить завершающий символ #_ в конце кода, который они вам дают. Не уверен, что это была ваша проблема?

https://developers.facebook.com/support/bugs/436837360282557/

2 голосов
/ 23 октября 2019

У меня была эта проблема, когда я пытался реализовать приложение.
Моя проблема заключалась в коде, сгенерированном, когда вы разрешаете разрешения.
Попробуйте удалить # _ из конца сгенерированного кода и попробуйте сгенерировать токен снова

Сгенерированный код пример: AQBvrqqBJJTM49U1qTQWRMD96oRyMR3B_04JSfjc-nUIi0iGbSc3x_EceggQi9IyG3B3Rj3ocreMThQoPJbPpeXLUM4exJMy4o01fXcRtT_I9NovaNAqmWSneFt3MYv_k7ifAUUeMlC050n5xnjQP6oAvDBfCFQvTdrFaR95-5i71YsfQlmjYWDG6fcWRvOB9nqr6J9mbGMXMi9Y4tKlSfElaYm0YKRijZQDG2B5PaxQ8A # _

1012 * Сгенерированный код отредактирован: AQBvrqqBJJTM49U1qTQWRMD96oRyMR3B_04JSfjc-nUIi0iGbSc3x_EceggQi9IyG3B3Rj3ocreMThQoPJbPpeXLUM4exJMy4o01fXcRtT_I9NovaNAqmWSneFt3MYv_k7ifAUUeMlC050n5xnjQP6oAvDBfCFQvTdrFaR95-5i71YsfQlmjYWDG6fcWRvOB9nqr6J9mbGMXMi9Y4tKlSfElaYm0YKRijZQDG2B5PaxQ8A
0 голосов
/ 03 ноября 2019

Я использую 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'] требуется, и вы должны знать, как получить код. Читать здесь

0 голосов
/ 22 октября 2019

Я также использовал старый 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);
...