验证测试用户 { "error_type": "OAuthException", "code": 400, "error_message": "Invalid platform app" }
Authenticate the Test User { "error_type": "OAuthException", "code": 400, "error_message": "Invalid platform app" }
我正在尝试通过 Instagram 基本显示恢复访问令牌 API 但是在尝试对测试用户进行身份验证时出现此错误:
{
"error_type": "OAuthException",
"code": 400,
"error_message": "Invalid platform app"
}
我希望看到应用授权屏幕
祝你幸福!
设置 Instagram 应用程序时,您应该使用特定于平台的应用程序 ID,而不是在 Facebook 上设置的通用应用程序 ID。
在您的 Facebook 应用程序控制面板中转到 Products > Instagram > Basic Display
,应该会看到 Instagram 应用程序 ID。
在您的授权中使用它 URL 它应该可以工作。
我有一个类似的问题,并且能够通过将请求的内容类型设置为 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);
}
通过正文和 x-www-form-urlencoded 传递参数效果很好,如下图所示
正如其他答案中提到的那样,问题出在应该以 x-www-form-urlencoded 格式发送的表单正文中。它在 postman 中对我来说工作正常,但在 angular 中实现同样的功能有点典型。
这里 post 请求体首先必须转换为 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
}
*/
})
}
}
我正在尝试通过 Instagram 基本显示恢复访问令牌 API 但是在尝试对测试用户进行身份验证时出现此错误:
{
"error_type": "OAuthException",
"code": 400,
"error_message": "Invalid platform app"
}
我希望看到应用授权屏幕
祝你幸福!
设置 Instagram 应用程序时,您应该使用特定于平台的应用程序 ID,而不是在 Facebook 上设置的通用应用程序 ID。
在您的 Facebook 应用程序控制面板中转到 Products > Instagram > Basic Display
,应该会看到 Instagram 应用程序 ID。
在您的授权中使用它 URL 它应该可以工作。
我有一个类似的问题,并且能够通过将请求的内容类型设置为 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);
}
通过正文和 x-www-form-urlencoded 传递参数效果很好,如下图所示
正如其他答案中提到的那样,问题出在应该以 x-www-form-urlencoded 格式发送的表单正文中。它在 postman 中对我来说工作正常,但在 angular 中实现同样的功能有点典型。 这里 post 请求体首先必须转换为 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
}
*/
})
}
}