无法从Facebook获取访问令牌。收到一封信,信上写着;验证验证码时出错“;
我正在使用java,演示应用程序的目的很简单:更新用户状态。 我遵循了第页的服务器端流程。我得到了auth对话框,facebook引导到回调url,我在我的回调页面中得到了代码。然后,当我尝试生成访问令牌时失败了 在指南页面中,它表示可以使用以下url生成访问令牌:无法从Facebook获取访问令牌。收到一封信,信上写着;验证验证码时出错“;,facebook,token,Facebook,Token,我正在使用java,演示应用程序的目的很简单:更新用户状态。 我遵循了第页的服务器端流程。我得到了auth对话框,facebook引导到回调url,我在我的回调页面中得到了代码。然后,当我尝试生成访问令牌时失败了 在指南页面中,它表示可以使用以下url生成访问令牌: https://graph.facebook.com/oauth/access_token? client_id=YOUR_APP_ID&redirect_uri=YOUR_URL& client
https://graph.facebook.com/oauth/access_token?
client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&
client_secret=YOUR_APP_SECRET&code=THE_CODE_FROM_ABOVE
但在我的环境中发生的是,我收到了以下错误消息:
{
"error": {
"type": "OAuthException",
"message": "Error validating verification code."
}
}
我确信每个参数都是正确的,因为如果我更改client\u id值或client\u secret参数,我将收到不同的错误消息。代码参数是我从facebook回调中得到的。所以这应该是正确的,对吗?我真的不知道问题出在哪里
你知道吗?我被困在这里了…我最近处理了这个问题:所有的东西都匹配,但由于OAutheException失败了。使它起作用的是将重定向uri(在流的两个请求中)更改为: 到
即,添加尾部斜杠。然后它成功了。愚蠢和愚蠢,但你说对了。是的,后面的斜杠对我也有用,谢谢 出于调试目的,我发现完全使用fb在开发者页面上提供的代码很有帮助: 一旦你开始工作,你可以修改它以适应你自己的代码
我不确定,但您也可以在应用程序编辑屏幕上检查“站点URL”和“站点域”设置是否正确,因为根据文档,重定向uri必须在同一个域中。(这与画布/选项卡页面URL不同。)我们也从中获得了一些乐趣 在我们的例子中,URL中的尾随斜杠已经存在,所以我尝试了我们在中使用的令牌,并进行了验证,所以看起来FB甚至没有在请求中看到令牌 经过一些调查后,我发现了头部撞击-我们只使用HTTP头进行GET,而不使用查询字符串,因此FB Littley根本看不到令牌 寓意似乎是,如果您可以在FB调试工具中验证令牌,那么您的请求中可能存在一些/某些/错误- 可能是缺少“/”或与应用程序定义的URL不匹配(域不匹配是另一个错误)。我还没有尝试过为HTTPS定义App/Web Url,并使用HTTP进行请求,但我怀疑这也会有问题 或者像在我们的例子中一样,请求方法可能是不正确的-使用头GET或post都抛出2500,您必须使用Querystring执行GET
希望有帮助 我也遇到了同样的问题,并尝试了上述建议。他们帮了我的忙,但我的问题是我的redir URL有一个查询参数,Facebook对此并不感冒。因此,这个故事的寓意是,您发送给交换令牌的redir url必须与原始redir url相同,并且不能有查询参数。我也遇到了同样的问题。这是一个URL差异,但与其他发布的不同,我的是HTTP和HTTPS之间的差异 我们有BigIP处理HTTPS请求并转发到HTTP Apache服务器。当BaseFacebook的getCurrentUrl()函数被调用时,它检测到HTTP,而不是原始HTTPS。我对该函数进行了如下修改: 受保护的函数getCurrentUrl(){ 如果((isset($_服务器['HTTPS'])&($_服务器['HTTPS']=='on'|$|$_服务器['HTTPS']==1))|| (isset($_服务器['HTTP_X_转发的协议]])和&$_服务器['HTTP_X_转发的协议]='https')| (isset($\u服务器['HTTP\u PSEUDOSSL'])和&$\u服务器['HTTP\u PSEUDOSSL']=='true')){ $protocol='https://'; } 否则{ $protocol='http://'; } ...
此版本支持
HTTP\u PSEUDOSSL
密钥。我希望这对其他人有所帮助。我也遇到了url问题,但解决方案不同。我将返回的url传递给服务器,并使用该值中的code
值来请求访问令牌。但是,根据3.1.1版本中的一些注释JavaScript SDK将代码
与空字符串的重定向uri
相关联,即”
:
//JSSDK将重定向uri为“”的代码放入
如果(数组\密钥\存在('code',$signed\请求)){
$code=$signed_请求['code'];
$access\u token=$this->getAccessTokenFromCode($code,”);
if($access\u令牌){
//等
}
}
在我将自己的服务器端代码更改为使用
“
的重定向uri
后,对访问令牌的请求起了作用。在我的情况下,我的代码在IE上不起作用。
问题是这样的
$user_id = $facebook->getUser();
if ($user_id)
因为getUser函数总是以某种方式返回0,所以该条件始终为真。然后,他从无效令牌生成了该错误。
好吧,我只是这样说:
if ($user_id>0)
愚蠢的东西…我自己解决了这个问题…关键问题是关于“URL”。代码生成URL中的回调“重定向uri”也应该与“重定向uri”相同在代币生成url中…绝对无价。非常感谢。@DeepNightTwo非常感谢,这非常完美。这也帮助了我。可笑的是,它不在文档中,我认为它必须是不同的东西,才能在该步骤后重定向到…我使用相同的uri,但它不起作用。顺便说一句,我正在使用重定向url和https,有问题吗?谢谢!我一直在努力解决这个问题。这是一个多么愚蠢的问题。你在哪里更改了重定向uri?我在Facebook上的应用程序页面上没有看到这个设置。非常感谢。我已经在办公桌上使劲敲了一会儿,试图解决这个问题。这个答案确实为我节省了30分钟的时间e、 可怕的弗鲁斯特