刷新Instagram长期访问令牌在浏览器(http)中有效,但在PHP(curl)中无效



希望您能提供帮助。

我正在尝试实现Instagram的基本显示API,但不幸的是,我遇到了生成长期访问令牌或使用PHP/cURL刷新现有长期令牌的问题。我似乎不是唯一一个有这种或类似问题的人。

我遵循了Facebooks入门指南(位于此处(,并能够生成一个短暂的访问令牌,但这是我在PHP中所能达到的。奇怪的是,如果我直接通过HTTP调用任何端点,例如在浏览器中,调用会完美地工作,我可以从短的访问令牌中获得一个长期访问令牌,也可以刷新现有的长期访问令牌。但它只能在浏览器中工作,或者在终端中使用cURL。

似乎graph.instagram.com要么屏蔽了我的网络服务器IP,要么不喜欢众多可能的cURL选项之一。我试过很多不同的组合,但都没用。我甚至尝试过从不同的web服务器运行PHP脚本(不同的主机、不同的位置和IP,所以IP被阻止似乎不是这样(,但仍然没有成功。

我从graph.instagram.com收到的错误消息是:
IGApiException:无效的OAuth 2.0访问令牌(错误代码190(

我在这件事上花的时间远远超过了可行的时间,我完全受够了。对于为什么一种方法有效而另一种方法无效,必须有一个简单的解释。把我逼疯了。

我错过了什么?请帮忙。。。重申一下,调用以下URL(使用适当的短期/长期访问令牌(在浏览器/终端中可以很好地工作,但在PHP cURL中不行。为什么?我该如何解决这个问题?

生成长期访问令牌:
https://graph.instagram.com/access_token?grant_type=ig_exchange_token&client_secret={app-secret}&access_token={short-lived-access-token}

刷新:
https://graph.instagram.com/refresh_access_token?grant_type=ig_refresh_token&access_token={long-lived token}

注意:
据我所知,我已经正确设置了应用程序等。我假设如果我没有,我一开始就无法生成访问代码,也无法生成短期访问令牌,更不用说刷新现有的长期访问令牌了。

抱怨:
我讨厌Facebook。说真的,没有什么比成为叹息更直接、更复杂的了

哇,花了几天时间在这个问题上,终于发布了这个问题,只花了40分钟,我就终于找到了解决方案。

对于遇到类似问题的人来说,在我的案例中,问题是http_build_query(我用来设置cURL GET参数(,同时两个web服务器都设置了以下php.ini设置:
arg_separator.output = "&"

其中默认设置通常为:
arg_separator.output = "&"

要解决此问题,请将http_build_query更改为使用&而不是&,如下所示:
http_build_query($yourParams, null, '&');
或者简单地将更改后的php.ini设置恢复为原始设置(风险自负(

相关内容

最新更新