Instagram API基本显示:请求访问令牌的问题

问题描述 投票:0回答:1

我正在关注Instagram API Basic Display文档。我已经创建了Facebook App,配置了Instagram基本显示,添加了测试用户,使用GET请求对测试用户进行了身份验证:

https://api.instagram.com/oauth/authorize
  ?app_id={app-id}
  &redirect_uri={redirect-uri}
  &scope=user_profile,user_media
  &response_type=code

但是,当我尝试使用来自文档的POST请求来请求access_token时:我收到错误400,消息为“您必须提供client_id”。但是,文档中没有关于client_id的信息,Instagram基本显示不提供client_id。

enter image description here

我在做什么错?你们有没有类似的问题?

facebook api instagram access-token instagram-api
1个回答
0
投票

我设法通过使用GuzzleHttp \ Client这样使我的工作正常。

步骤1。获取授权码$ code

步骤2。获取短暂的AccessToken

短期访问令牌仅在1个小时内有效。

$aAccessToken = $this->fetchAccessToken( $code );
$short_lived_access_token = $aAccessToken[ 'access_token' ];
$user_id                  = $aAccessToken[ 'user_id' ];

步骤3(可选)

如果您需要有效期为60天的长期令牌,则可以立即交换$ short_lived_access_token。

$aLongLivedTokenResult   =           = $this->GetLongLivedToken( $short_lived_access_token );
$long_lived_access_token = $aLongLivedTokenResult[ 'access_token' ];
$expires_in = $aLongLivedTokenResult[ 'expires_in' ];

long_lived_access_token和expires_in可以保存,当令牌在60天后过期时,您可以刷新它。

步骤4现在,您可以像这样获取用户媒体。

[请记住,long_lived_access_token已过期,在您抓取之前,您应实际检查令牌是否已过期,如果已过期,请交换令牌以获取新的令牌。然后令牌回收开始。

    $aQueryString = [
        'fields'       => 'id,media_url,permalink,timestamp,caption',
        'access_token' => $long_lived_access_token,

    ];
    $uri = 'https://graph.instagram.com/{$user_id}/media?' . http_build_query( $aQueryString ) );

//功能

因为fetchAccessToken函数使用POST方法,仅在标头上添加content-type = application / x-www-form-urlencode确实没有用。选项上的[[form_params为我成功了。

private function fetchAccessToken(){ $aOptions = [ 'app_id' => $this->provider->AppID, 'app_secret' => $this->provider->AppSecret, 'grant_type' => 'authorization_code', 'redirect_uri' => $this->provider->getRedirectUri(), 'code' => $accessCode, ]; $client = new Client( [ 'base_uri' => 'https://api.instagram.com', 'headers' => [ 'content-type' => 'application/x-www-form-urlencoded', ], ] ); $response = $client->request( 'POST', 'oauth/access_token', [ 'form_params' => $aOptions, ] ); return json_decode( $response->getBody(), true ); } private function GetLongLivedToken( $access_token ) { $aOptions = [ 'grant_type' => 'ig_exchange_token', 'client_secret' => $this->provider->AppSecret, 'access_token' => $access_token, ]; $response = new Client( [ 'base_uri' => 'https://graph.instagram.com', ] )->request( 'GET', 'access_token?' . http_build_query( $aOptions ) ); $stream = $response->getBody(); $contents = $stream->getContents(); return json_decode( $contents, true ); }
© www.soinside.com 2019 - 2024. All rights reserved.