Аутентифікувати тестового користувача {“error_type”: “OAuthException”, “code”: 400, “message_ message”: “Недійсна програма для платформи”}


17

Я намагаюся відновити маркер доступу через API базового дисплея Instagram, але при спробі автентифікації тестового користувача я отримую цю помилку:

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

Я очікую побачити екран авторизації додатків


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

Відповіді:


26

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.