MessageService.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. <?php
  2. namespace app\common\service\message;
  3. use app\common\model\user\User as UserModel;
  4. use app\common\enum\order\OrderTypeEnum;
  5. use app\common\model\settings\MessageSettings as MessageSettingsModel;
  6. use app\common\model\settings\Message as MessageModel;
  7. use app\common\enum\order\OrderPayTypeEnum;
  8. /**
  9. * 消息通知服务
  10. */
  11. class MessageService
  12. {
  13. /**
  14. * 订单支付成功后通知
  15. */
  16. public function payment($order, $orderType = OrderTypeEnum::MASTER)
  17. {
  18. $message = MessageModel::detailByEname('order_pay_user');
  19. $settings = MessageSettingsModel::detailByMessageId($message['message_id']);
  20. if (!$settings) {
  21. return;
  22. }
  23. $data = [
  24. // 订单编号
  25. 'order_no' => $order['order_no'],
  26. // 商品名称
  27. 'product_name' => $this->formatProductName($order['product']),
  28. // 订单金额
  29. 'pay_price' => $order['pay_price'],
  30. // 支付方式
  31. 'pay_type' => OrderPayTypeEnum::data()[$order['pay_type']['value']]['name'],
  32. // 支付时间
  33. 'pay_time' => date('Y-m-d H:i:s', $order['pay_time'])
  34. ];
  35. //发送公众号消息
  36. if ($settings['mp_status'] == 1 && $order['user']['mpopen_id'] != '') {
  37. MpMessageService::send($data, $settings['mp_template'], $order['user']['mpopen_id'], $order['app_id']);
  38. }
  39. //发送小程序订阅消息
  40. if ($settings['wx_status'] == 1 && $order['user']['open_id'] != '') {
  41. WxMessageService::send($data, $settings['wx_template'], $order['user']['open_id'], $order['app_id']);
  42. }
  43. //发送短信消息
  44. if ($settings['sms_status'] == 1 && $order['user']['mobile'] != '') {
  45. SmsMessageService::send($data, $settings['sms_template'], $order['user']['mobile'], $order['app_id']);
  46. }
  47. // 商家短信通知
  48. $this->newOrder($order, $data, $orderType);
  49. }
  50. /**
  51. * 商家短信通知
  52. */
  53. private function newOrder($order, $data, $orderType = OrderTypeEnum::MASTER)
  54. {
  55. $message = MessageModel::detailByEname('order_pay_store');
  56. $settings = MessageSettingsModel::detailByMessageId($message['message_id']);
  57. if (!$settings || $settings['sms_status'] == 0) {
  58. return;
  59. }
  60. // 商家短信通知
  61. //$smsConfig = SettingModel::getItem('sms', $order['app_id']);
  62. //$phone = $smsConfig['engine']['aliyun']['accept_phone'];
  63. /*if(empty($phone)){
  64. return;
  65. }*/
  66. //SmsMessageService::send($data, $settings['sms_template'], $phone, $order['app_id']);
  67. }
  68. /**
  69. * 后台发货通知
  70. */
  71. public function delivery($order, $orderType = OrderTypeEnum::MASTER)
  72. {
  73. $message = MessageModel::detailByEname('order_delivery_user');
  74. $settings = MessageSettingsModel::detailByMessageId($message['message_id']);
  75. if (!$settings) {
  76. return;
  77. }
  78. $data = [
  79. // 订单编号
  80. 'order_no' => $order['order_no'],
  81. // 商品信息
  82. 'product_name' => $this->formatProductName($order['product']),
  83. //收货人
  84. 'name' => $order['address']['name'],
  85. // 收货地址
  86. 'address' => implode('', $order['address']['region']) . $order['address']['detail'],
  87. // 物流公司
  88. 'express_name' => $order['express']['express_name'],
  89. // 物流单号
  90. 'express_no' => $order['express_no'],
  91. // 发货时间
  92. 'express_time' => date('Y-m-d H:i:s', $order['delivery_time']),
  93. ];
  94. //发送公众号消息
  95. if ($settings['mp_status'] == 1 && $order['user']['mpopen_id'] != '') {
  96. MpMessageService::send($data, $settings['mp_template'], $order['user']['mpopen_id'], $order['app_id']);
  97. }
  98. //发送小程序订阅消息
  99. if ($settings['wx_status'] == 1 && $order['user']['open_id'] != '') {
  100. WxMessageService::send($data, $settings['wx_template'], $order['user']['open_id'], $order['app_id']);
  101. }
  102. //发送短信消息
  103. if ($settings['sms_status'] == 1 && $order['user']['mobile'] != '') {
  104. SmsMessageService::send($data, $settings['sms_template'], $order['user']['mobile'], $order['app_id']);
  105. }
  106. }
  107. /**
  108. * 后台售后单状态通知
  109. * $sence场景,audit 审核 receipt 确认退款
  110. */
  111. public function refund($refund, $order_no, $sence = 'audit')
  112. {
  113. $message = MessageModel::detailByEname('order_refund_user');
  114. $settings = MessageSettingsModel::detailByMessageId($message['message_id']);
  115. if (!$settings) {
  116. return;
  117. }
  118. $data = [
  119. // 订单编号
  120. 'order_no' => $order_no,
  121. // 商品名称
  122. 'product_name' => $refund['order_product']['product_name'],
  123. // 售后类型
  124. 'type' => $refund['type']['text'],
  125. // 处理结果
  126. 'status' => $sence == 'audit'? $refund['is_agree']['text'] : $refund['status']['text'],
  127. // 处理时间
  128. 'process_time' => date('Y-m-d H:i:s', time()),
  129. // 拒绝原因
  130. 'refuse_desc' => $refund['refuse_desc']?: '无',
  131. ];
  132. //发送公众号消息
  133. if ($settings['mp_status'] == 1 && $refund['user']['mpopen_id'] != '') {
  134. MpMessageService::send($data, $settings['mp_template'], $refund['user']['mpopen_id'], $refund['app_id']);
  135. }
  136. //发送小程序订阅消息
  137. if ($settings['wx_status'] == 1 && $refund['user']['open_id'] != '') {
  138. WxMessageService::send($data, $settings['wx_template'], $refund['user']['open_id'], $refund['app_id']);
  139. }
  140. //发送短信消息
  141. if ($settings['sms_status'] == 1 && $refund['user']['mobile'] != '') {
  142. SmsMessageService::send($data, $settings['sms_template'], $refund['user']['mobile'], $refund['app_id']);
  143. }
  144. }
  145. /**
  146. * 分销商入驻审核通知
  147. */
  148. public function agent($agent)
  149. {
  150. $message = MessageModel::detailByEname('agent_apply_user');
  151. $settings = MessageSettingsModel::detailByMessageId($message['message_id']);
  152. if (!$settings) {
  153. return;
  154. }
  155. // 发送模板消息
  156. $reason = '';
  157. if ($agent['apply_status'] == 30) {
  158. $reason = "驳回原因:" . $agent['reject_reason'];
  159. }
  160. $data = [
  161. // 申请时间
  162. 'apply_time' => $agent['apply_time'],
  163. //审核状态
  164. 'apply_status' => $agent['apply_status']['text'],
  165. // 审核时间
  166. 'audit_time' => $agent['audit_time'],
  167. // 拒绝原因
  168. 'reason' => $reason?:'无',
  169. ];
  170. // 获取用户信息
  171. $user = UserModel::detail($agent['user_id']);
  172. //发送公众号消息
  173. if ($settings['mp_status'] == 1 && $user['mpopen_id'] != '') {
  174. MpMessageService::send($data, $settings['mp_template'], $user['mpopen_id'], $user['app_id']);
  175. }
  176. //发送小程序订阅消息
  177. if ($settings['wx_status'] == 1 && $user['open_id'] != '') {
  178. WxMessageService::send($data, $settings['wx_template'], $user['open_id'], $user['app_id']);
  179. }
  180. //发送短信消息
  181. if ($settings['sms_status'] == 1 && $user['mobile'] != '') {
  182. SmsMessageService::send($data, $settings['sms_template'], $user['mobile'], $user['app_id']);
  183. }
  184. }
  185. /**
  186. * 分销商提现审核通知
  187. */
  188. public function cash($cash)
  189. {
  190. $message = MessageModel::detailByEname('agent_cash_user');
  191. $settings = MessageSettingsModel::detailByMessageId($message['message_id']);
  192. if (!$settings) {
  193. return;
  194. }
  195. // 发送模板消息
  196. $reason = '无';
  197. if ($cash['apply_status'] == 30) {
  198. $reason = $cash['reject_reason'];
  199. }
  200. $data = [
  201. // 提现时间
  202. 'create_time' => $cash['create_time'],
  203. //提现方式
  204. 'pay_type' => $cash['pay_type']['text'],
  205. // 提现金额
  206. 'money' => $cash['money'],
  207. // 提现状态
  208. 'apply_status' => $cash['apply_status']['text'],
  209. // 拒绝原因
  210. 'reason' => $reason,
  211. ];
  212. // 获取用户信息
  213. $user = UserModel::detail($cash['user_id']);
  214. //发送公众号消息
  215. if ($settings['mp_status'] == 1 && $user['mpopen_id'] != '') {
  216. MpMessageService::send($data, $settings['mp_template'], $user['mpopen_id'], $user['app_id']);
  217. }
  218. //发送小程序订阅消息
  219. if ($settings['wx_status'] == 1 && $user['open_id'] != '') {
  220. WxMessageService::send($data, $settings['wx_template'], $user['open_id'], $user['app_id']);
  221. }
  222. //发送短信消息
  223. if ($settings['sms_status'] == 1 && $user['mobile'] != '') {
  224. SmsMessageService::send($data, $settings['sms_template'], $user['mobile'], $user['app_id']);
  225. }
  226. }
  227. /**
  228. * 供应商消息通知
  229. */
  230. public function supplierMsg($msg_data)
  231. {
  232. $message = MessageModel::detailByEname('supplier_new_message');
  233. $settings = MessageSettingsModel::detailByMessageId($message['message_id']);
  234. if (!$settings) {
  235. return;
  236. }
  237. // 发送模板消息
  238. $data = [
  239. // 发送时间
  240. 'create_time' => $msg_data['create_time'],
  241. //发送人
  242. 'send_user' => $msg_data['send_user'],
  243. // 消息内容
  244. 'message' => $msg_data['message'],
  245. ];
  246. // 获取用户信息,接收消息的用户
  247. $user = UserModel::detail($msg_data['user_id']);
  248. //发送公众号消息
  249. if ($settings['mp_status'] == 1 && $user['mpopen_id'] != '') {
  250. MpMessageService::send($data, $settings['mp_template'], $user['mpopen_id'], $user['app_id']);
  251. }
  252. //发送小程序订阅消息
  253. if ($settings['wx_status'] == 1 && $user['open_id'] != '') {
  254. WxMessageService::send($data, $settings['wx_template'], $user['open_id'], $user['app_id']);
  255. }
  256. //发送短信消息
  257. if ($settings['sms_status'] == 1 && $user['mobile'] != '') {
  258. SmsMessageService::send($data, $settings['sms_template'], $user['mobile'], $user['app_id']);
  259. }
  260. }
  261. /**
  262. * 格式化商品名称
  263. */
  264. private function formatProductName($productData)
  265. {
  266. $str = '';
  267. foreach ($productData as $product) {
  268. $str .= $product['product_name'] . ' ';
  269. }
  270. return $str;
  271. }
  272. }