Php Facebook API-持久数据中缺少必需的参数“状态”
我知道这个问题是另一个问题的重复,但是在搜索Google和Stack Overflow之后,我仍然没有找到解决方案 我有一些代码可以调用Facebook API来获取登录URL。然而,我是以一种间接的方式来做的。基本上,以下是服务器流程: 客户端选择使用FB登录应用程序 客户端网站A向中间网站B发送HTTP GET请求 网站B返回网站B上的登录URL,其中包括两个回调:使用FB->getLoginUrl生成的FB登录URL和对网站a的回调。 网站A重定向到网站B上的登录页面,该页面重定向到FB上的登录页面 用户登录并授予FB网站上的应用程序权限 FB重定向到网站B上的回调,该网站获取访问代码。 网站B重定向到网站A回调,将访问代码作为$\u GET变量传递 网站A根据自己的意愿使用访问令牌 所以非常复杂,我只包含了可能使回答这个问题和理解PHP代码更容易的流程 PHP 网站代码:Php Facebook API-持久数据中缺少必需的参数“状态”,php,facebook,facebook-graph-api,Php,Facebook,Facebook Graph Api,我知道这个问题是另一个问题的重复,但是在搜索Google和Stack Overflow之后,我仍然没有找到解决方案 我有一些代码可以调用Facebook API来获取登录URL。然而,我是以一种间接的方式来做的。基本上,以下是服务器流程: 客户端选择使用FB登录应用程序 客户端网站A向中间网站B发送HTTP GET请求 网站B返回网站B上的登录URL,其中包括两个回调:使用FB->getLoginUrl生成的FB登录URL和对网站a的回调。 网站A重定向到网站B上的登录页面,该页面重定向到FB上
if (!isset($_GET['code'])) {
$callback = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$request_url = "http://embocorp.com/factory/api.php/facebook/login?callback=".$callback;
header("Location: ".implode(json_decode(callAPI("GET", $request_url), true)['body']['data']));
} else {
echo $_GET['code'];
}
网站B代码:
api.php
login.php
if (!session_id()) {
session_start();
}
if (isset($_GET['fb'])) {
$redirect = str_replace("fb=", "", $_SERVER['QUERY_STRING']);
header("Location: ".$redirect);
} else {
echo "ni";
}
再次感谢你的帮助,这已经让我疯狂了72个小时了 只需添加
if (!session_id()) {
session_start();
}
在启动这两个文件。您在哪里执行将代码交换为访问令牌的步骤?由于您在域B下创建了登录URL,因此您也必须在域B上创建登录URL,由于状态值存储在域B的会话中。我在域B上执行此操作。Login.php转到facebook,然后返回api.php以交换访问令牌的代码。然后检查您在域B上的会话是否正常工作-您在之前和之后获得相同的会话id吗?是的,我已经测试过了。会话id,甚至FLBH_状态,我认为它的调用前后都是一样的。如果你说你正在处理域B上登录流的所有相关部分,那么为什么要在域a上的脚本中检查GET参数代码呢,如果答案中包含对代码意图的解释,以及为什么在不介绍其他代码的情况下解决了问题,那么答案会更有帮助。@Peter很抱歉,下面是我如何找到解决方案的,我发现facebook php graph sdk正在使用会话。我试着开始,结果成功了
if (!session_id()) {
session_start();
}