getCount($condition); if ($count > 0) { $res = model('message')->update($data, $condition); } else { $res = model('message')->add($data); } return $this->success($res); } /** * 编辑微信模板消息是否启动 * @param $is_open * @param $condition */ public function modifyMessageWechatIsOpen($is_open, $condition) { $check_condition = array_column($condition, 2, 0); $keywords = isset($check_condition['keywords']) ? $check_condition['keywords'] : ''; if ($keywords === '') { return $this->error('', 'REQUEST_KEYWORDS'); } $data = array( "wechat_is_open" => $is_open ); $res = model('message')->update($data, $condition); if ($res === false) { return $this->error('', 'UNKNOW_ERROR'); } return $this->success($res); } /** * 消息模本信息 * @param $condition * @param string $field * @return \multitype */ public function getMessageInfo($site_id, $keywords, $field = "*") { $info = model("message_template")->getInfo([['keywords', '=', $keywords]], $field); if (!empty($info)) { $info["message_json_array"] = empty($info["message_json"]) ? [] : json_decode($info["message_json"], true);//消息配置 $info["sms_json_array"] = event('SmsTemplateInfo', ['keywords' => $keywords, 'site_id' => $site_id], true);//短信配置 $info["wechat_json_array"] = empty($info["wechat_json"]) ? [] : json_decode($info["wechat_json"], true);//微信模板消息配置 $info["weapp_json_array"] = empty($info["weapp_json"]) ? [] : json_decode($info["weapp_json"], true);//订阅消息配置 $info["aliapp_json_array"] = empty($info["aliapp_json"]) ? [] : json_decode($info["aliapp_json"], true);//订阅消息配置 $message = model('message')->getInfo([['keywords', '=', $keywords], ['site_id', '=', $site_id]]); if (empty($message)) { $data = [ 'keywords' => $keywords, 'site_id' => $site_id, 'sms_is_open' => 0, ]; model('message')->add($data); $message = model('message')->getInfo([['keywords', '=', $keywords], ['site_id', '=', $site_id]]); } $info = array_merge($info, $message); } return $this->success($info); } /** * 获取消息详情 * @param array $condition * @param string $field * @return array */ public function getMessageDetail($site_id, $keywords, $field = "*") { $message = model('message')->getInfo([['keywords', '=', $keywords], ['site_id', '=', $site_id]], $field); if (empty($message)) { $data = [ 'keywords' => $keywords, 'site_id' => $site_id, 'sms_is_open' => 0 ]; model('message')->add($data); $message = model('message')->getInfo([['keywords', '=', $keywords], ['site_id', '=', $site_id]], $field); return $this->success($message); } return $this->success($message); } /** * 消息列表 * @param array $condition * @param bool $field * @param string $order * @param null $limit */ public function getMessageList($site_id = 0, $message_type = 1, $field = '*', $order = '', $limit = null) { $field = 'nmt.id, nmt.addon, nmt.keywords, nmt.title, nmt.message_type, nmt.message_json, nmt.sms_addon, nmt.sms_json, nmt.sms_content, nmt.wechat_json , nmt.weapp_json, nmt.aliapp_json, nmt.support_type, nmt.remark, nm.sms_is_open, nm.wechat_is_open, nm.wechat_template_id, nm.weapp_is_open, nm.weapp_template_id, nm.aliapp_is_open, nm.aliapp_json'; switch ($message_type) { case 1: $order = Db::raw("field(nmt.keywords,'REGISTER_CODE','LOGIN_CODE','SET_PASSWORD','FIND_PASSWORD','MEMBER_BIND', 'USER_CANCEL_SUCCESS','USER_CANCEL_FAIL','ORDER_URGE_PAYMENT','ORDER_CLOSE','ORDER_PAY', 'ORDER_DELIVERY','ORDER_COMPLETE','ORDER_VERIFY_OUT_TIME','VERIFY_CODE_EXPIRE','VERIFY', 'ORDER_REFUND_AGREE','ORDER_REFUND_REFUSE','USER_WITHDRAWAL_SUCCESS','USER_BALANCE_CHANGE_NOTICE' ,'COMMISSION_GRANT','FENXIAO_WITHDRAWAL_SUCCESS','FENXIAO_WITHDRAWAL_ERROR','BARGAIN_COMPLETE', 'PINTUAN_COMPLETE', 'PINTUAN_FAIL', 'SECKILL_START')"); break; case 2: $order = Db::raw("field(nmt.keywords,'BUYER_PAY','BUYER_ORDER_COMPLETE','BUYER_REFUND','BUYER_DELIVERY_REFUND', 'USER_WITHDRAWAL_APPLY','FENXIAO_WITHDRAWAL_APPLY','USER_CANCEL_APPLY')"); break; } $join = [ ['message nm', 'nmt.keywords = nm.keywords', 'left'] ]; $list = model('message_template')->getList([["nmt.message_type", "=", $message_type], ['nm.site_id', '=', $site_id]], $field, $order, 'nmt', $join, '', $limit); if (!empty($list)) { foreach ($list as $k => $v) { $list[$k]['support_type'] = explode(',', $v['support_type']); $list[$k]['sms_is_open'] = $v['sms_is_open'] == null ? 0 : $v['sms_is_open']; $list[$k]['wechat_is_open'] = $v['wechat_is_open'] == null ? 0 : $v['wechat_is_open']; $list[$k]['weapp_is_open'] = $v['weapp_is_open'] == null ? 0 : $v['weapp_is_open']; $list[$k]['aliapp_is_open'] = $v['aliapp_is_open'] == null ? 0 : $v['aliapp_is_open']; } } return $this->success($list); } /** * 消息分页列表 * @param array $condition * @param int $page * @param int $page_size * @param string $order * @param string $field * @return \multitype */ public function getMessagePageList($condition = [], $site_id = 0, $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*') { $list = model('message_template')->pageList($condition, $field, $order, $page, $page_size); if ($site_id > 0) { if (!empty($list['list'])) { foreach ($list['list'] as $k => $v) { $message_info = model('message')->getInfo([["keywords", "=", $v['keywords']], ['site_id', '=', $site_id]], 'wechat_is_open,wechat_template_id'); $list['list'][$k]['wechat_is_open'] = $message_info == null ? 0 : $message_info['wechat_is_open']; $list['list'][$k]['wechat_template_id'] = $message_info == null ? 0 : $message_info['wechat_template_id']; } } } return $this->success($list); } /** * 获取微信模板消息id * @param string $keywords * todo 批量获取模板消息 */ public function getWechatTemplateNo(string $keywords, $site_id, $wechat_is_open = 0) { $keyword = explode(',', $keywords); $wechat = new Wechat($site_id); if ($wechat_is_open == 1) { // 启用 foreach ($keyword as $item) { $shop_message = model('message')->getInfo([['keywords', '=', $item], ["site_id", "=", $site_id]], 'wechat_template_id'); $data = [ 'wechat_is_open' => $wechat_is_open, 'site_id' => $site_id, 'keywords' => $item, ]; // 开启时没有模板则进行添加 if (!empty($shop_message)) { if (empty($shop_message['wechat_template_id'])) { $template_info = model('message_template')->getInfo([['keywords', '=', $item], ['wechat_json', '<>', '']], 'wechat_json'); if (!empty($template_info)) { $template = json_decode($template_info['wechat_json'], true); $res = $wechat->getTemplateId($template['template_id_short']); if (isset($res['errcode']) && $res['errcode'] == 0) { $data['wechat_template_id'] = $res['template_id']; } else { return $this->error($res, $res['errmsg']); } } } model('message')->update($data, [['keywords', '=', $item], ["site_id", "=", $site_id]]); } else { $template_info = model('message_template')->getInfo([['keywords', '=', $item], ['wechat_json', '<>', '']], 'wechat_json'); if (!empty($template_info)) { $template = json_decode($template_info['wechat_json'], true); $res = $wechat->getTemplateId($template['template_id_short']); if (isset($res['errcode']) && $res['errcode'] == 0) { $data['wechat_template_id'] = $res['template_id']; } else { return $this->error($res, $res['errmsg']); } } model('message')->add($data); } } } else if ($wechat_is_open == 0) { // 关闭 foreach ($keyword as $item) { $shop_message = model('message')->getInfo([['keywords', '=', $item], ["site_id", "=", $site_id]], 'wechat_template_id'); if (!empty($shop_message)) { $update_data = ['wechat_is_open' => $wechat_is_open]; if ($shop_message['wechat_template_id']) { $res = $wechat->deleteTemplate($shop_message['wechat_template_id']); if (isset($res['errcode']) && $res['errcode'] == 0) { $update_data['wechat_template_id'] = ''; } else { return $this->error($res, $res['errmsg']); } } model('message')->update($update_data, [['keywords', '=', $item], ["site_id", "=", $site_id]]); } else { model('message')->add([ 'site_id' => $site_id, 'keywords' => $item, 'wechat_is_open' => $wechat_is_open ]); } } } else { // 获取 $list = model('message_template')->getList([['keywords', 'in', $keyword], ['wechat_json', '<>', '']], 'keywords,wechat_json'); if (!empty($list)) { foreach ($list as $item) { $template = json_decode($item['wechat_json'], true); $res = $wechat->getTemplateId($template['template_id_short']); if (isset($res['errcode']) && $res['errcode'] != 0) return $this->error($res, $res['errmsg']); $shop_message = model('message')->getInfo([['keywords', '=', $item['keywords']], ["site_id", "=", $site_id]], 'wechat_template_id'); if (!empty($shop_message)) { model('message')->update(['wechat_template_id' => $res['template_id']], [['keywords', '=', $item['keywords']], ["site_id", "=", $site_id]]); } else { model('message')->add([ 'site_id' => $site_id, 'keywords' => $item['keywords'], 'wechat_template_id' => $res['template_id'] ]); } } } } return $this->success(); } /********************************************************************* 平台消息类型 end *********************************************************************************/ public function setWechatStatus($site_id) { $wechat = new Wechat($site_id); $res = $wechat->setIndustry(31, 41); } /*** * 获取行业 * @param $site_id * @return array */ public function getIndustry($site_id) { $wechat = new Wechat($site_id); $res = $wechat->getIndustry(); return $this->success($res); } /** * 消息发送 * @param $param */ public function sendMessage($param) { try { $keywords = $param["keywords"]; $site_id = $param["site_id"] ?? $param["site_id"]; $message_info_result = $this->getMessageInfo($site_id, $keywords); $message_info = $message_info_result["data"]; $param["message_info"] = $message_info; $shop_info = []; if ($site_id > 0) { $shop_model = new Shop(); $shop_info_result = $shop_model->getShopInfo([['site_id', '=', $site_id]]); $site_model = new Site(); $site_info = $site_model->getSiteInfo([['site_id', '=', $site_id]]); $shop_info = array_merge($shop_info_result["data"], $site_info['data']); } $param["site_info"] = $shop_info; $result = checkQueue($param, function ($params) { $send_type = $params['type'] ?? 'later'; // 如果为验证码同步发送 if ($send_type == 'code') { $result = event('SendMessageTemplate', $params, true);//匹配消息模板 并发送 return $result; } else { // 是够延时发送 if (isset($params['later']) && !empty($params['later'])) { Queue::later((time() + $params['later']), 'Sendmessage', $params); } else { Queue::push('Sendmessage', $params); } return $this->success(); } }, function ($params) { $result = event('SendMessageTemplate', $params, true);//匹配消息模板 并发送 return $result; }); return $result; } catch (\Exception $e) { return $this->error('', $e->getMessage() . $e->getFile() . $e->getLine()); } } }