wesmiler 1 éve
szülő
commit
acc0ba7eab

+ 2 - 2
.env

@@ -4,7 +4,7 @@ LOCAL_LANG=zh-cn
 APP_KEY=base64:5c43a8wcR8LOQtT3fxxtJ/Y4Hf4y4KdLsGF5Gi6v7SY=
 APP_DEBUG=true
 API_RATE_LIMIT=300
-APP_URL=http://test.com
+APP_URL=https://xl.mp.dongerkj.com/
 WEB_URL=https://xl.mp.dongerkj.com/h5/
 LOG_CHANNEL=stack
 
@@ -39,7 +39,7 @@ REDIS_PORT=16379
 REDIS_DB=1
 
 #socket
-SOCKET_PORT=6520
+SOCKET_PORT=6530
 
 
 MAIL_DRIVER=smtp

+ 101 - 154
app/Console/Commands/SocketServer.php

@@ -3,10 +3,14 @@
 namespace App\Console\Commands;
 
 use App\Models\ImChatModel;
+use App\Models\LiveChatModel;
+use App\Models\LiveModel;
+use App\Models\MessageModel;
 use App\Services\Api\ImChatService;
 use App\Services\Api\MemberService;
 use App\Services\Api\MessageService;
 use App\Services\ConfigService;
+use App\Services\LiveService;
 use App\Services\RedisService;
 use Illuminate\Console\Command;
 use Monolog\Logger;
@@ -66,7 +70,7 @@ class SocketServer extends Command
     {
         try {
             //创建websocket服务器对象,监听0.0.0.0:7104端口
-            $this->ws = new \Swoole\WebSocket\Server("0.0.0.0", env('SOCKET_PORT', '6620'));
+            $this->ws = new \Swoole\WebSocket\Server("0.0.0.0", env('SOCKET_PORT', '6630'));
 
             //监听WebSocket连接打开事件
             $this->ws->on('open', [$this, 'open']);
@@ -120,15 +124,15 @@ class SocketServer extends Command
         $data = $frame->data ? json_decode($frame->data, true) : [];
         $fromUid = isset($data['from_user_id']) ? intval($data['from_user_id']) : 0;
         $op = isset($data['op']) ? $data['op'] : '';
-        //$this->sendMsg($frame->fd, $data);
+        $scene = isset($data['scene']) && $data['scene'] ? $data['scene'] : 'chat';
         if (!in_array($op,['video_connect','video']) && !$this->checkSign($data)) {
-            $this->info("【{$date}】Socket:签名失败【{$frameId}-{$fromUid}】");
+            $this->info("【{$scene} {$date}】Socket:签名失败【{$frameId}-{$fromUid}】");
             return false;
         }
 
         $uuid = isset($data['uuid']) ? $data['uuid'] : uniqid();
         $toUid = isset($data['to_user_id']) ? intval($data['to_user_id']) : 0;
-        $apiUrl = isset($data['api_url']) ? trim($data['api_url']) : '';
+        $apiUrl = env('APP_URL','');
         $chatKey = isset($data['chat_key']) ? trim($data['chat_key']) : '';
         $chatKey = $chatKey ? $chatKey : getChatKey($fromUid, $toUid);
         try {
@@ -138,214 +142,157 @@ class SocketServer extends Command
                 $fds = $fds? $fds : [];
                 $fds[$op.'_'.$fromUid] = $frameId;
                 RedisService::set("chats:bindFds:{$chatKey}", $fds, 86400);
-                RedisService::set("chats:bind:{$fromUid}", ['fd' => $frameId, 'user_id' => $fromUid, 'uuid' => $uuid, 'chat_key' => $chatKey], 86400);
+                RedisService::set("chats:bind:{$scene}_{$fromUid}", ['fd' => $frameId,'scene'=>$scene, 'user_id' => $fromUid, 'uuid' => $uuid, 'chat_key' => $chatKey], 86400);
             }
 
             switch ($op) {
-                case 'chat': // 文聊天
+                case 'chat': // 文聊天
                     $msgType = isset($data['msg_type']) ? $data['msg_type'] : 1;
+                    $chatType = isset($data['chat_type']) ? $data['chat_type'] : 1;
                     $message = isset($data['message']) ? trim($data['message']) : '';
 
-                    // 验证是否还有次数和付费提示 (客服不限制)
-                    if (!$check = ImChatService::make()->checkChat($fromUid, $toUid, 1)) {
-                        $config = ConfigService::make()->getConfigByCode('chat_buy_num_money');
-                        $config = $config ? explode('/', $config) : [];
-                        $money = isset($config[0]) && $config[0] > 0 ? $config[0] : 10;
-                        $num = isset($config[1]) && $config[1] > 0 ? $config[1] : 10;
-                        $tips = "抱歉您的免费次数已经用完,请先余额支付【{$money}元】购买【{$num}次】聊天次数再使用聊天服务。";
-                        $this->info("【{$date}】Socket:次数不足【{$frameId}-{$fromUid}】。");
-                        $this->sendMsg($frameId, ['success' => true, 'op' => 'buy', 'data' => ['type' => 1, 'tips' => $tips], 'message' => '次数不足,需要付费']);
+                    // 发送参数验证
+                    if ($toUid <= 0 || $fromUid <= 0 || empty($message)) {
+                        $this->info("【{$scene} {$date}】Socket:参数错误,from@{$fromUid}-to@{$toUid}。");
+                        $this->sendMsg($frameId, ['success' => false,'op'=>'push','scene'=>$scene,'data'=>$data, 'message' => '参数错误']);
                         return false;
                     }
 
-                    // 发送参数验证
-                    $message = MessageService::make()->filterMessage($message, 1);
-                    if ($toUid <= 0 || $fromUid <= 0 || empty($message)) {
-                        $this->info("【{$date}】Socket:参数错误,from@{$fromUid}-to@{$toUid}。");
-                        $this->sendMsg($frameId, ['success' => false, 'message' => '参数错误']);
+                    // 用户私聊
+                    $fromUserName = $fromAvatar = '';
+                    $toUserName = $toAvatar = '';
+                    $fromInfo = MemberService::make()->getCacheInfo(['id'=> $fromUid,'status'=>1]);
+                    if(empty($fromInfo)){
+                        $this->info("【{$scene} {$date}】Socket:发送用户不存在,from@{$fromUid}-to@{$toUid}。");
+                        $this->sendMsg($frameId, ['success' => false,'op'=>'push','scene'=>$scene,'data'=>$data, 'message' => '您的账号不可用或已冻结,请联系客服']);
                         return false;
                     }
-                    $data = [
-                        'from_user_id' => $fromUid,
-                        'to_user_id' => $toUid,
+                    $toInfo = MemberService::make()->getCacheInfo(['id'=> $toUid,'status'=>1]);
+                    if(empty($toInfo)){
+                        $this->info("【{$scene} {$date}】Socket:接收用户不存在,from@{$fromUid}-to@{$toUid}。");
+                        $this->sendMsg($frameId, ['success' => false,'op'=>'push','scene'=>$scene,'data'=>$data, 'message' => '对方账号不可用或无法接收消息']);
+                        return false;
+                    }
+
+                    if($chatType == 1){
+                        $fromUserName = isset($fromInfo['nickname'])? $fromInfo['nickname'] : $fromUid;
+                        $fromAvatar = isset($fromInfo['avatar'])? $fromInfo['avatar'] : '';
+                        $toUserName = isset($toInfo['nickname'])? $toInfo['nickname'] : $toUid;
+                        $toAvatar = isset($toInfo['avatar'])? $toInfo['avatar'] : '';
+                    }
+
+                    $msgData = [
+                        'from_uid' => $fromUid,
+                        'to_uid' => $toUid,
+                        'type' => 9,
                         'msg_type' => $msgType,
+                        'chat_type' => $chatType,
+                        'form_user_name' => $fromUserName,
+                        'to_user_name' => $toUserName,
+                        'form_user_avatar' => $fromAvatar,
+                        'to_user_avatar' => $toAvatar,
                         'description' => $msgType == 1 ? mb_substr($message, 0, 20) : '',
-                        'message' => $msgType != 1 && $message ? get_image_path($message) : $message,
+                        'content' => $msgType == 2 && $message ? get_image_path($message) : $message,
+                        'goods_id' => isset($data['goods_id'])? intval($data['goods_id']) : 0,
+                        'live_id' => isset($data['live_id'])? intval($data['live_id']) : 0,
                         'chat_key' => $chatKey,
                         'create_time' => time(),
                         'update_time' => time(),
                         'is_read' => 2,
-                        'from_is_show' => 1,
-                        'to_is_show' => 1,
                         'status' => 1
                     ];
-                    if (!$id = ImChatModel::insertGetId($data)) {
-                        $data = ['success' => false, 'message' => '消息发送失败'];
+                    if (!$id = MessageModel::insertGetId($msgData)) {
+                        $data = ['success' => false,'op'=>'push','scene'=>$scene,'data'=>$msgData, 'message' => '消息发送失败'];
                         $this->sendMsg($frameId, $data);
                         return false;
                     }
 
                     // 推送消息给对方
-                    $toInfo = MemberService::make()->getChatInfo($toUid, '', $apiUrl);
-                    $fromInfo = MemberService::make()->getChatInfo($fromUid, '', $apiUrl);
-                    $data['from_nickname'] = isset($fromInfo['nickname']) ? $fromInfo['nickname'] : '';
-                    $data['from_avatar'] = isset($fromInfo['avatar']) ? $fromInfo['avatar'] : '';
-                    $data['to_nickname'] = isset($toInfo['nickname']) ? $toInfo['nickname'] : '';
-                    $data['to_avatar'] = isset($toInfo['avatar']) ? $toInfo['avatar'] : '';
-                    $data['time_text'] = dateFormat($data['create_time']);
-
-                    $this->sendMsg($frameId, ['success' => true, 'op' => $op, 'data' => $data, 'message' => '发送成功:' . $frameId]);
-                    $toBindData = RedisService::get("chats:bind:{$toUid}");
+                    $msgData['from_user_avatar'] = get_image_url($msgData['from_user_avatar'], $apiUrl);
+                    $msgData['to_user_avatar'] = get_image_url($msgData['to_user_avatar'], $apiUrl);
+                    $msgData['content'] = $msgType == 2? get_image_url($msgData['content'], $apiUrl) : $msgData['content'];
+                    $msgData['time_text'] = dateFormat($msgData['create_time']);
+                    $msgData['goods'] = [];
+                    $msgData['live_info'] = [];
+
+                    // 直播间信息
+                    if($msgData['live_id']){
+                        $info = LiveModel::with(['member'])->where(['id'=> $msgData['live_id'],'mark'=>1])
+                            ->select(['id','user_id','play_url','description','status'])
+                            ->first();
+                        $info = $info? $info->toArray() : [];
+                        if($info){
+                            $member = isset($info['member'])? $info['member'] : [];
+                            $member['avatar'] = isset($member['avatar']) && $member['avatar']? get_image_url($member['avatar'], $apiUrl) : get_image_url('/images/member/logo.png',$apiUrl);
+                            $info['member'] = $member;
+                        }
+
+                        $msgData['live_info'] = $info;
+                    }
+
+                    $this->sendMsg($frameId, ['success' => true, 'op' => $op, 'scene'=> $scene, 'data' => $data, 'message' => '发送成功:' . $frameId]);
+                    $toBindData = RedisService::get("chats:bind:{$scene}_{$toUid}");
                     $toFd = isset($toBindData['fd']) ? $toBindData['fd'] : 0;
                     if ($toBindData && $toFd) {
-                        $this->sendMsg($toFd, ['success' => true, 'op' => $op, 'data' => $data, 'message' => '推送消息成功:' . $toFd]);
+                        $this->sendMsg($toFd, ['success' => true, 'op' => 'push' ,'scene'=> $scene, 'data' => $msgData, 'message' => '推送消息成功:' . $toFd]);
                         $this->info("【{$date}】Socket:客户端【{$frameId}-{$fromUid}】推送消息给【{$toFd}-{$toUid}。");
                     }
 
-                    // 更新消费的次数
-                    ImChatService::make()->updateChatParams($fromUid, $toUid, 1, 1);
-
                     break;
-                case 'video_connect': // 视频通话连接
+                case 'live': // 直播聊天
                     // 推送消息给对方
-                    $toInfo = MemberService::make()->getChatInfo($toUid, '', $apiUrl);
-                    $fromInfo = MemberService::make()->getChatInfo($fromUid, '', $apiUrl);
-                    $data['from_nickname'] = isset($fromInfo['nickname']) ? $fromInfo['nickname'] : '';
-                    $data['from_avatar'] = isset($fromInfo['avatar']) ? $fromInfo['avatar'] : '';
-                    $data['to_nickname'] = isset($toInfo['nickname']) ? $toInfo['nickname'] : '';
-                    $data['to_avatar'] = isset($toInfo['avatar']) ? $toInfo['avatar'] : '';
-                    $data['time_text'] = dateFormat(time());
-
-                    // 推送消息
-                    $fds = RedisService::get("chats:bindFds:{$chatKey}");
-                    $toFds = RedisService::get("chats:bindFds:0_{$toUid}");
-                    $toFds = $toFds? array_values($toFds) : [];
-                    $fds = $fds? array_values($fds) : [];
-                    $fds = $toFds? array_merge($toFds, $fds) : $fds;
-                    $this->sendMsg($frameId, ['success' => true, 'op' => $op, 'data' => $data, 'message' => '发送成功:' . $frameId]);
-                    $this->info("【{$date}】Socket:客户端【{$frameId}-{$fromUid}】@{$data['message']},消息群推给,".json_encode($fds));
-                    if ($fds) {
-                        $fds = array_unique($fds);
-                        foreach($fds as $toFd){
-                            if($toFd != $frameId){
-                                $this->sendMsg($toFd, ['success' => true, 'op' => $op, 'data' => $data, 'message' => '推送视频通话消息成功:' . $toFd.'-'.$frameId]);
-                                $this->info("【{$date}】Socket:客户端【{$toFd}】@{$data['message']},推送视频消息,来源【{$frameId}】");
-                            }
-                        }
-                        $this->info("【{$date}】Socket:客户端【{$frameId}-{$fromUid}】@{$data['message']},群推结束");
-                    }
+                    $msgType = isset($data['msg_type']) ? $data['msg_type'] : 1;
+                    $liveId = isset($data['live_id']) ? $data['live_id'] : 0;
+                    $message = isset($data['message']) ? trim($data['message']) : '';
 
-                    break;
-                case 'video':  // 视频/语音聊天结束
                     // 发送参数验证
-                    $type = isset($data['type']) ? intval($data['type']) : 1;
-                    $status = isset($data['status']) ? intval($data['status']) : 2;
-                    $videoTime = isset($data['video_time']) ? intval($data['video_time']) : 0;
-                    $message = isset($data['message']) && $data['message'] ? trim($data['message']) : '通话结束';
-                    if ($toUid <= 0 || $fromUid <= 0 || empty($message) || $status <= 0) {
-                        $this->sendMsg($frameId, ['success' => false, 'message' => '参数错误']);
+                    if ($toUid <= 0 || $fromUid <= 0 || $liveId<=0 || empty($message)) {
+                        $this->info("【{$scene} {$date}】Socket:参数错误,from@{$fromUid}-to@{$toUid}。");
+                        $this->sendMsg($frameId, ['success' => false,'op'=>'push','scene'=>$scene,'data'=>$data, 'message' => '参数错误']);
                         return false;
                     }
-                    $data = [
+
+                    $msgData = [
                         'from_user_id' => $fromUid,
                         'to_user_id' => $toUid,
-                        'msg_type' => 5,
-                        'description' => $message,
+                        'msg_type' => $msgType,
+                        'live_id' => $liveId,
                         'message' => $message,
                         'chat_key' => $chatKey,
                         'create_time' => time(),
                         'update_time' => time(),
-                        'is_read' => 2,
-                        'from_is_show' => 1,
-                        'to_is_show' => 1,
-                        'is_connect' => $status, // 1-接通,2-拒绝,3-取消
-                        'video_time' => $videoTime, // 通话时长
                         'status' => 1
                     ];
-                    if($type == 2){
-                        $data['from_user_id'] = $toUid;
-                        $data['to_user_id'] = $fromUid;
-                    }
-                    if (!$id = ImChatModel::insertGetId($data)) {
-                        $data = ['success' => false, 'message' => '视频消息发送失败'];
+                    if (!$id = LiveChatModel::insertGetId($msgData)) {
+                        $data = ['success' => false,'op'=>'push','scene'=>$scene,'data'=>$msgData, 'message' => '消息发送失败'];
                         $this->sendMsg($frameId, $data);
                         return false;
                     }
 
                     // 推送消息给对方
-                    $toInfo = MemberService::make()->getChatInfo($data['to_user_id'], '', $apiUrl);
-                    $fromInfo = MemberService::make()->getChatInfo($data['from_user_id'], '', $apiUrl);
-                    $data['from_nickname'] = isset($fromInfo['nickname']) ? $fromInfo['nickname'] : '';
-                    $data['from_avatar'] = isset($fromInfo['avatar']) ? $fromInfo['avatar'] : '';
-                    $data['to_nickname'] = isset($toInfo['nickname']) ? $toInfo['nickname'] : '';
-                    $data['to_avatar'] = isset($toInfo['avatar']) ? $toInfo['avatar'] : '';
-                    $data['time_text'] = dateFormat($data['create_time']);
-
-                    $str = [];
-                    if($videoTime>3600){
-                        $hour = intval($videoTime/3600);
-                        $str[] = $hour<10?'0'.$hour:$hour;
-                    }
-                    if($videoTime%3600 > 0){
-                        $minute = intval($videoTime%3600/60);
-                        $str[] = $minute<10?'0'.$minute:$minute;
-                    }
-
-                    if($videoTime%60 > 0){
-                        $second = intval($videoTime%60);
-                        $str[] = $second<10?'0'.$second:$second;
-                    }
-
-                    $data['video_time_text'] = $str? implode(':', $str) : '';
-
-                    // 推送消息
-                    $fds = RedisService::get("chats:bindFds:{$chatKey}");
-                    $fromFds = RedisService::get("chats:bindFds:0_{$fromUid}");
-                    $toFds = RedisService::get("chats:bindFds:0_{$toUid}");
-                    $fromFds = $fromFds? array_values($fromFds) : [];
-                    $toFds = $toFds? array_values($toFds) : [];
-                    $fds = $fds? array_values($fds) : [];
-                    $fds = $fromFds? array_merge($fromFds, $fds) : $fds;
-                    $fds = $toFds? array_merge($toFds, $fds) : $fds;
-                    $this->sendMsg($frameId, ['success' => true, 'op' => $op, 'data' => $data, 'message' => '发送成功:' . $frameId]);
-                    $this->info("【{$date}】Socket:客户端【{$frameId}-{$fromUid}】@{$data['message']},消息群推给,".json_encode($fds));
-                    if ($fds) {
-                        $fds = array_unique($fds);
-                        foreach($fds as $toFd){
-                            if($toFd != $frameId || $type == 2){
-                                $this->sendMsg($toFd, ['success' => true, 'op' => $op, 'data' => $data, 'message' => '推送视频通话消息成功:' . $toFd.'-来源'.$frameId]);
-                                $this->info("【{$date}】Socket:客户端【{$toFd}】@{$data['message']},推送视频消息,来源【{$frameId}】");
-                            }
-                        }
-                        $this->info("【{$date}】Socket:客户端【{$frameId}-{$fromUid}】@{$data['message']},消息群推结束");
-                    }
-
-                    // 如果通话时长
-                    if ($status == 1 && $videoTime > 0) {
-                        // 更新剩余时长
-                        if($type == 2){
-                            ImChatService::make()->updateChatParams($toUid, $fromUid, $videoTime, 2);
-                        }else{
-                            ImChatService::make()->updateChatParams($fromUid, $toUid, $videoTime, 2);
-                        }
-
+                    $msgData['time_text'] = dateFormat($msgData['create_time']);
+                    $this->sendMsg($frameId, ['success' => true, 'op' => $op, 'scene'=> $scene, 'data' => $msgData, 'message' => '发送成功:' . $frameId]);
+                    $toBindData = RedisService::get("chats:bind:{$scene}_{$toUid}");
+                    $toFd = isset($toBindData['fd']) ? $toBindData['fd'] : 0;
+                    if ($toBindData && $toFd) {
+                        $this->sendMsg($toFd, ['success' => true, 'op' => 'push' ,'scene'=> $scene, 'data' => $msgData, 'message' => '推送消息成功:' . $toFd]);
+                        $this->info("【{$scene} {$date}】Socket:客户端【{$frameId}-{$fromUid}】推送消息给【{$toFd}-{$toUid}。");
                     }
 
                     break;
-                case 'video-login': // 登录
                 case 'login': // 登录
-                    $this->info("【{$date}】Socket:登录成功【{$frameId}-{$fromUid}-{$op}】。");
-                    $this->sendMsg($frameId, ['success' => true,'op'=> $op, 'message' => '登录成功', 'data' => $data, 't' => time()]);
+                    $this->info("【{$scene} {$date}】Socket:登录成功【{$frameId}-{$fromUid}-{$op}】。");
+                    $this->sendMsg($frameId, ['success' => true,'op'=> $op, 'scene'=>$scene, 'message' => '登录成功', 'data' => $data, 't' => time()]);
                     break;
                 default:
-                    $this->sendMsg($frameId, ['success' => false, 'message' => 'ok', 'data' => $data, 't' => time()]);
+                    $this->sendMsg($frameId, ['success' => false, 'message' => 'ok', 'scene'=>$scene, 'data' => $data, 't' => time()]);
                     break;
             }
 
-            $this->info("【{$date}】Socket:客户端【{$frameId}】消息处理成功");
+            $this->info("【{$scene} {$date}】Socket:客户端【{$frameId}】消息处理成功");
         } catch (\Exception $exception) {
-            RedisService::set("caches:sockets:error_{$frameId}", ['error' => $exception->getTrace(), 'date' => $date], 7200);
-            $this->info("【{$date}】Socket:客户端【{$frameId}】消息处理错误 " . $exception->getMessage());
+            RedisService::set("caches:sockets:error_{$frameId}", ['error' => $exception->getMessage(),'trace'=>$exception->getTrace(), 'date' => $date], 7200);
+            $this->info("【{$scene} {$date}】Socket:客户端【{$frameId}】消息处理错误 " . $exception->getMessage());
         }
     }
 

+ 5 - 0
app/Console/Commands/SwooleTask.php

@@ -183,6 +183,11 @@ class SwooleTask extends Command
             \Swoole\Process::kill($managePid, SIGKILL);
         }
 
+        // 直接杀
+        if(function_exists('exec')){
+            exec('pkill -9 php artisan swoole:task start');
+        }
+
         @unlink($this->pidPath);
         echo "swoole stop...\n";
     }

+ 44 - 0
app/Models/LiveChatModel.php

@@ -0,0 +1,44 @@
+<?php
+// +----------------------------------------------------------------------
+// | LARAVEL8.0 框架 [ LARAVEL ][ RXThinkCMF ]
+// +----------------------------------------------------------------------
+// | 版权所有 2017~2021 LARAVEL研发中心
+// +----------------------------------------------------------------------
+// | 官方网站: http://www.laravel.cn
+// +----------------------------------------------------------------------
+// | Author: laravel开发员 <laravel.qq.com>
+// +----------------------------------------------------------------------
+
+namespace App\Models;
+
+/**
+ * 直播聊天-模型
+ * @author laravel开发员
+ * @since 2020/11/11
+ * @package App\Models
+ */
+class LiveChatModel extends BaseModel
+{
+    // 设置数据表
+    protected $table = 'live_chat';
+
+    /**
+     * 发送用户
+     * @return \Illuminate\Database\Eloquent\Relations\HasOne
+     */
+    public function from()
+    {
+        return $this->hasOne(MemberModel::class, 'id','from_user_id')
+            ->select(['id','nickname','avatar','status']);
+    }
+
+    /**
+     * 接收用户
+     * @return \Illuminate\Database\Eloquent\Relations\HasOne
+     */
+    public function to()
+    {
+        return $this->hasOne(MemberModel::class, 'id','to_user_id')
+            ->select(['id','nickname','avatar','status']);
+    }
+}

+ 3 - 2
app/Services/Api/MemberService.php

@@ -176,13 +176,14 @@ class MemberService extends BaseService
             return $info;
         }
 
-        $defaultField = ['id', 'username', 'realname', 'mobile', 'nickname', 'code', 'parent_id', 'openid', 'balance', 'score', 'member_level', 'status', 'avatar'];
+        $defaultField = ['id', 'username', 'realname', 'mobile', 'nickname', 'code', 'parent_id', 'balance','usdt', 'score', 'member_level', 'status', 'avatar'];
         $field = $field ? $field : $defaultField;
         $info = $this->model->where($where)->where('mark', 1)->select($field)->first();
         $info = $info ? $info->toArray() : [];
         if ($info) {
             if (isset($info['avatar'])) {
-                $info['avatar_preview'] = get_image_url($info['avatar']);
+                $info['avatar'] = $info['avatar']? $info['avatar'] : '/images/member/logo.png';
+                $info['avatar_preview'] = $info['avatar']? get_image_url($info['avatar']) : '';
             }
             RedisService::set($cacheKey, $info, $expired ? $expired : rand(3, 5));
         }

+ 1 - 1
app/Services/LiveService.php

@@ -177,7 +177,7 @@ class LiveService extends BaseService
             }
 
             if($info['user_id'] == $userId){
-                $info['is_foolow'] = 1;
+                $info['is_follow'] = 1;
             }else{
                 $checkFollow = MemberCollectService::make()->checkCollect($userId, $info['user_id'], 1);
                 $info['is_follow'] = $checkFollow? 1 : 0;