テストユーザーを認証します{"error_type": "OAuthException"、 "code":400、 "error_message": "Invalid platform app"}


18

Instagram Basic Display APIを介してアクセストークンを復元しようとしていますが、テストユーザーを認証しようとすると、次のエラーが発生します。

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

アプリの承認画面が表示されることを期待しています


これに対する解決策を見つけたことがありますか?私も同じ問題を抱えています。
MontyTheMack

回答:


27

フェリーチェ!

Instagramアプリを設定するときは、Facebookでの一般的な設定ではなく、プラットフォーム固有のアプリIDを使用する必要があります。

Facebookアプリのダッシュボードに移動するProducts > Instagram > Basic Displayと、InstagramアプリIDが表示されます

それを認証URLで使用すると、機能するはずです。


これに対する解決策を見つけたことがありますか?私も同じ問題を抱えています。
MontyTheMack

4
InstagramアプリIDを使用していますが、まだこのエラーが発生します。
MontyTheMack

1
こっちも一緒。[ api.instagram.com/oauth/access_token/]にパラメーターを設定すると、エラーが発生することに気付きました。多分悪いエンドポイント?いずれにせよ、[ developer.facebook.com/docs/instagram-basic-display-api/…]に記載されているすべての手順を順を追って実行し、手順5:コードをトークンに交換してから使用するまで完全に問題なく動作しました postmanは[ api.instagram.com/oauth/access_token/]を呼び出し、パラメーターclient_id、client_secret、grant_type、redirect_uriおよびコード(認証が成功した後に取得)を使用します。失敗する
DingDong

6
私はpostmanでテストを行ったのと同じ問題がありました。本体にパラメーターを渡し、x-www-form-urlencodedを設定しました。これは、面白そうでした
Michael de Menten


2

同様の問題があり、リクエストのコンテンツタイプを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);
    }

1

他の回答でも述べたように、問題はx-www-form-urlencoded形式で送信されることになっているフォーム本文にありました。郵便配達員にとって私にとってはうまくいきましたが、同じことを角度で実装することは少し典型的です。ここでは、投稿リクエストの本文を最初にHttpParams形式に変換してから、このような文字列として投稿リクエストの '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
        }
      */
    })
  }

}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.