WechatTemplateJob.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\jobs;
  12. use crmeb\basic\BaseJobs;
  13. use crmeb\services\template\Template;
  14. use crmeb\traits\QueueTrait;
  15. use think\facade\Log;
  16. use think\facade\Route;
  17. /**
  18. * Class WechatTemplateJob
  19. * @package crmeb\jobs
  20. */
  21. class WechatTemplateJob extends BaseJobs
  22. {
  23. use QueueTrait;
  24. /**
  25. * 发送模板消息
  26. * @param string $tempCode 模板消息常量名称
  27. * @param $uid 用户uid
  28. * @param array $data 模板内容
  29. * @param string $link 跳转链接
  30. * @param string|null $color 文字颜色
  31. * @return bool|mixed
  32. */
  33. public function sendTemplate(string $tempCode, $openid, array $data, string $link = null, string $color = null)
  34. {
  35. try {
  36. if (!$openid) return true;
  37. $template = new Template('wechat');
  38. $template->to($openid);
  39. $template->color($color);
  40. if ($link) {
  41. $url =
  42. sys_config('site_url') . Route::buildUrl($link)
  43. ->suffix('')
  44. ->domain(false)->build();
  45. $template->url($url);
  46. }
  47. return $template->send($tempCode, $data);
  48. } catch (\Exception $e) {
  49. Log::error($e->getMessage());
  50. return true;
  51. }
  52. }
  53. /**
  54. * 支付成功发送模板消息
  55. * @param $order
  56. * @return bool
  57. */
  58. public function sendOrderPaySuccess($openid, $order)
  59. {
  60. return $this->sendTemplate('ORDER_PAY_SUCCESS', $openid, [
  61. 'first' => '亲,您购买的商品已支付成功',
  62. 'keyword1' => $order['order_id'],
  63. 'keyword2' => $order['pay_price'],
  64. 'remark' => '点击查看订单详情'
  65. ], '/pages/users/order_details/index?order_id=' . $order['order_id']);
  66. }
  67. /**
  68. * 购买会员成功
  69. * @param $openid
  70. * @param $order
  71. * @return bool|mixed
  72. */
  73. public function sendMemberOrderPaySuccess($openid, $order)
  74. {
  75. return $this->sendTemplate('ORDER_PAY_SUCCESS', $openid, [
  76. 'first' => '亲,购买会员成功,恭喜您成为本平台尊贵会员!',
  77. 'keyword1' => $order['order_id'],
  78. 'keyword2' => $order['pay_price'],
  79. 'remark' => '点击查看订单详情'
  80. ], '/pages/annex/vip_paid/index');
  81. }
  82. /**
  83. * 订单发货
  84. * @param $order
  85. * @param array $data
  86. * @return bool|mixed
  87. */
  88. public function sendOrderDeliver($openid, string $goodsName, $order, array $data)
  89. {
  90. return $this->sendTemplate('ORDER_DELIVER_SUCCESS', $openid, [
  91. 'keyword1' => $goodsName,
  92. 'keyword2' => $order['pay_type'] == 'offline' ? '线下支付' : date('Y/m/d H:i', $order['pay_time']),
  93. 'keyword3' => $order['user_address'],
  94. 'keyword4' => $data['delivery_name'],
  95. 'keyword5' => $data['delivery_id'],
  96. 'first' => '亲,您的订单已发货,请注意查收',
  97. 'remark' => '点击查看订单详情'
  98. ], '/pages/users/order_details/index?order_id=' . $order['order_id']);
  99. }
  100. /**
  101. * 订单发货
  102. * @param $order
  103. * @param array $data
  104. * @return bool|mixed
  105. */
  106. public function sendOrderPostage($openid, $order, array $data)
  107. {
  108. return $this->sendTemplate('ORDER_POSTAGE_SUCCESS', $openid, [
  109. 'keyword1' => $order['order_id'],
  110. 'keyword2' => $data['delivery_name'],
  111. 'keyword3' => $data['delivery_id'],
  112. 'first' => '亲,您的订单已发货,请注意查收',
  113. 'remark' => '点击查看订单详情'
  114. ], '/pages/users/order_details/index?order_id=' . $order['order_id']);
  115. }
  116. /**
  117. * 发送客服消息
  118. * @param $order
  119. * @param string|null $link
  120. * @return bool
  121. */
  122. public function sendServiceNotice($openid, $data)
  123. {
  124. return $this->sendTemplate('ADMIN_NOTICE', $openid,
  125. [
  126. 'keyword1' => '新订单',
  127. 'keyword2' => $data['delivery_name'],
  128. 'keyword3' => $data['delivery_id'],
  129. 'first' => '亲,您有新的订单待处理',
  130. 'remark' => '点击查看订单详情'
  131. ], '/pages/users/order_details/index?order_id=' . $data['order_id']);
  132. }
  133. /**
  134. * 退款发送客服消息
  135. * @param $order
  136. * @param string|null $link
  137. * @return bool
  138. */
  139. public function sendRefundServiceNotice($openid, $data, ?string $link = null)
  140. {
  141. return $this->sendTemplate('ADMIN_NOTICE', $openid, $data, $link);
  142. }
  143. /**
  144. * 确认收货发送模板消息
  145. * @param $order
  146. * @return bool|mixed
  147. */
  148. public function sendOrderTakeSuccess($openid, $order, $title)
  149. {
  150. return $this->sendTemplate('ORDER_TAKE_SUCCESS', $openid, [
  151. 'first' => '亲,您的订单已收货',
  152. 'keyword1' => $order['order_id'],
  153. 'keyword2' => '已收货',
  154. 'keyword3' => date('Y-m-d H:i:s', time()),
  155. 'keyword4' => $title,
  156. 'remark' => '感谢您的光临!'
  157. ]);
  158. }
  159. /**
  160. * 发送退款申请模板消息
  161. * @param array $data
  162. * @param $order
  163. * @return bool|mixed
  164. */
  165. public function sendOrderApplyRefund($openid, $order)
  166. {
  167. return $this->sendTemplate('ORDER_REFUND_STATUS', $openid, [
  168. 'first' => '你有一笔退款订单需要处理',
  169. 'keyword1' => $order['order_id'],
  170. 'keyword2' => $order['status'],
  171. 'keyword3' => date('Y-m-d H:i:s', $order['add_time']),
  172. 'remark' => '点击查看退款详情'
  173. ], '/pages/admin/orderDetail/index?id=' . $order['order_id']);
  174. }
  175. /**
  176. * 发送退款模板消息
  177. * @param array $data
  178. * @param $order
  179. * @return bool|mixed
  180. */
  181. public function sendOrderRefundSuccess($openid, array $data, $order)
  182. {
  183. return $this->sendTemplate('ORDER_REFUND_STATUS', $openid, [
  184. 'first' => '亲,您购买的商品已退款,本次退款' . $data['refund_price'] . '金额',
  185. 'keyword1' => $order['order_id'],
  186. 'keyword2' => $order['pay_price'],
  187. 'keyword3' => date('Y-m-d H:i:s', $order['add_time']),
  188. 'remark' => '点击查看订单详情'
  189. ], '/pages/users/order_details/index?order_id=' . $order['order_id']);
  190. }
  191. /**
  192. * 发送退款模板消息
  193. * @param array $data
  194. * @param $order
  195. * @return bool|mixed
  196. */
  197. public function sendOrderRefundNoStatus($openid, $order)
  198. {
  199. return $this->sendTemplate('ORDER_REFUND_STATUS', $openid, [
  200. 'first' => '亲,您的退款申请未申请通过',
  201. 'keyword1' => $order['order_id'],
  202. 'keyword2' => $order['pay_price'],
  203. 'keyword3' => date('Y-m-d H:i:s', $order['add_time']),
  204. 'remark' => '点击查看订单详情'
  205. ], '/pages/users/order_details/index?order_id=' . $order['order_id']);
  206. }
  207. /**
  208. * 发送用户充值退款模板消息
  209. * @param array $data
  210. * @param $userRecharge
  211. * @return bool|mixed
  212. */
  213. public function sendRechargeRefundStatus($openid, array $data, $userRecharge)
  214. {
  215. return $this->sendTemplate('ORDER_REFUND_STATUS', $openid, [
  216. 'first' => '亲,您充值的金额已退款,本次退款' .
  217. $data['refund_price'] . '金额',
  218. 'keyword1' => $userRecharge['order_id'],
  219. 'keyword2' => $userRecharge['price'],
  220. 'keyword3' => date('Y-m-d H:i:s', $userRecharge['add_time']),
  221. 'remark' => '点击查看订单详情'
  222. ], '/pages/users/user_bill/index');
  223. }
  224. /**
  225. * 拼团成功发送模板消息
  226. * @param $uid
  227. * @param $order_id
  228. * @param $title
  229. * @return bool|mixed
  230. */
  231. public function sendOrderPinkSuccess($openid, $order_id, $pinkId, $title)
  232. {
  233. return $this->sendTemplate('ORDER_USER_GROUPS_SUCCESS', $openid, [
  234. 'first' => '亲,您的拼团已经完成了',
  235. 'keyword1' => $order_id,
  236. 'keyword2' => $title,
  237. 'remark' => '点击查看订单详情'
  238. ], '/pages/activity/goods_combination_status/index?id=' . $pinkId);
  239. }
  240. /**
  241. * 参团成功发送模板消息
  242. * @param $uid
  243. * @param $order_id
  244. * @param $title
  245. * @return bool|mixed
  246. */
  247. public function sendOrderPinkUseSuccess($openid, string $order_id, string $title, int $pink_id)
  248. {
  249. return $this->sendTemplate('ORDER_USER_GROUPS_SUCCESS', $openid, [
  250. 'first' => '亲,您已成功参与拼团',
  251. 'keyword1' => $order_id,
  252. 'keyword2' => $title,
  253. 'remark' => '点击查看订单详情'
  254. ], '/pages/activity/goods_combination_status/index?id=' . $pink_id);
  255. }
  256. /**
  257. * 取消拼团发送模板消息
  258. * @param $uid
  259. * @param StorePink $order_id
  260. * @param $price
  261. * @param string $title
  262. * @return bool|mixed
  263. */
  264. public function sendOrderPinkClone($openid, $pink, $title)
  265. {
  266. return $this->sendTemplate('ORDER_USER_GROUPS_LOSE', $openid, [
  267. 'first' => '亲,您的拼团取消',
  268. 'keyword1' => $title,
  269. 'keyword2' => $pink->price,
  270. 'keyword3' => $pink->price,
  271. 'remark' => '点击查看订单详情'
  272. ], '/pages/activity/goods_combination_status/index?id=' . $pink->id);
  273. }
  274. /**
  275. * 拼团失败发送模板消息
  276. * @param $uid
  277. * @param StorePink $pink
  278. * @param $title
  279. * @return bool|mixed
  280. */
  281. public function sendOrderPinkFial($openid, $pink, $title)
  282. {
  283. return $this->sendTemplate('ORDER_USER_GROUPS_LOSE', $openid, [
  284. 'first' => '亲,您的拼团失败',
  285. 'keyword1' => $title,
  286. 'keyword2' => $pink->price,
  287. 'keyword3' => $pink->price,
  288. 'remark' => '点击查看订单详情'
  289. ], '/pages/activity/goods_combination_status/index?id=' . $pink->id);
  290. }
  291. /**
  292. * 开团成功发送模板消息
  293. * @param $uid
  294. * @param StorePink $pink
  295. * @param $title
  296. * @return bool|mixed
  297. */
  298. public function sendOrderPinkOpenSuccess($openid, $pink, $title)
  299. {
  300. return $this->sendTemplate('OPEN_PINK_SUCCESS', $openid, [
  301. 'first' => '您好,您已成功开团!赶紧与小伙伴们分享吧!!!',
  302. 'keyword1' => $title,
  303. 'keyword2' => $pink['total_price'],
  304. 'keyword3' => $pink['people'],
  305. 'remark' => '点击查看订单详情'
  306. ], '/pages/activity/goods_combination_status/index?id=' . $pink['id']);
  307. }
  308. /**
  309. * 砍价成功发送模板消息
  310. * @param $uid
  311. * @param StoreBargain $bargain
  312. * @return bool|mixed
  313. */
  314. public function sendBargainSuccess($openid, $bargain, $bargainUser = [], $bargainUserId = 0)
  315. {
  316. return $this->sendTemplate('BARGAIN_SUCCESS', $openid, [
  317. 'first' => '好腻害!你的朋友们已经帮你砍到底价了!',
  318. 'keyword1' => $bargain['title'],
  319. 'keyword2' => $bargain['min_price'],
  320. 'remark' => '点击查看订单详情'
  321. ], '/pages/activity/goods_bargain_details/index?id=' . $bargain['id'] . '&bargain=' . $bargainUserId);
  322. }
  323. /**
  324. * 佣金到账发送模板消息
  325. * @param $order
  326. * @return bool
  327. */
  328. public function sendOrderBrokerageSuccess(string $openid, string $brokeragePrice, string $goodsName, string $goodsPrice, $orderTime)
  329. {
  330. return $this->sendTemplate('ORDER_BROKERAGE', $openid, [
  331. 'first' => '亲,您有一笔佣金入账!',
  332. 'keyword1' => $brokeragePrice,//分销佣金
  333. 'keyword2' => $goodsPrice . "元",//交易金额
  334. 'keyword3' => date('Y-m-d H:i:s', $orderTime),//结算时间
  335. 'remark' => '点击查看订单详情'
  336. ], '/pages/users/user_spread_user/index');
  337. }
  338. /** 绑定推广关系发送消息提醒
  339. * @param string $openid
  340. * @param string $userName
  341. * @return bool|mixed
  342. */
  343. public function sendBindSpreadUidSuccess(string $openid, string $userName)
  344. {
  345. return $this->sendTemplate('BIND_SPREAD_UID', $openid, [
  346. 'first' => '恭喜,加入您的团队',
  347. 'keyword1' => $userName,
  348. 'keyword2' => date('Y-m-d H:i:s', time()),
  349. 'remark' => '授人以鱼不如授人以渔,一起分享赚钱吧,点击查看详情!'
  350. ], '/pages/users/user_spread_user/index');
  351. }
  352. }