You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Instagram Basic Display API无法获取测试用户资料求助

Instagram Basic Display API 获取测试用户username报错问题

已完成OAuth授权流程、获取access token及长效access token,但调用获取username的API接口时返回错误,且返回的Instagram ID以科学计数法格式呈现(包含.和+符号)。

错误返回信息

{"error":{"message":"Unsupported get request. Object with ID '1.7841411138E+16' does not exist, cannot be loaded due to missing permissions, or does not support this operation","type":"IGApiException","code":100,"error_subcode":33,"fbtrace_id":"APM8hPTe1xn1OfjF9GLfHnm"}}

相关代码

// Request 授权跳转函数
public function oAuthBasic() {
    $instagramBasic = new InstagramBasicDisplay([
        'appId' => Config::get('instagram_basic.app_id'),
        'appSecret' => Config::get('instagram_basic.app_secret'),
        'redirectUri' => Config::get('instagram_basic.redirect_uri')
    ]);

    session()->forget('instagramErrorMessage');
    $faceBookLoginUrl = $instagramBasic->getLoginUrl(['user_profile', 'user_media']);
    return response()->json(['redirectUrl' => $faceBookLoginUrl]);
}

// Callback 回调处理函数
public function linkBasic(InstagramLinkRequest $instagramRequest) {
    if (isset($_GET['code'])) {
        // 获取OAuth回调code
        $code = $_GET['code'];
        $ig_atu = "https://api.instagram.com/oauth/access_token";
        $ig_data = [];
        $ig_data['client_id'] = Config::get('instagram_basic.app_id');
        $ig_data['client_secret'] = Config::get('instagram_basic.app_secret');
        $ig_data['grant_type'] = 'authorization_code';
        $ig_data['redirect_uri'] = Config::get('instagram_basic.redirect_uri');
        $ig_data['code'] = $code;

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $ig_atu);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($ig_data));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $ig_auth_data = curl_exec($ch);
        curl_close($ch);
        $ig_auth_data = json_decode($ig_auth_data, true);

        $access_token = $ig_auth_data['access_token'];
        $user_id = $ig_auth_data['user_id'];
        
        try{
            // 换取长效access token
            $url = 'https://graph.instagram.com/access_token/?';
            $data = array(
                        'client_secret' => Config::get('instagram_basic.app_secret'),
                        'access_token'  => $access_token,
                        'grant_type'    => 'ig_exchange_token'
            );
            
            $string = http_build_query($data);
            $ch = curl_init($url.$string);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            $resultRow = curl_exec($ch);
            $result = json_decode($resultRow);
            $long_lived_access_token = $result->access_token;
            curl_close($ch);
            
             // 获取用户profile(报错环节)
             $url = 'https://graph.instagram.com/'.$user_id.'/?';
             $data = array('access_token'  => $long_lived_access_token, 'fields'=> 'username');
             $string = http_build_query($data);
             $ch = curl_init($url.$string);
             curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
             $result = curl_exec($ch);
             curl_close($ch);
             dd($result);
        }catch (Exception $e){
            dd($e->getMessage());
        }
    }
}

问题原因及解决方法

问题原因

user_id被解析成了科学计数法格式,而Instagram API要求用户ID必须是完整的纯数字字符串,这种格式会被API识别为无效ID,导致报错。

解决方法

有两种方式可以处理:

  1. 转换科学计数法为纯数字字符串:
    在获取user_id的代码处修改:
// 将科学计数法格式的user_id转为纯数字字符串
$user_id = rtrim(sprintf('%.0f', $ig_auth_data['user_id']), '.');
  1. json_decode时保留大整数为字符串:
    修改json_decode的调用,添加JSON_BIGINT_AS_STRING选项,确保大数值ID以原始字符串形式保留:
$ig_auth_data = json_decode($ig_auth_data, true, 512, JSON_BIGINT_AS_STRING);

处理后user_id会是完整的纯数字字符串,再调用获取用户profile的API即可正常返回username。

内容的提问来源于stack exchange,提问作者TharakaNirmana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 15:20:33