Невозможно получить access_token для Instagram Basic Display API

9

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

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

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

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

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

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

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

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

Максим Фрешард
источник
где вы можете получить токен доступа? Я продолжаю получать ту же ошибку 400, даже используяcurl
Gianfranco P.
@GianfrancoP. Вы пытались опубликовать свое приложение на Facebook? (в консоли разработчиков приложений для Facebook)
Максим Фрешард
Мне наконец удалось получить токен доступа. Мое приложение уже работало, но теперь я добавляю логин в Instagram, так что я жду подтверждения уже несколько часов сегодня. Мне удалось заставить это работать, не уверенный, что я делал неправильно, tbh
Джанфранко П.
Проверьте мой ответ с некоторым кодом здесь stackoverflow.com/a/59305113/1474270 это может помочь
patJnr

Ответы:

3

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

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

Эммануэль
источник
Привет @ Emmanuel, я также заметил, что это работало при удалении этих конечных символов. Но большую часть времени это не работает вообще.
Максим Фрешард
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. Первое: установите почтальон https://www.postman.com/downloads/
  2. Сделайте POST-запрос https://api.instagram.com/oauth/access_tokenс параметрами в теле, а не с параметрами. Убедитесь, что x-www-form-urlencodedопция включена.
  3. Теперь вы должны получить статус 200 OKи ответ с обоими access_tokenи user_id.
{
    "access_token": "IGQVJYUXlDN...",
    "user_id": 17841400...
}

Счастливые дни!!

Смотрите скриншот для правильных настроек:

введите описание изображения здесь

Анас
источник
0

У меня тоже была такая же проблема, я решил очистить кеш, куки и другие данные браузера.

Затем я сделал новый запрос.

Попробуйте, это сработало со мной.

Уэслен Сантос
источник
0

Я нашел решение.

Прямой URI должен быть таким же, как вы используете в начале.

ех. Ты используешь

www.abc.com/auth 

чтобы получить код. При обмене токена значение redirect_uri должно совпадать с

www.abc.com/auth
JackWu
источник
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);
Никто
источник
Привет @ Никто, я тоже использую PHP с Guzzle (библиотека cURL). Мой код похож на ваш. Это работало однажды вчера, но большую часть времени это не работает ...
Максим Фрешард
Привет @ Никто, как вы вызываете конечную точку api.instagram.com/oauth/authorize для получения кода с помощью cURL? Когда я это делаю, меня перенаправляют на страницу входа в Instagram.
Максим Фрешард
Максим, тебе не нужно использовать cURL. Instagram включает код в URL после его перенаправления на ваш сайт. Вы можете использовать HTTP GET для получения кода: $ code = $ _GET ['code'];
Никто не
-1

Я использую PHP, но без использования каких-либо библиотек. Может быть, этот поможет вам.

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

Navbro
источник