| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- <?php
- namespace mall\controllers;
- use biz\wx\classes\WxMessageClass;
- use bizMall\merchant\classes\ShopClass;
- use bizMall\message\classes\ChatClass;
- use bizMall\message\services\ChatService;
- use common\components\util;
- use Yii;
- use GatewayClient\Gateway;
- class ChatController extends BaseController
- {
- public $guestAccess = ['message-server-call','un-read-msg-count'];
- //聊天首页,前端使用
- public function actionIndex()
- {
- return $this->renderPartial('index');
- }
- //绑定 ssh 2019.12.28
- public function actionBindUser()
- {
- $post = Yii::$app->request->post();
- $clientId = isset($post['clientId']) ? $post['clientId'] : '';
- $userId = $this->userId;
- Gateway::bindUid($clientId, $userId);
- }
- //聊天双方的用户信息 ssh 2019.12.30
- public function actionBegin()
- {
- //新增最近联系人
- ChatService::addRecentlyUser($this->sjId, $this->userId);
- util::success(['merchant' => $this->sj->attributes, 'user' => $this->user]);
- }
- //关闭当前链接
- public function actionClose()
- {
- $post = Yii::$app->request->post();
- $clientId = isset($post['clientId']) ? $post['clientId'] : '';
- Gateway::closeClient($clientId);
- }
- //最近聊天的内容 ssh 2019.12.29
- public function actionRecentlyMessage()
- {
- $respond = ChatService::getMessageList($this->userId);
- util::success($respond);
- }
- // ---------------------------- 新聊天功能的接口 ----------------------------------
- //最近聊天人
- public function actionLatestUsers()
- {
- $respond = ChatService::getLatestUsers(intval($this->userId));
- util::success($respond);
- }
- //聊天的内容
- public function actionChatHistory()
- {
- $roomName = Yii::$app->request->post('roomName');
- // 校验 $roomeName 的值,防止越权访问他人数据
- $roomName = 'room_messages:' . $roomName;
- $respond = ChatService::getChatHistory($roomName);
- util::success($respond);
- }
- //客户的未读消息总数
- public function actionUnReadMsgCount()
- {
- $c = 0;
- //未登录也会访问这个接口
- if (!empty($this->userId)) {
- $c = ChatService::getUnReadMsgCount($this->userId, 'message');
- }
- util::success(['msg_count' => $c]);
- }
- //用 redis key 获取商品报价
- public function actionGetQuotedPrice()
- {
- $key = Yii::$app->request->post('key');
- $keyArr = explode('-', $key);
- $userId = intval($keyArr[1]);
- if ($userId != $this->userId) {
- util::error(-1, '校验失败');
- }
- $key = ChatClass::getQuotedPriceKey($keyArr[0], $keyArr[1], $keyArr[2]);
- $val = Yii::$app->redis->executeCommand('GET', [$key]);
- if (empty($val)) {
- util::success(['price' => -1]);
- }
- util::success(['price' => $val]);
- }
- // message_server 远程调用专用方法,可用于:1.有未读消息的通知(可以额外添加触发条件)2.
- public function actionMessageServerCall()
- {
- Yii::info('message_server 远程调用');
- $callbackData = Yii::$app->request->post();
- if (empty($callbackData)) {
- $postStr = file_get_contents('php://input');
- // 处理转义字符,将JSON字符串正确解析为数组
- //$postStr = stripslashes($postStr);
- $callbackData = json_decode($postStr, true);
- if (empty($callbackData)) {
- util::fail('回调请求的数据为空');
- }
- }
- $shopId = $callbackData['shopId'] ?? 0;
- $userId = $callbackData['userId'] ?? '';
- $key = 'has_remind_' . $shopId . '_' . $userId;
- if (!empty($shopId) && !empty($userId)) {
- //10秒不重复通知
- $hasRemind = Yii::$app->redis->executeCommand('GET', [$key]);
- if (empty($hasRemind)) {
- $shop = ShopClass::getById($shopId, true);
- if (!empty($shop)) {
- WxMessageClass::newMessageInform($shop, "商城上客户有留言");
- Yii::$app->redis->executeCommand('SETEX', [$key, 10, 'has']);
- //$time = time();
- //noticeUtil::push("客户留言已通知花店,shopId:" . $shopId . ' userId:' . $userId . ' time:' . $time, '15280215347');
- }
- }
- }
- Yii::info(json_encode($callbackData));
- return $this->asJson(['return_code' => 0, 'return_msg' => 'OK']); // 成功状态的返回数据
- }
- }
|