Authentifizieren Sie den Testbenutzer {"error_type": "OAuthException", "code": 400, "error_message": "Invalid platform app"}

17

Ich versuche, das Zugriffstoken über die Instagram Basic Display-API wiederherzustellen, aber beim Versuch, den Testbenutzer zu authentifizieren, wird folgende Fehlermeldung angezeigt:

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

Ich erwarte den App-Autorisierungsbildschirm

Felice Caricati
quelle
Haben Sie jemals die Lösung dafür gefunden? Ich habe das gleiche Problem.
MontyTheMack

Antworten:

26

Felice!

Wenn Sie eine Instagram-App einrichten, sollten Sie die plattformspezifische App-ID und nicht die generische Einrichtung auf Facebook verwenden.

Gehen Sie in Ihrem Facebook-App-Dashboard zu Products > Instagram > Basic Displayund sehen Sie die Instagram-App-ID .

Verwenden Sie das in Ihrer Autorisierungs-URL und es sollte funktionieren.

Filipe V.
quelle
Haben Sie jemals die Lösung dafür gefunden? Ich habe das gleiche Problem.
MontyTheMack
4
Ich verwende die Instagram-App-ID und es wird immer noch dieser Fehler angezeigt.
MontyTheMack
1
Hier gilt das gleiche. Ich habe festgestellt, dass bei allen Parametern, die Sie auf [ api.instagram.com/oauth/access_token/] setzen , ein Fehler ausgegeben wird! Vielleicht ein schlechter Endpunkt? Auf jeden Fall habe ich alles Schritt für Schritt befolgt, was auf [ developer.facebook.com/docs/instagram-basic-display-api/… erwähnt wurde, und alles hat einwandfrei funktioniert, bis Schritt 5: Tauschen Sie den Code gegen ein Token aus, das ich dann verwende Postbote zum Aufrufen von [ api.instagram.com/oauth/access_token/] mit den Parametern client_id, client_secret, grant_type, redirect_uri und code (nach erfolgreicher Autorisierung abgerufen) . aber scheitert
DingDong
6
Ich hatte das gleiche Problem, das ich mit dem Postboten gemacht habe, indem ich die Parameter durch den Körper geleitet und x-www-form-urlencoded gesetzt habe. Es funktionierte wie eine Cham
Michael de Menten
6

Das Übergeben von Parametern durch den Körper und in x-www-form-urlencoded funktioniert einwandfrei, wie Sie im Bild unten sehen können Geben Sie hier die Bildbeschreibung ein

Michael de Menten
quelle
1
stimmt, das hat einwandfrei funktioniert
DingDong
Es funktioniert nicht für mich
Nikunj
1
danke du hast mir wirklich geholfen :)
BartK_97
2

Ich hatte ein ähnliches Problem und konnte es beheben, indem ich den Inhaltstyp der Anforderung auf application / x-www-form-urlencoded setzte. Das folgende Beispiel zeigt, wie die Anforderung ausgeführt wird:

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);
    }
William Rees
quelle
1

Wie auch in anderen Antworten erwähnt, bestand das Problem mit dem Formularkörper, der im x-www-form-urlencodierten Format gesendet werden soll. Beim Postboten hat es gut funktioniert, aber es ist etwas typisch, dasselbe im Winkel zu implementieren . Hier muss der Post-Request-Body zuerst in das HttpParams-Format konvertiert und dann als Zeichenfolge wie folgt an den 'body'-Parameter der Post-Request übergeben werden.

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

}
Himanshu Goyal
quelle