Instagram Basic Display API에 대한 access_token을 얻을 수 없습니다


9

Instagram에서 access_token을 가져 와서 새 앱에 기본 디스플레이 API를 사용하려고합니다 (웹 페이지에 간단히 트윗을 표시).

나는 다음 단계를 따랐다 : https://developers.facebook.com/docs/instagram-basic-display-api/getting-started

하지만 5 단계 : 토큰 교환 코드에 갇혀 있습니다.

cURL 요청은 항상 "일치하는 코드를 찾을 수 없거나 이미 사용되었습니다"라는 메시지와 함께 400 오류를 반환합니다.

그러나 많은 테스트를 거친 후 한 번만 access_token을 얻었지만 약 1 시간 후에 만료되었습니다. 이것은 매우 임의적 인 것으로 보입니다.

Instagram Basic Display API는 다소 새로운 것처럼 보입니다. 얼마 전에 https://www.instagram.com/developer/ 웹 사이트 에서 만든 앱 을 사용했으며 작동했습니다. 이제이 사이트는 다음 메시지를 표시합니다.

업데이트 : 2019 년 10 월 15 일부터 Instagram API 플랫폼에 대한 새로운 클라이언트 등록 및 권한 검토가 Instagram Basic Display API를 위해 중단되었습니다.

... developers.facebook.com에 대한 링크가 있습니다.


액세스 토큰을 어디서 얻을 수 있습니까? 사용하여도 동일한 400 오류가 계속 발생합니다curl
Gianfranco P.

G Facebook 앱을 게시하려고 했습니까? (앱용 Facebook 개발자 콘솔에서)
Maxime Freschard

마침내 액세스 토큰을 얻을 수있었습니다. 내 응용 프로그램은 이전에 사용되었지만 지금은 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. https://api.instagram.com/oauth/access_token매개 변수가 아닌 본문의 매개 변수로 POST 요청을 하십시오. x-www-form-urlencoded옵션이 활성화되어 있는지 확인하십시오 .
  3. 당신은 지금의 상태 받아야 200 OK하고 모두 응답 access_tokenuser_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를 사용하고 있습니다. 내 코드는 당신과 비슷합니다. 그것은 어제 한 번 작동했지만 대부분 작동하지 않습니다 ...
Maxime Freschard

안녕 @Nobody, 어떻게 cURL 코드를 얻기 위해 api.instagram.com/oauth/authorize 엔드 포인트를 호출 합니까? 그렇게하면 Instagram 로그인 페이지로 리디렉션됩니다.
Maxime Freschard

맥심, 당신은 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.