[ // 推送所需的参数 * "page" // 跳转页面 * "data" => [ * "thing1" => [ * "value" => [ * "参数1" * ] * ] * ] * * ] * ] * @param AMQPMessage $message * @return string * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface * @throws ClientExceptionInterface * @throws DecodingExceptionInterface * @throws RedirectionExceptionInterface * @throws ServerExceptionInterface * @throws TransportExceptionInterface */ public function consumeMessage($data, AMQPMessage $message): string { try { // 获取被推送用户信息 $params = array(); $params['user_id'] = $data['push_user_id']; $user = User::getOne($params); if (empty($user)){ $this->addMessagePushLog($data,"未查询到被推送用户信息"); return Result::ACK; } // 获取open_id $UserService = new UserService(); $open_id = $UserService->getOpenIdWithUserId($user['user_id'],$user['user_type']); if (empty($open_id)){ $this->addMessagePushLog($data,"未获取到被推送用户open_id"); return Result::ACK; } // 获取订阅消息模版数据 $params = array(); $params['client_type'] = $user['user_type']; // 客户端类型(1:患者端 2:医师端 3:药师端) $params['template_title'] = $data['template_title']; $sub_template = SubTemplate::getOne($params); if (empty($sub_template)){ $this->addMessagePushLog($data,"未查询到推送模版id"); return Result::ACK; } $sub_template = $sub_template->toArray(); // 处理发送环境 $miniprogram_state = "developer"; if (env("APP_ENV") == "prod"){ $miniprogram_state = "formal"; } $options = [ "template_id" => $sub_template['wx_template_id'], "page" => $data['params']['page'], "touser" => $open_id, "data" => $data['params']['data'], "miniprogram_state" => $miniprogram_state, "lang" => "zh_CN", ]; // 发起推送 $Wechat = new Wechat($user['user_type']); $result = $Wechat->sendSubscribeMessage($options); Log::getInstance()->info("订阅消息推送成功:" . $result); // 记录推送记录 $this->addMessagePushLog($data,"",$sub_template['wx_template_id'],1,json_encode($options,JSON_UNESCAPED_UNICODE)); } catch (\Exception $e) { $this->addMessagePushLog($data,$e->getMessage()); return Result::ACK; } return Result::ACK; } /** * 增加日志 * @param array $params 推送参数 * @param string $wx_template_id 微信推送模版id * @param int $status 推送状态(1:成功 2:失败) * @param string $fail_reason 推送失败原因 * @param string $content 推送内容 */ public function addMessagePushLog(array $params,string $fail_reason = '',string $wx_template_id = "",int $status = 2,string $content = '') { $data = array(); $data['push_user_id'] = $params['push_user_id']; $data['template_title'] = $params['template_title']; if (!empty($wx_template_id)){ $data['wx_template_id'] = $wx_template_id; } $data['params'] = json_encode($params,JSON_UNESCAPED_UNICODE); $data['status'] = $status; if (!empty($fail_reason)){ $data['fail_reason'] = $fail_reason; } if (!empty($content)){ $data['content'] = $content; } $log_message_push = LogMessagePush::addLogMessagePush($data); if (empty($log_message_push)){ Log::getInstance()->error("增加推送日志失败:" . json_encode($data,JSON_UNESCAPED_UNICODE)); } } }