WechatTemplateJob.php 15 KB

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