Php 发出POST请求时出现推送器错误的Laravel WebSocket

Php 发出POST请求时出现推送器错误的Laravel WebSocket,php,laravel,laravel-7,pusher,Php,Laravel,Laravel 7,Pusher,我正在尝试将web套接字集成到我的laravel项目中。我做了所有的步骤 composer需要pusher/pusher-php服务器 /Users/alpha/Sites/jdoe/config/broadcasting.php https://dashboard.pusher.com/apps/888 app_id=“888” key=“***” secret=“333” cluster=“us2” | v 广播驱动器=推进器 推进器应用程序ID=888 推动器应用键=*** 推送器应用程

我正在尝试将web套接字集成到我的laravel项目中。我做了所有的步骤


composer需要pusher/pusher-php服务器
/Users/alpha/Sites/jdoe/config/broadcasting.php
https://dashboard.pusher.com/apps/888
app_id=“888”
key=“***”
secret=“333”
cluster=“us2”
|
v
广播驱动器=推进器
推进器应用程序ID=888
推动器应用键=***
推送器应用程序机密=333
推进器应用程序集群=us2
.env.example+.env
npm安装--保存laravel echo pusher js
跑步表
---------------------------------------------------
php artisan make:事件日志事件

所以对于这个问题,事实上这是拉威尔的一个问题,现在已经解决了 使用(laravel 8.29.0)或更高版本。
因此,pusher http php库v5.0.1和Laravel v8.29.0将非常适合您

另一个解决方案:是在composer.json上将pusher降级为4.1版,该版本似乎可以与较旧的laravel版本(早于8.29.0)配合使用

如果要解决当前安装的问题,请执行以下操作:

问题是,至少在laravel 8上,对触发器函数的调用没有发送正确的参数,因此在
pusher-broadcaster.php
pusher-php-server/pusher.php
中,有两个对触发器函数的调用,分别是:

public function trigger($channels, $event, $data, $params = array(), $already_encoded = false)

您只需更改
推送器

1-更改(第496行)。

$data_encoded = $this->crypto->encrypt_payload($channels[0], $already_encoded && !is_array( $data) ? $data : json_encode($data));
$data_encoded = $already_encoded && !is_array( $data) ? $data : json_encode($data);
致:

2-更改(第499行)。

$data_encoded = $this->crypto->encrypt_payload($channels[0], $already_encoded && !is_array( $data) ? $data : json_encode($data));
$data_encoded = $already_encoded && !is_array( $data) ? $data : json_encode($data);
致:

3-更改(第518行)

致:

4-更改(第542行)

致:

这会让你感觉很好

注意:正如我所说,它在Laravel的v8.29.0中得到了解决
注意:或者您可以使用
composer require-pusher/pusher-php服务器^4.1

注意:
主要问题是在这种情况下,
$param
null
,它没有检查此值是否为
array()
,因此当代码尝试将
array()
null
合并时

资源:

$data_encoded = $already_encoded && !is_array( $data) ? $data : json_encode($data);
$all_params = array_merge($post_params, $params);
$all_params = array_merge($post_params, is_array($params) ? $params:[]);
return $result;
return $response;