【问题标题】:Authenticate the Test User { "error_type": "OAuthException", "code": 400, "error_message": "Invalid platform app" }验证测试用户 { "error_type": "OAuthException", "code": 400, "error_message": "Invalid platform app" }
【发布时间】:2020-02-17 16:44:14
【问题描述】:

我正在尝试通过 Instagram 基本显示 API 恢复访问令牌,但在尝试对测试用户进行身份验证时出现此错误:

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

我希望看到应用授权屏幕

【问题讨论】:

  • 你有没有想过解决这个问题?我也有同样的问题。
  • 嗨@Felice!我也有同样的问题。你愿意帮我解决这个问题吗?

标签: instagram-api facebook-graph-api-v2.0


【解决方案1】:

菲利斯!

在设置 Instagram 应用时,您应该使用特定于平台的应用 ID,而不是在 Facebook 上设置的通用 ID。

在您的 Facebook 应用控制面板中转到 Products > Instagram > Basic Display,应该会看到 Instagram 应用 ID

在您的授权 URL 中使用它,它应该可以工作。

【讨论】:

  • 你有没有想过解决这个问题?我也有同样的问题。
  • 我使用的是 Instagram 应用 ID,但仍然出现此错误。
  • 这里也一样。我注意到无论您在 [api.instagram.com/oauth/access_token/] 上设置什么参数,它都会引发错误! 也许是一个错误的端点?在任何情况下,我都按照 [developers.facebook.com/docs/instagram-basic-display-api/… 中提到的所有步骤一步一步进行操作,并且在 第 5 步:将代码交换为令牌 之前一切正常,然后我使用邮递员致电 [api.instagram.com/oauth/access_token/]带有参数 client_id、client_secret、grant_type、redirect_uri 和 code(成功授权后检索)。但失败了
  • 我遇到了同样的问题,我用邮递员进行了测试,通过正文传递参数并设置 x-www-form-urlencoded,它就像一个 cham 一样工作
  • @MichaeldeMenten 将请求转换为编码字符串的解决方案是我的设置工作所必需的。对于我的用例,这应该是公认的答案。
【解决方案2】:

正如其他答案中提到的,问题在于应该以 x-www-form-urlencoded 格式发送的表单正文。它在邮递员中对我来说工作得很好,但在 angular 中实现同样的功能有点典型。 这里 post 请求 body 首先必须转换为 HttpParams 格式,然后像这样的字符串传递给 post 请求的 'body ' 参数..

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

}

【讨论】:

    【解决方案3】:

    通过 body 和 x-www-form-urlencoded 传递参数可以正常工作,如下图所示

    【讨论】:

      【解决方案4】:

      我遇到了类似的问题,可以通过将请求的内容类型设置为 application/x-www-form-urlencoded 来解决它。下面是一个展示如何执行请求的 c# 示例:

      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);
          }
      

      【讨论】:

        猜你喜欢
        • 2020-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-20
        相关资源
        最近更新 更多