我在Laravel 5.4中使用了Pusher,并且没有问题,但是现在我正在尝试使用laravel 5.8,但出现以下错误。我已经尽力想尽一切办法,甚至以防万一将encrypted
更改为false
。我对我的推送凭证进行了三重检查。
Laravel版本5.8
PHP版本7.2.18
OS OSX
我得到的错误
$response = $this->pusher->trigger(
$this->formatChannels($channels), $event, $payload, $socket, true
);
if ((is_array($response) && $response['status'] >= 200 && $response['status'] <= 299)
|| $response === true) {
return;
}
throw new BroadcastException(
is_bool($response) ? 'Failed to connect to Pusher.' : $response['body']
);
我的ENV文件
BROADCAST_DRIVER=pusher
PUSHER_APP_ID=XXXXXX
PUSHER_APP_KEY=XXXXXXXXXXXXXXXXXXXX
PUSHER_APP_SECRET=XXXXXXXXXXXXXXXXXXXX
PUSHER_APP_CLUSTER=us2
我的事件文件
<?php
namespace App\Events;
use App\ChatRoomMessage;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class NewMessage implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* Create a new event instance.
*
* @param ChatRoomMessage $chatRoomMessage
* @return void
*/
public function __construct()
{
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return new Channel('message');
}
}
我的路线
Route::get('/broadcast', function() {
event(new \App\Events\NewMessage);
});
在Mac上将Laravel Valet与Php7.2或更高版本结合使用时,如何修复无法连接到Pusher的问题————————————————————————————— ---
NB:我之所以决定写这篇文章,是因为我认为其他人都不应该花5个小时来解决这个问题,因为我已经做到了。
服务器:代客操作系统:Mac MojavePHP版本:7.2
就我而言,将forceTLS设置为false是可行的,但是我不喜欢这种解决方案。还添加:
'curl_options' => [
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => 0,
]
对我的broadcast.php文件起作用,但是由于某种原因,我也对这种解决方案不服气。
因此,我决定通过从https://curl.haxx.se/ca/cacert.pem下载CA捆绑包使工作正常,并将cacert.pem从下载文件夹移至/usr/local/etc/[email protected]/certs(在我的情况下,我安装了openssl1.1使用homebrew只是因为我尝试了各种在线尝试才能使它起作用,但是现在我知道我不需要openssl1.1,可以使用已经拥有的openssl文件夹),因此cacert文件的完整路径变为/ usr /local/etc/[email protected]/certs/cacert.pem打开php.ini————————--->
[从您的终端输入php --ini以找到加载的php.ini的路径(在您选择的编辑器中打开该路径;有时我使用nano)nano重要说明:自PHP 7.2(Win 64)起,此指令将不显示在phpinfo()中,即使已设置。 (相比之下,如果将openssl.cafile指令设置为完全相同的路径,则会显示该指令。)>
所以现在在您的php.ini中将以下内容设置为:(注意:替换路径以指示可以在系统上找到这些文件的位置)openssl.cafile =“ /usr/local/etc/[email protected]/certs/ cacert.pem'openssl.capath =“ /usr/local/etc/[email protected]/certs”注意:因为我使用的是php7.2,所以我不必将curl.cainfo设置为任何值;最初,我花了很多时间尝试使用curl.info方法,但这种方法对我不起作用,因此在我的最终配置中,我在其前面加了分号(; curl.cainfo =“ / usr / local / etc /[email protected]/certs/cacert.pem”)
此后您应该运行代客重启,这将重启一些代客服务,但是我意识到即使在代客重启后,我在执行phpinfo()时新的php.ini更改也不会反映出来。
最后,您应该通过进入Brew服务重新启动php72来重新启动php(注意:我是通过自制程序安装的php,以防万一您没有,必须以不同的方式重新启动php)
希望这会有所帮助。即使它不能完全解决您的问题,也一定会给您一些想法,就像我在构想我的解决方案时利用别人的一点点想法从一页到另一页一样。