希望您能提供帮助。
我正在尝试实现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设置恢复为原始设置(风险自负(