Autenticare l'utente di prova {"tipo_errore": "OAuthException", "codice": 400, "messaggio_errore": "App piattaforma non valida"}


18

Sto provando a recuperare il token di accesso tramite l'API di visualizzazione di base di Instagram ma quando provo ad autenticare l'utente di prova ottengo questo errore:

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

Mi aspetto di vedere la schermata di autorizzazione dell'app


Hai mai trovato la soluzione per questo? Sto avendo lo stesso problema.
MontyTheMack,

Risposte:


27

Felice!

Quando si configura un'app di Instagram, è necessario utilizzare l'ID app specifico della piattaforma e non quello generico su Facebook.

Nella tua app di Facebook Dashboard vai a Products > Instagram > Basic Displaye dovrebbe vedere l' ID dell'app di Instagram .

Usalo nel tuo URL di autorizzazione e dovrebbe funzionare.


Hai mai trovato la soluzione per questo? Sto avendo lo stesso problema.
MontyTheMack,

4
Sto usando l'ID dell'app di Instagram e continua a dare questo errore.
MontyTheMack,

1
Anch'io. Ho notato che qualunque parametro tu abbia messo su [ api.instagram.com/oauth/access_token/] , genererà un errore! Forse un endpoint negativo? In ogni caso, ho seguito tutto passo per passo menzionato su [ developers.facebook.com/docs/instagram-basic-display-api/… e tutto ha funzionato perfettamente fino al Passaggio 5: scambiare il codice con un token dove poi uso postino per chiamare [ api.instagram.com/oauth/access_token/] con i parametri client_id, client_secret, grant_type, redirect_uri e codice (recuperati dopo l'autorizzazione corretta) . ma non riesce
DingDong

6
Ho avuto lo stesso problema con cui ho fatto il test con il postino passando i parametri attraverso il corpo e impostando x-www-form-urlencoded, ha funzionato come un cham
Michael de Menten,

6

Passare i parametri attraverso il corpo e in x-www-form-urlencoded funziona bene come puoi vedere nella figura sotto inserisci qui la descrizione dell'immagine


1
vero, ha funzionato perfettamente
DingDong

Non funziona per me
Nikunj

1
grazie mi hai davvero aiutato :)
BartK_97 il

2

Ho riscontrato un problema simile ed è stato in grado di risolverlo impostando il tipo di contenuto della richiesta su application / x-www-form-urlencoded. di seguito è riportato l'esempio ac # che mostra come eseguire la richiesta:

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

Come menzionato anche in altre risposte, il problema era con il corpo del modulo che dovrebbe essere inviato in formato x-www-form-urlencoded . Nel postino funzionava bene per me, ma implementare lo stesso in angolare è leggermente tipico. Qui il corpo della richiesta di post deve prima convertirsi nel formato HttpParams e quindi passare al parametro 'body' della richiesta di post come stringa come questa.

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

}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.