我正在尝试创建一个php脚本,它从Facebook应用程序接收ajax调用,以检查用户发送的id是否是他自己的。我在下一段代码中获得了用户ID和访问令牌。函数validateMe()将id,字母z作为分隔符和访问令牌放在一起,然后进行ajax调用
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
monLogin.uid=response.authResponse.userID;
monLogin.token=response.authResponse.accessToken;
validateMe();
}
}
接下来接收ajax调用的php脚本。当$ response = request-> execute()行时,它返回状态为500的ajax调用;没有评论。当我通过注释来停止此行之前的代码时,它将返回状态为200的ajax调用。因此,我相信有一些东西会使该行无法正常工作。我尝试将名称$ faceb更改为$ session,如某些示例中所示,但事实并非如此。使用Facebook =新的Facebook(数组)对象而不是方法setDefaultApplication也不会这样做,因为Facebook对象已被弃用。
<?php
session_start();
include 'vendor/autoload.php';
use Facebook\FacebookSession;
use Facebook\GraphObject;
use Facebook\GraphUser;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
if (isset($GLOBALS['HTTP_RAW_POST_DATA'])){
$appid='123456'; //not the true appid
$psswd='123456abcdef'; //not the true password
FacebookSession::setDefaultApplication($appid, $psswd);
$infosJoueur = $GLOBALS['HTTP_RAW_POST_DATA'];
$arrayData = explode('z', $infosJoueur, 2);
// arrayData[1] is the accessToken from the javascript
$session = new FacebookSession($arrayData[1]);
$request = new FacebookRequest($session, 'GET', '/me');
$response = $request->execute();
/*$graph = $response->getGraphObject(GraphUser::className());
$id = $graph->getId();
if (($arryData[0] = $id)) {
echo 'yes';
$_SESSION['uid']=$id;
}
else {echo 'no';}*/
}
?>
在评论中提出,我检查了服务器的日志,发现mbstring方法不存在,因为我必须将它添加到composer.json文件中。在require中,我添加了“ext-mbstring”:“*”。我仍然得到一个错误500与不同的日志:
PHP致命错误:未捕获的异常'Facebook \ FacebookAuthorizationException',消息'访问令牌无法解密'
答案 0 :(得分:0)
感谢您指出有关问题的更多详细信息可能在服务器日志中:mb_substr默认情况下不存在于php中,我们必须告诉php才能找到它。
在第254行的/app/vendor/facebook/php-sdk-v4/src/Facebook/HttpClients/FacebookCurlHttpClient.php中调用未定义的函数Facebook \ HttpClients \ mb_substr()
答案可以在Facebook PHP SDK error mb_substr
找到(然后我在调整代码时添加了一些错误,以寻找解决方案,例如删除爆炸中的2)