You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

208 lines
7.3 KiB

5 years ago
5 years ago
5 years ago
5 years ago
  1. <?php
  2. namespace App\Service;
  3. use App\Model\Order;
  4. use App\Model\OrderGoods;
  5. use App\Model\OrderMain;
  6. use App\Model\Store;
  7. use App\Model\Users;
  8. use EasyWeChat\Factory;
  9. use Hyperf\Guzzle\CoroutineHandler;
  10. class MiniprogramService implements MiniprogramServiceInterface
  11. {
  12. /**
  13. * @inheritDoc
  14. */
  15. public function sendTemMsgForOnlineOrder($order_main_id)
  16. {
  17. // 查询订单信息
  18. $order = OrderMain::find($order_main_id);
  19. $payTypes = ['1' => '微信支付', '2' => '余额支付', '3' => '积分支付', '4' => '货到付款'];
  20. $address_store = $order['address'] . ';' .$order['name']. ';'. substr_replace($order['tel'],'****',3,4);
  21. $address = $order['address'] . ';' .$order['name']. ';'. $order['tel'];
  22. // 查询子订单,用于发消息给商户
  23. $order_children = Order::query()->select(['id', 'order_num', 'store_id', 'money', 'time'])
  24. ->where(['order_main_id' => $order_main_id])
  25. ->get()
  26. ->toArray();
  27. $goods_temp_all = [];
  28. foreach ($order_children as $key => &$item) {
  29. // 订单商品
  30. $order_goods = OrderGoods::query()->select(['name', 'number', 'spec', 'good_unit'])
  31. ->where(['order_id' => $item['id']])
  32. ->get()
  33. ->toArray();
  34. $goods_temp = [];
  35. foreach ($order_goods as $k => &$goods) {
  36. array_push($goods_temp, $goods['name']."*".$goods['number']."/".($goods['spec']?:$goods['good_unit']));
  37. array_push($goods_temp_all, $goods['name']."*".$goods['number']."/".($goods['spec']?:$goods['good_unit']));
  38. }
  39. // 商户/门店的openid
  40. $store = Store::query()->select(['id', 'name', 'user_id'])
  41. ->where(['id' => $item['store_id']])
  42. ->first()->toArray();
  43. $store['openid'] = Users::query()
  44. ->where(['id' => $store['user_id']])
  45. ->value('openid');
  46. // 模板数据
  47. $data_store = [
  48. 'first' => ['您有新的外卖订单!订单编号:'.$item['order_num'], '#ff0000'],
  49. 'keyword' => [
  50. ["您的外卖订单详情:\r\n".implode(";\r\n",$goods_temp), '#ff0000'],
  51. $item['money'],
  52. $payTypes[$order['pay_type']],
  53. $item['time']?:'',
  54. $address_store,
  55. ],
  56. 'remark' => [$order['note'], '#4e6ef2']
  57. ];
  58. $ret_store = $this->sendTempMsg($store['openid'], '-M7DG_ACwJxqdAvyvJuAnPpx4xaLf3VkkN0fckno71c',$data_store);
  59. }
  60. // 模板数据发送消息给用户
  61. $data_user = [
  62. 'first' => '您好,下单成功!订单编号:'.$order['order_num'],
  63. 'keyword' => [
  64. implode(";\r\n", $goods_temp_all),
  65. $order['money'],
  66. $payTypes[$order['pay_type']],
  67. date('Y-m-d H:i:s', $order['time_add']),
  68. $address,
  69. ],
  70. 'remark' => '感谢您的光临,欢迎下次再来!'
  71. ];
  72. // 获取用户openid,发送给用户
  73. $user_openid = Users::query()->where(['id' => $order['user_id']])->value('openid');
  74. $ret_user = $this->sendTempMsg($user_openid,'-M7DG_ACwJxqdAvyvJuAnPpx4xaLf3VkkN0fckno71c', $data_user);
  75. }
  76. /**
  77. * @inheritDoc
  78. */
  79. public function sendTemMsgForOfflineOrder($order_main_id)
  80. {
  81. // 查询子订单,用于发消息给商户
  82. $order_children = Order::query()->select(['id', 'order_num', 'store_id', 'money', 'time'])
  83. ->where(['order_main_id' => $order_main_id])
  84. ->get()
  85. ->toArray();
  86. foreach ($order_children as $key => &$item) {
  87. // 商户/门店的openid
  88. $store = Store::query()->select(['id', 'name', 'user_id'])
  89. ->where(['id' => $item['store_id']])
  90. ->first()->toArray();
  91. $store['openid'] = Users::query()
  92. ->where(['id' => $store['user_id']])
  93. ->value('openid');
  94. // 模板数据
  95. $data_store = [
  96. 'first' => '您有新订单收入!订单编号:'.$item['order_num'],
  97. 'keyword' => [
  98. $store['name']?:'',
  99. $item['time']?:'',
  100. '暂无',
  101. $item['money']
  102. ],
  103. 'remark' => '感谢您的使用!'
  104. ];
  105. $ret_store = $this->sendTempMsg($store['openid'], 'lxVbC6PVpKbiO44bYqLmacl-BaME70D47Q0jn2Link0',$data_store);
  106. }
  107. }
  108. /**
  109. * @inheritDoc
  110. */
  111. public function sendTemMsgForAward($money, $note, $openid, $time)
  112. {
  113. // 模板数据发送消息给用户
  114. $data_user = [
  115. 'first' => '恭喜!您有一笔新的奖励收入!',
  116. 'keyword' => [
  117. $money,
  118. $note,
  119. $time
  120. ],
  121. 'remark' => '感谢您的使用!'
  122. ];
  123. // 获取用户openid,发送给用户
  124. $ret_user = $this->sendTempMsg($openid,'ypZ7xdHUjWrRG8P-MD42dhpp6kUlh4Unoh7eTSrLZEg', $data_user);
  125. }
  126. /**
  127. * @inheritDoc
  128. */
  129. public function sendTempMsg($openid, $template_id, $data, $redirect_url = '', $applet_config = ['appid' => '', 'pagepath' => ''])
  130. {
  131. // 先拼个基础的
  132. $template = [
  133. 'touser' => $openid,
  134. 'mp_template_msg' => [
  135. 'appid' => env('OFFICIAL_APP_ID'),
  136. 'template_id' => $template_id,
  137. 'url' => $redirect_url,
  138. ]
  139. ];
  140. // 看看有没有小程序跳转的要求
  141. $template['mp_template_msg']['miniprogram'] = $applet_config;
  142. // 重点来了,拼接关键数据data
  143. if (!is_array($data)) { # 数组都不是,请回去
  144. return false;
  145. }
  146. if (is_array($data['first'])) {
  147. $template['mp_template_msg']['data']['first']['value'] = $data['first'][0] ?? '';
  148. $template['mp_template_msg']['data']['first']['color'] = $data['first'][1] ?? '';
  149. } else {
  150. $template['mp_template_msg']['data']['first']['value'] = $data['first'];
  151. }
  152. if (isset($data['keyword'])&&is_array($data['keyword'])) {
  153. foreach ($data['keyword'] as $key => &$keyword) {
  154. $index = $key+1;
  155. if (is_array($keyword)) {
  156. $template['mp_template_msg']['data']['keyword'.$index]['value'] = $keyword[0] ?? '';
  157. $template['mp_template_msg']['data']['keyword'.$index]['color'] = $keyword[1] ?? '';
  158. } else {
  159. $template['mp_template_msg']['data']['keyword'.$index]['value'] = $keyword;
  160. }
  161. }
  162. }
  163. if (is_array($data['remark'])) {
  164. $template['mp_template_msg']['data']['remark']['value'] = $data['remark'][0] ?? '';
  165. $template['mp_template_msg']['data']['remark']['color'] = $data['remark'][1] ?? '';
  166. } else {
  167. $template['mp_template_msg']['data']['remark']['value'] = $data['remark'];
  168. }
  169. $app = Factory::miniProgram(config('wxtempmsg'));
  170. $app['guzzle_handler'] = CoroutineHandler::class;
  171. $app->uniform_message->send($template);
  172. }
  173. }