Autentique o usuário de teste {"error_type": "OAuthException", "code": 400, "error_message": "Aplicativo de plataforma inválido"}

18

Estou tentando recuperar o token de acesso por meio da API de exibição básica do Instagram, mas ao tentar autenticar o usuário de teste, recebo este erro:

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

Espero ver a tela de autorização do aplicativo

Felice Caricati
fonte
Você já descobriu a solução para isso? Estou tendo o mesmo problema.
MontyTheMack

Respostas:

27

Felice!

Ao configurar um aplicativo do Instagram, você deve usar o ID do aplicativo específico da plataforma e não a configuração genérica no Facebook.

No seu painel de aplicativos do Facebook, acesse Products > Instagram > Basic Displaye deverá ver o ID do aplicativo do Instagram .

Use isso no seu URL de autorização e ele deve funcionar.

Filipe V
fonte
Você já descobriu a solução para isso? Estou tendo o mesmo problema.
MontyTheMack
4
Estou usando o ID do aplicativo do Instagram e ainda está dando esse erro.
MontyTheMack
11
O mesmo aqui. Percebi que quaisquer parâmetros que você colocar em [ api.instagram.com/oauth/access_token/] , isso gerará um erro! Talvez um ponto final ruim? De qualquer forma, segui tudo passo a passo mencionado em [ developers.facebook.com/docs/instagram-basic-display-api/… e tudo funcionou perfeitamente até a Etapa 5: Trocar o código por um token, onde então uso carteiro para chamar [ api.instagram.com/oauth/access_token/] com os parâmetros client_id, client_secret, grant_type, redirect_uri e code (recuperados após uma autorização bem-sucedida) . mas falha
DingDong 20/02
6
Eu tive o mesmo problema que fiz o teste com o carteiro, passando os parâmetros pelo corpo e configurando o código x-www-form-url, funcionava como um cham
Michael de Menten
6

Passar os parâmetros pelo corpo e no código x-www-form-url funciona bem, como você pode ver na figura abaixo insira a descrição da imagem aqui

Michael de Menten
fonte
11
verdade, isso funcionou perfeitamente bem
DingDong
Não está funcionando para mim
Nikunj
11
obrigado você realmente me ajudou :)
BartK_97 27/03
2

Eu tive um problema semelhante e consegui resolvê-lo definindo o tipo de conteúdo da solicitação como application / x-www-form-urlencoded. abaixo está um exemplo de # # mostrando como executar a solicitação:

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

Como mencionado em outra resposta, o problema estava no corpo do formulário, que deveria ser enviado no formato x-www-form-urlencoded . Estava funcionando bem para mim no carteiro, mas implementar o mesmo em angular é um pouco típico. Aqui, o corpo da solicitação de postagem deve primeiro ser convertido no formato HttpParams e depois passar para o parâmetro 'body' da solicitação de postagem como uma string 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
fonte