Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Facebook API-持久数据中缺少必需的参数“状态”_Php_Facebook_Facebook Graph Api - Fatal编程技术网

Php Facebook API-持久数据中缺少必需的参数“状态”

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上

我知道这个问题是另一个问题的重复,但是在搜索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 网站代码:

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();
}