Неможливо отримати access_token для API базового дисплея в Instagram


9

Я намагаюсь отримати доступ до Instagram з Instagram, щоб використовувати їх базовий API дисплея для нового додатка (просто показуйте твіти на веб-сторінці).

Я дотримувався цих кроків: https://developers.facebook.com/docs/instagram-basic-display-api/getting-started

Але я застряг на кроці 5: Обміняйте код на маркер

Запит cURL завжди повертає помилку 400 із повідомленням: "Код відповідності не знайдено або вже використовується"

Однак після багатьох тестів я отримав access_token лише один раз, але термін його дії закінчився приблизно через годину. Це здається дуже випадковим.

API базового дисплея Instagram здається досить новим. Деякий час тому я використовував додатки, створені на веб- сайті https://www.instagram.com/developer/, і вони раніше працювали. Тепер цей сайт відображає це повідомлення:

ОНОВЛЕННЯ: З 15 жовтня 2019 року реєстрація нового клієнта та перегляд дозволів на платформі API Instagram припиняються на користь API Basic Display API.

... із посиланням на developers.facebook.com.


де ви могли отримати маркер доступу? Я продовжую отримувати ті самі 400 помилок, навіть використовуючиcurl
Gianfranco P.

@GianfrancoP. ви намагалися опублікувати свій додаток у Facebook? (на консолі розробників Facebook для додатків)
Maxime Freschard

Нарешті мені вдалося отримати маркер доступу. Мій додаток раніше використовувався, але тепер я додаю логін в Instagram, тому сьогодні чекаю затвердження. Мені вдалося змусити його працювати, не знаючи, що я роблю неправильно, тбх
Gianfranco P.

Перевірте мою відповідь з деяким кодом тут 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

У мене також була така ж проблема, я вирішив очистити кеш, cookie та інші дані браузера.

Тоді я зробив новий запит.

Спробуйте, це працювало зі мною.


0

Я знайшов рішення.

Прямий урі повинен бути таким же, як ви використовуєте на початку.

колишній Ти використовуєш

www.abc.com/auth 

щоб отримати код. Під час обміну токена redirect_uri повинен бути таким самим, як

www.abc.com/auth

0

Я також використовував старий API Instagram. Мені довелося змінити кілька речей, щоб змусити свій код працювати над новим 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, я також використовую PHP з Guzzle (бібліотека CURL). Мій код схожий на ваш. Це працювало один раз вчора, але більшість часу це не працює ...
Максим Фрешард

Привіт @Nobody, як ви називаєте кінцеву точку api.instagram.com/oauth/authorize, щоб отримати код з CURL? Після цього мене переспрямовують на сторінку входу в Instagram.
Максим Фрешард

Максиме, не потрібно використовувати CURL. Instagram включить код у URL-адресу після перенаправлення на ваш сайт. Ви можете використовувати HTTP GET, щоб забрати код: $ code = $ _GET ['код'];
Ніхто

-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']Потрібно, і ви повинні знати, як отримати код. Прочитайте тут

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.