我已经阅读了1000多个关于redirect_uri在两次调用OAuth中以获取用户令牌的方式相同的博客,但是100%的时间,无论我如何格式化URL,它都失败了:
{
"error": {
"message": "Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request",
"type": "OAuthException",
"code": 100
}
}
我一丝不苟地确保两个电话中的网址完全相同。我的网址必须有?在它,我尝试用%3f替换它,但这没有帮助。必须有其他可能导致此错误的东西,我需要了解可能是什么?
在过去的一个月里,这对我来说似乎有所突破。我们在7月下旬做了一个节目,事情很好(因为它是一个不同的服务器,因为该节目有不同的基本URL)。可能是URL是这种格式:
someprestuff.morestuff.mainurl.com?prm=value
Facebook的URL有太多“部分”可以接受吗?
我正在寻找其他寻找的东西。
答案 0 :(得分:7)
网址应该相同,必须进行转义。在网址中,它必须如下所示:
http%3A//someprestuff.morestuff.mainurl.com%3Fprm%3Dvalue
答案 1 :(得分:2)
Jim上面的评论有效,但澄清一下,这是一个针对我们修正它的正斜线。
答案 2 :(得分:1)
今天遇到同样的问题,问题结果是redirect_uri使用了http:// URL Schema,Facebook只接受https://
答案 3 :(得分:0)
我刚刚在负载均衡器后面的服务器上完成了此问题的跟踪。事实证明,虽然负载均衡器正在传递HTTP_X_FORWARDED_PROTO
标题,但不知何故在V3 PHP Facebook库,PHP和Apache之间,标题未被识别。
以下是图书馆的相关代码:
protected function getHttpProtocol() {
if ($this->trustForwarded && isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
return 'https';
}
return 'http';
}
/*apache + variants specific way of checking for https*/
if (isset($_SERVER['HTTPS']) &&
($_SERVER['HTTPS'] === 'on' || $_SERVER['HTTPS'] == 1)) {
return 'https';
}
/*nginx way of checking for https*/
if (isset($_SERVER['SERVER_PORT']) &&
($_SERVER['SERVER_PORT'] === '443')) {
return 'https';
}
return 'http';
}
正如您所看到的,这里有一些场景,因此您必须确保无论适用于何种情况,都要正确配置此代码块才能成功。
最有可能的解决方案是在你的facebook配置数组中将trustForwarded
设置为true
。