Аутентифицировать тестового пользователя {«error_type»: «OAuthException», «code»: 400, «error_message»: «Недопустимое приложение платформы»}


18

Я пытаюсь восстановить токен доступа через Instagram Basic Display API, но при попытке аутентификации тестового пользователя я получаю эту ошибку:

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

Я ожидаю увидеть экран авторизации приложения


Вы когда-нибудь находили решение для этого? У меня та же проблема.
MontyTheMack

Ответы:


27

Felice!

При настройке приложения Instagram, вы должны использовать идентификатор приложения для конкретной платформы, а не универсальную настройку в Facebook.

В панели инструментов приложения Facebook зайдите Products > Instagram > Basic Displayи увидите идентификатор приложения Instagram .

Используйте это в своем URL авторизации, и оно должно работать.


Вы когда-нибудь находили решение для этого? У меня та же проблема.
MontyTheMack

4
Я использую идентификатор приложения Instagram, и он все еще выдает эту ошибку.
MontyTheMack

1
Тоже самое. Я заметил, что какие бы параметры вы ни указали на [ api.instagram.com/oauth/access_token/] , он выдаст ошибку! Может плохая конечная точка? В любом случае, я следовал всем шагам, упомянутым на [ developers.facebook.com/docs/instagram-basic-display-api/…), и все прекрасно работало до шага 5: обменяйте код на токен, где я затем использую почтальону позвонить [ api.instagram.com/oauth/access_token/] с параметрами client_id, client_secret, grant_type, redirect_uri и кодом (полученными после успешной авторизации) . но терпит неудачу
DingDong

6
У меня была та же проблема, что я сделал тест с почтальоном с передачей параметров через тело и установкой x-www-form-urlencoded, это работало как чам
Майкл де Ментен

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
        }
      */
    })
  }

}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.