request->isPost()){ return $this->fail('请求方式错误'); } //获取请求参数 $params = $this->request->post(['client_id','user_id']); if(empty($params['client_id']) || empty($params['user_id'])){ return $this->fail('参数错误'); } Gateway::bindUid($params['client_id'], $params['user_id']); return $this->success('绑定成功'); } //发送消息 public function sendMessage(): Json { //验证请求方式 if(!$this->request->isPost()){ return $this->fail('请求方式错误'); } //获取请求参数 $params = $this->request->post(['msg_id','from_user_id','to_user_id','content','type']); if(empty($params['msg_id']) || empty($params['from_user_id']) || empty($params['to_user_id']) || empty($params['content']) || empty($params['type'])){ return $this->fail('参数错误'); } if(!in_array($params['type'],['text','image','video'])){ return $this->fail('消息类型错误'); } //判断消息是否存在 $msgData = UserImMessage::where('msg_id',$params['msg_id'])->findOrEmpty(); if(!$msgData->isEmpty()){ return $this->fail('该消息已发送'); } //获取发送者信息 $fromUserInfo = User::where('id',$params['from_user_id'])->findOrEmpty();; if($fromUserInfo->isEmpty()){ return $this->fail('未找到发送者信息'); } //获取接收者信息 $toUserInfo = User::where('id',$params['to_user_id'])->findOrEmpty(); if($toUserInfo->isEmpty()){ return $this->fail('未找到接收者信息'); } //存储信息 $saveData = [ 'msg_id' => $params['msg_id'], 'from_user_id' => $params['from_user_id'], 'to_user_id' => $params['to_user_id'], 'content' => $params['content'], 'type' => 'type', 'is_read' => 1, 'is_undo' => 0, 'is_delete' => 0, 'create_time' => time(), 'extends' => null, ]; //发送消息 $sendData = [ 'msg_id' => $params['msg_id'], 'from_user_id' => $params['from_user_id'], 'from_user_name' => $fromUserInfo['nickname'], 'from_user_avatar' => $fromUserInfo['avatar'], 'to_user_id' => $params['to_user_id'], 'to_user_name' => $toUserInfo['nickname'], 'to_user_avatar' => $toUserInfo['avatar'], 'content' => $params['content'], 'type' => 'type', 'is_read' => 0, 'is_undo' => 0, 'is_delete' => 0, 'create_time' => $saveData['create_time'], 'extends' => null, ]; //保存消息 try { $model = new UserImMessage(); $result = $model->save($saveData); if($result){ Gateway::sendToUid($params['to_user_id'], json_encode($sendData)); return $this->success('发送成功'); }else{ return $this->fail('发送失败'); } }catch (\Exception $e) { return $this->fail($e->getMessage()); } } //上传文件 public function upload(): Json { //验证请求方式 if(!$this->request->isPost()){ return $this->fail('请求方式错误'); } //获取请求参数 $params = $this->request->post(['msg_id','from_user_id','to_user_id','type']); //获取参数 $file = $this->request->file('file'); if(empty($file) || empty($params['msg_id']) || empty($params['from_user_id']) || empty($params['to_user_id']) || empty($params['type'])){ return $this->fail('参数错误'); } if(!in_array($params['type'],['image','video'])){ return $this->fail('消息类型错误'); } //判断消息是否存在 $msgData = UserImMessage::where('msg_id',$params['msg_id'])->findOrEmpty(); if(!$msgData->isEmpty()){ return $this->fail('该消息已发送'); } //获取发送者信息 $fromUserInfo = User::where('id',$params['from_user_id'])->findOrEmpty();; if($fromUserInfo->isEmpty()){ return $this->fail('未找到发送者信息'); } //获取接收者信息 $toUserInfo = User::where('id',$params['to_user_id'])->findOrEmpty(); if($toUserInfo->isEmpty()){ return $this->fail('未找到接收者信息'); } $filePath =$file->getRealPath(); $fileType = $file->extension(); $fileSize = $file->getSize(); $ali_oss = new alioss(); $result = ''; switch ($params['type']) { case 'image': $result = $ali_oss -> uploadImg($filePath,$fileType,$fileSize); break; case 'video': $result = $ali_oss -> uploadVideo($filePath,$fileType,$fileSize); break; default: return $this->fail('文件类型错误~'); } if($result && $result['code'] == 1){ //存储信息 $saveData = [ 'msg_id' => $params['msg_id'], 'from_user_id' => $params['from_user_id'], 'to_user_id' => $params['to_user_id'], 'content' => $result['data'], 'type' => 'type', 'is_read' => 1, 'is_undo' => 0, 'is_delete' => 0, 'create_time' => time(), 'extends' => $params['type'] == 'video' ? json_encode(['poster_img'=>$result['data'].'?x-oss-process=video/snapshot,t_1000,m_fast,w_800,f_png']) : null, ]; //发送消息 $sendData = [ 'msg_id' => $params['msg_id'], 'from_user_id' => $params['from_user_id'], 'from_user_name' => $fromUserInfo['nickname'], 'from_user_avatar' => $fromUserInfo['avatar'], 'to_user_id' => $params['to_user_id'], 'to_user_name' => $toUserInfo['nickname'], 'to_user_avatar' => $toUserInfo['avatar'], 'content' => $result['data'], 'type' => 'type', 'is_read' => 0, 'is_undo' => 0, 'is_delete' => 0, 'create_time' => $saveData['create_time'], 'extends' => $params['type'] == 'video' ? json_encode(['poster_img'=>$result['data'].'?x-oss-process=video/snapshot,t_1000,m_fast,w_800,f_png']) : null, ]; //保存消息 try { $model = new UserImMessage(); $result = $model->save($saveData); if($result){ Gateway::sendToUid($params['to_user_id'], json_encode($sendData)); return $this->success('发送成功'); }else{ return $this->fail('发送失败'); } }catch (\Exception $e) { return $this->fail($e->getMessage()); } }else{ return $this->fail($result['msg']); } } //消息列表 public function msgList(): Json { //验证请求方式 if(!$this->request->isPost()){ return $this->fail('请求方式错误'); } //获取请求参数 $params = $this->request->post(['user_id','page_no','page_size']); if(empty($params['user_id']) || empty($params['page_no']) || empty($params['page_size'])){ return $this->fail('参数错误'); } //获取用户信息 $userInfo = User::where('id',$params['user_id'])->findOrEmpty(); if($userInfo->isEmpty()){ return $this->fail('未找到用户信息'); } //获取用户消息 $msgData = UserImMessage::field('id,from_user_id,to_user_id,content,type,is_read,is_undo,is_delete,create_time,extends') ->where('from_user_id',$params['user_id']) ->order('create_time desc')->page($params['page_no'],$params['page_size'])->select()->each(function($item) use($userInfo){ $toUserInfo = User::field('nickname,avatar')->where('id',$item['to_user_id'])->findOrEmpty(); if(!$toUserInfo->isEmpty()){ $item['from_user_name'] = $userInfo['nickname']; $item['from_user_avatar'] = $userInfo['avatar']; $item['to_user_name'] = $toUserInfo['nickname']; $item['to_user_avatar'] = $toUserInfo['avatar']; } })->toArray(); //返回数据 return $this->success('请求成功',$msgData); } }