FaceBookRequest->execute() 使我的 ajax 调用 return 状态为 500

FaceBookRequest->execute() makes my ajax call return with status 500

我正在尝试制作一个 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(); 时,它 returns 到状态为 500 的 ajax 调用;没有评论。当我通过注释停止此行之前的代码时,它 returns 到状态为 200 的 ajax 调用。因此,我相信有一些东西导致此行无法按预期工作。我尝试像在某些示例中那样将名称 $faceb 更改为 $session,但事实并非如此。使用 Facebook = new Facebook(array) 对象而不是方法 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文件中。在要求中,我添加了 "ext-mbstring": "*"。我仍然收到带有不同日志的错误 500:

PHP 致命错误:未捕获异常 'Facebook\FacebookAuthorizationException' 消息 'The access token could not be decrypted'

感谢您指出有关该问题的更多详细信息可能在服务器日志中:默认情况下 php 不存在 mb_substr,我们必须告诉 php找到它。

在第 254 行 /app/vendor/facebook/php-sdk-v4/src/Facebook/HttpClients/FacebookCurlHttpClient.‌ php 中调用未定义的函数 Facebook\HttpClients\mb_substr()

那里可以找到答案Facebook PHP SDK error mb_substr

(然后我在调整代码以寻找解决方案时添加了一些错误,例如删除爆炸中的 2)