我的代码存储库放在开发框上,当我将其移动到生产框时,它无法完成FB调用。 我的错误是:
客户端中的错误异常.php第 126 行:参数 3 传递给 GuzzleHttp''Client::request() 必须是数组类型,给定字符串, 被叫入 /var/www/mypopshare.com/vendor/guzzlehttp/guzzle/src/Client.php on 第 87 行并定义
我本节的代码是:
return substr($method, -5) === 'Async'
? $this->requestAsync(substr($method, 0, -5), $uri, $opts)
: $this->request($method, $uri, $opts);
两台服务器上的库都是通过作曲家安装的:`
"require": {
"php": ">=5.5.9",
"laravel/framework": "5.2.*",
"illuminate/html": "^5.0",
"laravelcollective/html": "^5.2",
"league/flysystem-aws-s3-v3": "~1.0",
"webpatser/laravel-uuid": "^2.0",
"intervention/image": "^2.3",
"doctrine/dbal": "^2.5",
"guzzlehttp/guzzle": "^6.1",
"sammyk/laravel-facebook-sdk": "^3.3"
},
'
这在两个环境中是相同的,并且已经完成了作曲家安装以确保它们在那里。
该调用是通过 sammk/laravel-facebook-sdk 包从 Facebook PHP SDK 进行的。 我唯一的猜测是服务器上的其他一些配置差异,但不确定在哪里检查。 我没有配置生产服务器。 任何建议不胜感激。
供参考 - 我找到了一个与当前答案类似的解决方案。我直接使用Facebook SDK,没有SammyK的包装器,也没有明确设置http_client_handler。
事实证明,如果未安装 curl 扩展,Facebook SDK 会回退到 Guzzle 上,但使用 Guzzle 5 语法。我安装了 Guzzle 6,所以收到此错误,因为参数已更改。
对我来说,修复是安装 php7.0-curl。在 Ubuntu 14.04 LTS 上,这是:
sudo apt-get install php7.0-curl
然后,Facebook SDK使用了curl,它没有收到此错误,我不必更新任何现有代码来显式设置http_client_handler。
这适用于安装了 php-curl 扩展并在没有安装时在 prod 上失败的开发。您可以查看已安装扩展的列表以确认:
php -m
我在 Ubuntu 16.04 和 php7.0 上遇到了同样的问题。 如果您的项目中不需要 Guzzle,您可以考虑切换facebook_config http_client_handler选项sammk/laravel-facebook-SDK 包配置文件到 curl。
'facebook_config' => [
'app_id' => env('FACEBOOK_APP_ID'),
'app_secret' => env('FACEBOOK_APP_SECRET'),
'default_graph_version' => 'v2.6',
//'enable_beta_mode' => true,
'http_client_handler' => 'curl',
],