MessageService.php 9.4 KB

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