Laravel 5.8中Pusher连接失败

4

我之前使用 Pusher 和 Laravel 5.4,没有出现问题,但现在我正在尝试使用 Laravel 5.8,却遇到以下错误。我已经尝试了我能想到的一切,甚至将 encrypted 改为 false。我三次检查了我的 Pusher 凭据。

Laravel 版本为 5.8

PHP 版本为 7.2.18

操作系统为 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']
        );

我的环境变量文件

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);
});

我有同样的问题。你修复了吗? - HVD
@HVD 不好意思,我从未完成那个项目,因为我找不到任何解决方案。如果我找到任何更新,我计划重新审视这个项目,我会确保通知你。如果你找到任何解决方案,请告诉我,我将非常感激。 - Yosef
问题已解决。你可以从这里链接下载cacert。然后打开php.ini文件,并将 ;curl.cainfo = 更改为 **curl.cainfo = "下载的 cacert 路径"**(curl.cainfo = "C:\wamp64\bin\php\php7.2.14\extras\ssl\cacert-2019-05-15.pem")。 - HVD
不行不行不行不行 - Harry Bosh
1个回答

0

如何在 Mac 上使用 Laravel Valet 和 Php7.2 或更高版本时修复连接 Pusher 失败的问题

NB:我决定写这篇文章,因为我认为没有人应该花费5个小时来解决这个问题,我已经做到了。

Server : Valet;

OS: Mac Mojave;

PHP Version: 7.2;

在我的情况下,将forceTLS设置为false有效,但我不喜欢这个解决方案。同时,添加:
'curl_options' => [
  CURLOPT_SSL_VERIFYHOST => 0,
  CURLOPT_SSL_VERIFYPEER => 0,
]

对于我的broadcasting.php文件,虽然它能够工作,但出于某种原因,我并不满意这个解决方案。

所以我决定通过从https://curl.haxx.se/ca/cacert.pem下载CA捆绑包,并将cacert.pem从下载文件夹移动到/usr/local/etc/openssl@1.1/certs(在我的情况下,我只是使用homebrew安装了openssl1.1,因为我正在尝试各种在线找到的方法来使其工作,但现在我知道我不需要openssl1.1,您可以使用您已经拥有的openssl文件夹),因此cacert文件的完整路径变为/usr/local/etc/openssl@1.1/certs/cacert.pem

打开php.ini ——————---

从终端输入php --ini以查找加载的php.ini的路径(在您选择的编辑器中打开它;我有时使用nano) 重要提示:自PHP 7.2(Win 64)起,即使设置了此指令,它也不会显示在phpinfo()中。(相比之下,如果将openssl.cafile指令设置为完全相同的路径,则会显示该指令)。

现在,在您的php.ini中设置以下内容:(注意:替换路径以指示这些文件在您的系统上的位置)

openssl.cafile = "/usr/local/etc/openssl@1.1/certs/cacert.pem"

openssl.capath = "/usr/local/etc/openssl@1.1/certs"

请注意:因为我使用的是php7.2,所以我不需要将curl.cainfo设置为任何值;最初,我花了很多时间尝试使用curl.info方法,但对我没有用,所以在我的最终配置中,我通过在其前面放置分号(;curl.cainfo ="/usr/local/etc/openssl@1.1/certs/cacert.pem")来注释它。

完成后,您应该运行valet restart,这将重新启动一些valet服务,但我意识到即使valet重启,当我执行phpinfo()时,我的新php.ini更改也不会反映出来。

最后,您应该通过输入brew services restart php72来重新启动php(注意:我通过homebrew安装了php,因此如果您没有安装,则必须以不同的方式重新启动php)。

希望这可以帮助您。即使它不能完全解决您的问题,它肯定会给您一些想法,就像我从一个页面到另一个页面利用其他人的小想法一样,最终找到了解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接