테스트 사용자 인증 { "error_type": "OAuthException", "code": 400, "error_message": "잘못된 플랫폼 앱"}


17

Instagram Basic Display API를 통해 액세스 토큰을 복구하려고하는데 테스트 사용자를 인증하려고 할 때이 오류가 발생합니다.

{
    "error_type": "OAuthException",
    "code": 400,
    "error_message": "Invalid platform app"
}

앱 인증 화면이 나타납니다


이것에 대한 해결책을 찾은 적이 있습니까? 같은 문제가 있습니다.
MontyTheMack

답변:


26

펠리체!

Instagram 앱을 설정할 때 Facebook의 일반적인 설정이 아닌 플랫폼 별 앱 ID를 사용해야합니다.

Facebook 앱 대시 보드 Products > Instagram > Basic Display에서 Instagram 앱 ID 로 이동 해야합니다 .

인증 URL에 사용하면 작동합니다.


이것에 대한 해결책을 찾은 적이 있습니까? 같은 문제가 있습니다.
MontyTheMack

4
Instagram 앱 ID를 사용하고 있으며 여전히이 오류가 발생합니다.
MontyTheMack

1
여기도 마찬가지입니다. 난 당신이 [에 넣어 그 어떤 매개 변수를 발견 api.instagram.com/oauth/access_token/]을 , 그것이 오류가 발생합니다! 엔드 포인트가 좋지 않습니까? 단계는 [에 언급함으로써 어떤 경우에는, 나는 모든 단계를 따랐다 developers.facebook.com/docs/instagram-basic-display-api/... 및 모든 때까지 완벽하게 잘 작동 5 단계 : 교환 토큰에 대한 코드 어디 다음 사용 postman은 client_id, client_secret, grant_type, redirect_uri 및 code (권한 부여 후 검색) 매개 변수를 사용하여 [ api.instagram.com/oauth/access_token/] 으로 전화하십시오 . 그러나 실패
DingDong

6
나는 postman을 통해 매개 변수를 본문을 통해 전달하고 x-www-form-urlencoded를 설정하여 같은 문제를 겪었습니다. 이것은 마치 챔처럼 작동했습니다
Michael de Menten

6

본문과 x-www-form-urlencoded에서 매개 변수를 전달하면 아래 그림에서 볼 수 있듯이 제대로 작동합니다. 여기에 이미지 설명을 입력하십시오


1
사실, 이것은 완벽하게 작동했습니다
DingDong

그것은 나를 위해 작동하지 않습니다
Nikunj

1
정말 도와 주셔서 감사합니다 :)
BartK_97

2

비슷한 문제가 있었고 요청의 콘텐츠 유형을 application / x-www-form-urlencoded로 설정하여 해결할 수있었습니다. 아래는 요청을 실행하는 방법을 보여주는 ac # 예제입니다.

public async Task<UserTokenResponseModel> GetUserToken(string code)
    {
        var url =
            $"https://api.instagram.com/oauth/access_token";

        var request = new HttpRequestMessage(HttpMethod.Post, url);

        var client = _httpClientFactory.CreateClient();

        var requestContent = new List<KeyValuePair<string, string>>();
        requestContent.Add(new KeyValuePair<string, string>("client_id", ClientId));
        requestContent.Add(new KeyValuePair<string, string>("client_secret", Secret));
        requestContent.Add(new KeyValuePair<string, string>("grant_type", "authorization_code"));
        requestContent.Add(new KeyValuePair<string, string>("code", code));
        requestContent.Add(new KeyValuePair<string, string>("redirect_uri", "https://localhost:44315/instagram/authorizecallback"));

        request.Content = new FormUrlEncodedContent(requestContent);

        var response = await client.SendAsync(request);
        var content = await response.Content.ReadAsStringAsync();

        if (!response.IsSuccessStatusCode)
        {
            throw new Exception(content);
        }

        return JsonConvert.DeserializeObject<UserTokenResponseModel>(content);
    }

1

다른 답변에서도 언급했듯이 문제는 x-www-form-urlencoded 형식 으로 보내야하는 양식 본문에 있습니다 . 우편 배달부에서 나에게 잘 작동했지만 각도 로 동일한 것을 구현하는 것이 약간 일반적입니다. 여기서 포스트 요청 본문은 먼저 HttpParams 형식으로 변환 한 다음 포스트 요청의 'body'매개 변수에 다음과 같은 문자열로 전달해야합니다.

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class appService {

  constructor(private http: HttpClient) { }

  public getInstaAccessToken(formData) {
    let full_url = "https://api.instagram.com/oauth/access_token";
    let body = new HttpParams()
      .set("client_id" , "YOUR_CLIENT_ID")
      .set("client_secret","YOUR_CLIENT_SECRET")
      .set("code","code received from redirect url")
      .set("grant_type","authorization_code")
      .set("redirect_uri","your redirect uri")
    const requestOptions = {
      headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded')
    }
    return this.http.post(full_url, body.toString(), requestOptions).subscribe(data=>{
      console.log(data);
      /* 
        {
          "access_token": "IGQVJ...",
          "user_id": 17841405793187218
        }
      */
    })
  }

}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.