Autentique al usuario de prueba {"error_type": "OAuthException", "code": 400, "error_message": "Aplicación de plataforma no válida"}

18

Estoy tratando de recuperar el token de acceso a través de la API de pantalla básica de Instagram, pero cuando intento autenticar al usuario de prueba recibo este error:

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

Espero ver la pantalla de autorización de la aplicación.

Felice Caricati
fuente
¿Alguna vez descubriste la solución para esto? Estoy teniendo el mismo problema.
MontyTheMack

Respuestas:

27

Felice!

Al configurar una aplicación de Instagram, debe usar la ID de aplicación específica de la plataforma y no la configuración genérica en Facebook.

En el Panel de la aplicación de Facebook, vaya Products > Instagram > Basic Displayy debería ver la ID de la aplicación de Instagram .

Use eso en su URL de autorización y debería funcionar.

Filipe V
fuente
¿Alguna vez descubriste la solución para esto? Estoy teniendo el mismo problema.
MontyTheMack
44
Estoy usando el ID de la aplicación de Instagram y todavía está dando este error.
MontyTheMack
1
Igual que aquí. Me di cuenta de que, independientemente de los parámetros que establezca [ api.instagram.com/oauth/access_token/] , ¡ arrojará un error! Tal vez un mal punto final? En cualquier caso, he seguido todo paso a paso mencionado en [ developers.facebook.com/docs/instagram-basic-display-api/… y todo funcionó perfectamente bien hasta el Paso 5: intercambie el código por un token donde luego uso cartero para llamar a [ api.instagram.com/oauth/access_token/] con los parámetros client_id, client_secret, grant_type, redirect_uri y código (recuperado después de una autorización exitosa) . pero falla
DingDong
66
Tuve el mismo problema que hice la prueba con cartero al pasar los parámetros a través del cuerpo y establecer x-www-form-urlencoded, funcionó como un cham
Michael de Menten
6

Pasar parámetros a través del cuerpo y en x-www-form-urlencoded funciona bien, como puede ver en la imagen a continuación ingrese la descripción de la imagen aquí

Michael de Menten
fuente
1
cierto, esto funcionó perfectamente bien
DingDong
No está funcionando para mí
Nikunj
1
gracias, realmente me ayudaste :)
BartK_97
2

Tuve un problema similar y pude resolverlo configurando el tipo de contenido de la solicitud en application / x-www-form-urlencoded. a continuación se muestra un ejemplo de ac # que muestra cómo ejecutar la solicitud:

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
fuente
1

Como también se mencionó en otra respuesta, el problema era con el cuerpo del formulario que se supone que debe enviarse en formato x-www-form-urlencoded . Me estaba funcionando bien en cartero, pero implementar lo mismo en angular es un poco típico. Aquí, el cuerpo de la solicitud de publicación primero debe convertirse en el formato HttpParams y luego pasar al parámetro 'cuerpo' de la solicitud de publicación como una cadena como esta ...

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
fuente