Authentifier l'utilisateur test {"error_type": "OAuthException", "code": 400, "error_message": "Invalid platform app"}

18

J'essaie de récupérer le jeton d'accès via l'API Instagram Basic Display, mais lorsque j'essaie d'authentifier l'utilisateur de test, j'obtiens cette erreur:

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

Je m'attends à voir l'écran d'autorisation de l'application

Felice Caricati
la source
Avez-vous déjà trouvé la solution à cela? J'ai le même problème.
MontyTheMack

Réponses:

27

Felice!

Lors de la configuration d'une application Instagram, vous devez utiliser l'ID d'application spécifique à la plate-forme et non la configuration générique sur Facebook.

Dans le tableau de bord de votre application Facebook, accédez à Products > Instagram > Basic Displayet devrait voir l' ID de l'application Instagram .

Utilisez-le dans votre URL d'autorisation et cela devrait fonctionner.

Filipe V
la source
Avez-vous déjà trouvé la solution à cela? J'ai le même problème.
MontyTheMack
4
J'utilise l'ID de l'application Instagram et il donne toujours cette erreur.
MontyTheMack
1
Pareil ici. J'ai remarqué que quels que soient les paramètres que vous mettez sur [ api.instagram.com/oauth/access_token/] , cela générera une erreur! Peut-être un mauvais point final? Dans tous les cas, j'ai suivi tout ce qui est mentionné étape par étape sur [ developers.facebook.com/docs/instagram-basic-display-api/… et tout a parfaitement fonctionné jusqu'à l' étape 5: échange du code contre un jeton où j'utilise ensuite facteur à appeler [ api.instagram.com/oauth/access_token/] avec les paramètres client_id, client_secret, grant_type, redirect_uri et code (récupéré après une autorisation réussie) . mais échoue
DingDong
6
J'ai eu le même problème que j'ai fait le test avec le facteur avec le passage des paramètres à travers le corps et la définition de x-www-form-urlencoded, cela fonctionnait comme un cham
Michael de Menten
6

Passer des paramètres à travers le corps et dans x-www-form-urlencoded fonctionne très bien comme vous pouvez le voir dans l'image ci-dessous entrez la description de l'image ici

Michael de Menten
la source
1
vrai, cela a parfaitement fonctionné
DingDong
Cela ne fonctionne pas pour moi
Nikunj
1
merci vous m'avez vraiment aidé :)
BartK_97
2

J'ai rencontré un problème similaire et j'ai pu le résoudre en définissant le type de contenu de la demande sur application / x-www-form-urlencoded. ci-dessous est un exemple ac # montrant comment exécuter la demande:

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
la source
1

Comme mentionné dans d'autres réponses également, le problème était avec le corps du formulaire qui est censé être envoyé au format x-www-form-urlencoded . Cela fonctionnait bien pour moi dans le facteur, mais l'implémenter de la même manière angulaire est légèrement typique. Ici, le corps de la demande de publication doit d'abord être converti au format HttpParams, puis passer au paramètre «corps» de la demande de publication sous la forme d'une chaîne comme celle-ci.

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
la source