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

Instagram API授权报错求助:OAuthException 400(Invalid grant_type)

解决Instagram OAuth获取access_token时的"Invalid grant_type"错误

我帮你排查了下这个问题,根源很明确——你的POST请求参数里藏了多余的空格,导致Instagram无法正确识别grant_type参数,这才抛出了400的OAuthException错误。

问题出在哪?

看你手动拼接的POST字段:"grant_type=authorization_code &client_id=123456 &...",每个参数值后面都带了空格(比如authorization_code 、123456 ),Instagram收到的grant_type值是带尾部空格的authorization_code ,这完全不符合它的要求,自然会返回“Invalid grant_type”。

修正后的代码

我给你调整了代码,用更可靠的方式构建POST参数,同时补上了一些curl的必要配置:

<?php
$address = "https://api.instagram.com/oauth/access_token";
$c = curl_init();
curl_setopt($c, CURLOPT_URL, $address);
curl_setopt($c, CURLOPT_POST, TRUE);

// 用http_build_query自动处理参数拼接和编码,避免手动拼接的错误
$postParams = [
    'grant_type' => 'authorization_code',
    'client_id' => '123456',
    'client_secret' => '12346',
    'redirect_uri' => 'http://site.ir?GO=instagram',
    'code' => '1234556'
];
curl_setopt($c, CURLOPT_POSTFIELDS, http_build_query($postParams));

// 让curl返回结果而不是直接输出,方便后续处理
curl_setopt($c, CURLOPT_RETURNTRANSFER, TRUE);
// 本地环境如果没配置SSL证书的话可以临时禁用验证,生产环境建议开启并配置CA证书
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, FALSE);

$send = curl_exec($c);
// 用完curl记得关闭资源
curl_close($c);

// 打印结果看看处理情况
var_dump($send);
?>

额外要注意的点

  • 永远推荐用http_build_query()构建POST参数,它会自动处理URL编码、参数分隔,彻底避免手动拼接时的空格、符号错误。
  • 你的redirect_uri必须和Instagram开发者后台注册应用时填写的完全一致,哪怕是多了个空格、大小写不一样,都会导致授权失败。
  • 确认code是用户刚授权返回的有效临时码,这个码只能用一次,过期后得重新引导用户走授权流程。
  • 生产环境里别一直禁用CURLOPT_SSL_VERIFYPEER,最好配置好CA证书,保证请求的安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:33:30