답변:
펠리체!
Instagram 앱을 설정할 때 Facebook의 일반적인 설정이 아닌 플랫폼 별 앱 ID를 사용해야합니다.
Facebook 앱 대시 보드 Products > Instagram > Basic Display
에서 Instagram 앱 ID 로 이동 해야합니다 .
인증 URL에 사용하면 작동합니다.
비슷한 문제가 있었고 요청의 콘텐츠 유형을 application / x-www-form-urlencoded로 설정하여 해결할 수있었습니다. 아래는 요청을 실행하는 방법을 보여주는 ac # 예제입니다.
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 형식 으로 보내야하는 양식 본문에 있습니다 . 우편 배달부에서 나에게 잘 작동했지만 각도 로 동일한 것을 구현하는 것이 약간 일반적입니다. 여기서 포스트 요청 본문은 먼저 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
}
*/
})
}
}