WechatTemplateListService.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572
  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\services\message\notice;
  12. use app\jobs\notice\template\TemplateJob;
  13. use app\services\message\NoticeService;
  14. use app\services\message\service\StoreServiceServices;
  15. use app\services\store\SystemStoreStaffServices;
  16. use think\facade\Log;
  17. /**
  18. * 微信模版消息列表
  19. * Created by PhpStorm.
  20. * User: xurongyao <763569752@qq.com>
  21. * Date: 2021/9/22 1:23 PM
  22. */
  23. class WechatTemplateListService extends NoticeService
  24. {
  25. /**
  26. * 判断是否开启权限
  27. * @var bool
  28. */
  29. private $isopend = true;
  30. /**
  31. * 是否开启权限
  32. * @param string $mark
  33. * @return $this
  34. */
  35. public function isOpen(string $mark)
  36. {
  37. $this->isopend = $this->noticeInfo['is_wechat'] === 1;
  38. return $this;
  39. }
  40. /**
  41. * 发送模板消息
  42. * @param string $tempCode
  43. * @param int $uid
  44. * @param array $data
  45. * @param string|null $link
  46. * @param string|null $color
  47. * @return bool|void
  48. */
  49. public function sendTemplate(string $tempCode, int $uid, array $data, string $link = null, string $color = null)
  50. {
  51. try {
  52. $this->isopend = $this->noticeInfo['is_wechat'] === 1;
  53. if ($this->isopend && $uid) {
  54. $openid = $this->getOpenidByUid($uid, 'wechat');
  55. if ($openid) {
  56. //放入队列执行
  57. TemplateJob::dispatchDo('doJob', ['wechat', $openid, $tempCode, $data, $link, $color]);
  58. }
  59. }
  60. } catch (\Exception $e) {
  61. Log::error($e->getMessage());
  62. return true;
  63. }
  64. }
  65. /**
  66. * 支付成功发送模板消息
  67. * @param $order
  68. * @return bool
  69. */
  70. public function sendOrderPaySuccess($uid, $order, $link)
  71. {
  72. return $this->sendTemplate('ORDER_PAY_SUCCESS', $uid, [
  73. 'character_string2' => $order['order_id'],
  74. 'thing3' => $order['storeName'],
  75. 'amount5' => bcadd((string)$order['pay_price'],'0',2),
  76. 'phrase18' => $order['send_name'],
  77. 'time4' => date('Y-m-d H:i:s', $order['pay_time'])
  78. ], $link);
  79. }
  80. /**
  81. * 购买会员成功
  82. * @param $uid
  83. * @param $order
  84. * @return bool|mixed
  85. */
  86. public function sendMemberOrderPaySuccess($uid, $order)
  87. {
  88. return $this->sendTemplate('ORDER_PAY_SUCCESS', $uid, [
  89. 'first' => '亲,购买会员成功,恭喜您成为本平台尊贵会员!',
  90. 'keyword1' => $order['order_id'],
  91. 'keyword2' => $order['pay_price'],
  92. 'remark' => '点击查看订单详情'
  93. ], '/pages/annex/vip_paid/index');
  94. }
  95. /**
  96. * 订单发货
  97. * @param $order
  98. * @param array $data
  99. * @return bool|mixed
  100. */
  101. public function sendOrderDeliver($uid, string $goodsName, $order, array $data)
  102. {
  103. return $this->sendTemplate('ORDER_DELIVER_SUCCESS', $uid, [
  104. 'first' => '亲,您的订单已发货,请注意查收',
  105. 'keyword1' => $order['order_id'],
  106. 'keyword2' => $order['pay_price'],
  107. 'keyword3' => $order['delivery_name'],
  108. 'keyword4' => $order['delivery_id'],
  109. 'remark' => '点击查看订单详情'
  110. ], '/pages/goods/order_details/index?order_id=' . $order['order_id']);
  111. }
  112. /**
  113. * 订单发货
  114. * @param $order
  115. * @param array $data
  116. * @return bool|mixed
  117. */
  118. public function sendOrderPostage($uid, $order, array $data,$storeTitle)
  119. {
  120. return $this->sendTemplate('ORDER_POSTAGE_SUCCESS', $uid, [
  121. 'character_string2' => $order['order_id'],
  122. 'thing4' => $storeTitle,
  123. 'thing13' => $order['delivery_name'],
  124. 'character_string14' => $order['delivery_id'],
  125. 'time12' => date('Y-m-d H:i:s', time())
  126. ], '/pages/goods/order_details/index?order_id=' . $order['order_id']);
  127. }
  128. /**
  129. * 发送客服消息
  130. * @param $order
  131. * @param string|null $link
  132. * @return bool
  133. */
  134. public function sendServiceNotice($uid, $data)
  135. {
  136. return $this->sendTemplate('ADMIN_NOTICE', $uid,
  137. [
  138. 'keyword1' => '新订单',
  139. 'keyword2' => $data['delivery_name'],
  140. 'keyword3' => $data['delivery_id'],
  141. 'first' => '亲,您有新的订单待处理',
  142. 'remark' => '点击查看订单详情'
  143. ], '/pages/goods/order_details/index?order_id=' . $data['order_id']);
  144. }
  145. /**
  146. * 退款发送客服消息
  147. * @param $order
  148. * @param string|null $link
  149. * @return bool
  150. */
  151. public function sendRefundServiceNotice($uid, $data, ?string $link = null)
  152. {
  153. return $this->sendTemplate('ADMIN_NOTICE', $uid, $data, $link);
  154. }
  155. /**
  156. * 确认收货发送模板消息
  157. * @param $order
  158. * @return bool|mixed
  159. */
  160. public function sendOrderTakeSuccess($uid, $order, $title)
  161. {
  162. return $this->sendTemplate('ORDER_TAKE_SUCCESS', $uid, [
  163. 'character_string7' => $order['order_id'],
  164. 'thing6' => $title,
  165. 'keyword4' => date('Y-m-d H:i:s', time())
  166. ]);
  167. }
  168. /**
  169. * 发送退款申请模板消息
  170. * @param array $data
  171. * @param $order
  172. * @return bool|mixed
  173. */
  174. public function sendOrderApplyRefund($uid, $order)
  175. {
  176. return $this->sendTemplate('ORDER_REFUND_STATUS', $uid, [
  177. 'first' => '你有一笔退款订单需要处理',
  178. 'keyword1' => $order['pay_price'],
  179. 'keyword2' => date('Y-m-d H:i:s', $order['add_time']) ,
  180. 'keyword3' => $order['order_id'],
  181. 'remark' => '点击查看退款详情'
  182. ], '/pages/admin/orderDetail/index?id=' . $order['order_id']);
  183. }
  184. /**
  185. * 发送退款模板消息
  186. * @param array $data
  187. * @param $order
  188. * @return bool|mixed
  189. */
  190. public function sendOrderRefundSuccess($uid, array $data, $order)
  191. {
  192. return $this->sendTemplate('ORDER_REFUND_STATUS', $uid, [
  193. 'amount2' => bcadd((string)$data['refund_price'],'0',2),
  194. 'time4' => date('Y-m-d H:i:s', $order['add_time']),
  195. 'character_string5' => $order['order_id']
  196. ], '/pages/goods/order_details/index?order_id=' . $order['order_id']);
  197. }
  198. /**
  199. * 发送退款模板消息
  200. * @param array $data
  201. * @param $order
  202. * @return bool|mixed
  203. */
  204. public function sendOrderRefundNoStatus($uid, $order)
  205. {
  206. return $this->sendTemplate('ORDER_REFUND_FAIL', $uid, [
  207. 'amount5' => $order['pay_price'],
  208. 'character_string8' => $order['order_id'],
  209. 'thing6' =>'审核未通过',
  210. 'time9' => date('Y-m-d H:i:s', $order['add_time'])
  211. ], '/pages/goods/order_details/index?order_id=' . $order['order_id']);
  212. }
  213. /**
  214. * 发送用户充值退款模板消息
  215. * @param array $data
  216. * @param $userRecharge
  217. * @return bool|mixed
  218. */
  219. public function sendRechargeRefundStatus($uid, array $data, $userRecharge)
  220. {
  221. return $this->sendTemplate('ORDER_REFUND_STATUS', $uid, [
  222. 'amount2' => bcadd((string)$data['refund_price'],'0',2),
  223. 'time4' => date('Y-m-d H:i:s', $userRecharge['add_time']),
  224. 'character_string5' => $userRecharge['order_id']
  225. ], '/pages/users/user_bill/index');
  226. }
  227. /**
  228. * 佣金提现失败发送模板消息
  229. * @param $uid
  230. * @param $extract_number
  231. * @param $fail_msg
  232. * @return bool|mixed
  233. */
  234. public function sendUserBalanceChangeFail($uid, $extract_number, $fail_msg)
  235. {
  236. return $this->sendTemplate('USER_BALANCE_CHANGE', $uid, [
  237. 'first' => '提现失败,退回佣金' . $extract_number . '元',
  238. 'keyword1' => '佣金提现',
  239. 'keyword2' => date('Y-m-d H:i:s', time()),
  240. 'keyword3' => $extract_number,
  241. 'remark' => '错误原因:' . $fail_msg
  242. ], '/pages/users/user_spread_money/index?type=1');
  243. }
  244. /**
  245. * 佣金提现成功发送模板消息
  246. * @param $uid
  247. * @param $extractNumber
  248. * @return bool|mixed
  249. */
  250. public function sendUserBalanceChangeSuccess($uid, $extractNumber)
  251. {
  252. return $this->sendTemplate('USER_BALANCE_CHANGE', $uid, [
  253. 'first' => '成功提现佣金' . $extractNumber . '元',
  254. 'keyword1' => '佣金提现',
  255. 'keyword2' => date('Y-m-d H:i:s', time()),
  256. 'keyword3' => $extractNumber,
  257. 'remark' => '点击查看我的佣金明细'
  258. ], '/pages/users/user_spread_money/index?type=1');
  259. }
  260. /**
  261. * 拼团成功发送模板消息
  262. * @param $uid
  263. * @param $order_id
  264. * @param $title
  265. * @return bool|mixed
  266. */
  267. public function sendOrderPinkSuccess($uid, $orderInfo, $title)
  268. {
  269. return $this->sendTemplate('ORDER_USER_GROUPS_SUCCESS', $uid, [
  270. 'first' => '亲,您的拼团已经完成了',
  271. 'keyword1' => $orderInfo['order_id'],
  272. 'keyword2' => $title,
  273. 'keyword3' => $orderInfo['total_price'],
  274. 'keyword4' => '拼团完成',
  275. 'remark' => '点击查看订单详情'
  276. ], '/pages/activity/goods_combination_status/index?id=' . $orderInfo['id']);
  277. }
  278. /**
  279. * 参团成功发送模板消息
  280. * @param $uid
  281. * @param $order_id
  282. * @param $title
  283. * @return bool|mixed
  284. */
  285. public function sendOrderPinkUseSuccess($uid, array $orderInfo, string $title)
  286. {
  287. return $this->sendTemplate('ORDER_USER_GROUPS_SUCCESS', $uid, [
  288. 'first' => '亲,您已成功参与拼团',
  289. 'keyword1' => $orderInfo['order_id'],
  290. 'keyword2' => $title,
  291. 'keyword3' => $orderInfo['total_price'],
  292. 'keyword4' => '拼团完成',
  293. 'remark' => '点击查看订单详情'
  294. ], '/pages/activity/goods_combination_status/index?id=' . $orderInfo['id']);
  295. }
  296. /**
  297. * 取消拼团发送模板消息
  298. * @param $uid
  299. * @param StorePink $order_id
  300. * @param $price
  301. * @param string $title
  302. * @return bool|mixed
  303. */
  304. public function sendOrderPinkClone($uid, $pink, $title)
  305. {
  306. return $this->sendTemplate('ORDER_USER_GROUPS_LOSE', $uid, [
  307. 'first' => '亲,您的拼团取消',
  308. 'keyword1' => $pink['order_id'],
  309. 'keyword2' => $title,
  310. 'keyword3' => '拼团失败',
  311. 'keyword4' => '用户取消拼团',
  312. 'remark' => '点击查看订单详情'
  313. ], '/pages/activity/goods_combination_status/index?id=' . $pink['id']);
  314. }
  315. /**
  316. * 拼团失败发送模板消息
  317. * @param $uid
  318. * @param StorePink $pink
  319. * @param $title
  320. * @return bool|mixed
  321. */
  322. public function sendOrderPinkFial($uid, $pink, $title)
  323. {
  324. return $this->sendTemplate('ORDER_USER_GROUPS_LOSE', $uid, [
  325. 'first' => '亲,您的拼团失败',
  326. 'keyword1' => $pink['order_id'],
  327. 'keyword2' => $title,
  328. 'keyword3' => '拼团失败',
  329. 'keyword4' => '拼团时间超时',
  330. 'remark' => '点击查看订单详情'
  331. ], '/pages/activity/goods_combination_status/index?id=' . $pink['id']);
  332. }
  333. /**
  334. * 开团成功发送模板消息
  335. * @param $uid
  336. * @param StorePink $pink
  337. * @param $title
  338. * @return bool|mixed
  339. */
  340. public function sendOrderPinkOpenSuccess($uid, $pink, $title)
  341. {
  342. return $this->sendTemplate('OPEN_PINK_SUCCESS', $uid, [
  343. 'first' => '您好,您已成功开团!赶紧与小伙伴们分享吧!!!',
  344. 'keyword1' => $title,
  345. 'keyword2' => $pink['nickname'],
  346. 'keyword3' => $pink['people'],
  347. 'keyword4' => date('Y-m-d H:i:s', $pink['stop_time']),
  348. 'remark' => '点击查看订单详情'
  349. ], '/pages/activity/goods_combination_status/index?id=' . $pink['id']);
  350. }
  351. /**
  352. * 砍价成功发送模板消息
  353. * @param $uid
  354. * @param StoreBargain $bargain
  355. * @return bool|mixed
  356. */
  357. public function sendBargainSuccess($uid, $bargain, $bargainUser = [], $bargainUserId = 0)
  358. {
  359. return $this->sendTemplate('BARGAIN_SUCCESS', $uid, [
  360. 'first' => '好腻害!你的朋友们已经帮你砍到底价了!',
  361. 'keyword1' => $bargain['title'],
  362. 'keyword2' => $bargain['price'],
  363. 'keyword3' => $bargain['min_price'],
  364. 'keyword4' => date('Y-m-d H:i:s', time()),
  365. 'remark' => '点击查看订单详情'
  366. ], '/pages/activity/goods_bargain_details/index?id=' . $bargain['id'] . '&bargain=' . $bargainUserId);
  367. }
  368. /**
  369. * 佣金到账发送模板消息
  370. * @param $order
  371. * @return bool
  372. */
  373. public function sendOrderBrokerageSuccess(string $uid, string $brokeragePrice, string $goodsName, string $goodsPrice, $orderTime)
  374. {
  375. return $this->sendTemplate('ORDER_BROKERAGE', $uid, [
  376. 'first' => '亲,您有一笔佣金入账!',
  377. 'keyword1' => $brokeragePrice,//分销佣金
  378. // 'keyword2' => $goodsPrice . "元",//交易金额
  379. 'keyword2' => date('Y-m-d H:i:s', $orderTime),//结算时间
  380. 'remark' => '点击查看订单详情'
  381. ], '/pages/users/user_spread_user/index');
  382. }
  383. /**
  384. * 新订单给客服提醒
  385. * @param $switch
  386. * @param $adminList
  387. * @param $order
  388. * @return bool
  389. */
  390. public function sendAdminNewOrder($order, $store_id = 0)
  391. {
  392. if ($store_id != 0) {
  393. /** @var SystemStoreStaffServices $systemStoreStaffServices */
  394. $systemStoreStaffServices = app()->make(SystemStoreStaffServices::class);
  395. $adminList = $systemStoreStaffServices->getNotifyStoreStaffList($store_id);
  396. }else{
  397. /** @var StoreServiceServices $StoreServiceServices */
  398. $StoreServiceServices = app()->make(StoreServiceServices::class);
  399. $adminList = $StoreServiceServices->getStoreServiceOrderNotice();
  400. }
  401. foreach ($adminList as $item) {
  402. $this->sendTemplate('ADMIN_NOTICE', $item['uid'],
  403. [
  404. 'keyword1' => $order['order_id'],
  405. 'keyword2' => $order['storeName'],
  406. 'keyword3' => '新订单',
  407. 'keyword4' => date('Y-m-d H:i:s', time()),
  408. 'first' => '亲,您有新的订单待处理',
  409. 'remark' => '点击查看订单详情'
  410. ], '/pages/admin/orderDetail/index?id=' . $order['order_id']);
  411. }
  412. return true;
  413. }
  414. /**
  415. * 退款给客服提醒
  416. * @param $switch
  417. * @param $adminList
  418. * @param $order
  419. * @return bool
  420. */
  421. public function sendAdminNewRefund($order, $store_id = 0)
  422. {
  423. if ($store_id != 0) {
  424. /** @var SystemStoreStaffServices $systemStoreStaffServices */
  425. $systemStoreStaffServices = app()->make(SystemStoreStaffServices::class);
  426. $adminList = $systemStoreStaffServices->getNotifyStoreStaffList($store_id);
  427. } else {
  428. /** @var StoreServiceServices $StoreServiceServices */
  429. $StoreServiceServices = app()->make(StoreServiceServices::class);
  430. $adminList = $StoreServiceServices->getStoreServiceOrderNotice();
  431. }
  432. foreach ($adminList as $item) {
  433. $this->sendTemplate('ADMIN_NOTICE', $item['uid'],
  434. [
  435. 'keyword1' => $order['order_id'],
  436. 'keyword2' => $order['storeName'],
  437. 'keyword3' => '退款申请',
  438. 'keyword4' => date('Y-m-d H:i:s', time()),
  439. 'first' => '亲,您有个退款订单待处理',
  440. 'remark' => '点击查看订单详情'
  441. ], '/pages/admin/orderDetail/index?id=' . $order['order_id']);
  442. }
  443. return true;
  444. }
  445. /**
  446. * 充值成功
  447. * @param $uid
  448. * @param $order
  449. * @return bool|mixed
  450. */
  451. public function sendRechargeSuccess($uid, $order)
  452. {
  453. return $this->sendTemplate('RECHARGE_SUCCESS', $uid, [
  454. 'time11' => date('Y-m-d H:i:s', $order['add_time']),
  455. 'amount5' => bcadd((string)$order['price'],'0',2)
  456. ]);
  457. }
  458. /**
  459. * 获得积分
  460. * @param $uid
  461. * @param $order
  462. * @return bool|mixed
  463. */
  464. public function sendUserIntegral($uid, $order,$data)
  465. {
  466. return $this->sendTemplate('INTEGRAL_ACCOUT', $uid, [
  467. 'first' => '亲,您的积分已到账',
  468. 'keyword1' => $data['storeTitle'],
  469. 'keyword2' => $order['pay_price'],
  470. 'keyword3' => $order['use_integral'],
  471. 'keyword4' => $data['give_integral'],
  472. 'keyword5' => date('Y-m-d H:i:s', $order['add_time']),
  473. 'remark' => '点击查看订单详情!'
  474. ], '/pages/goods/order_details/index?order_id=' . $order['order_id']);
  475. }
  476. /**
  477. * 提现成功
  478. * @param $uid
  479. * @param $extractNumber
  480. * @return bool|mixed
  481. */
  482. public function sendUserExtract($uid, $extractNumber)
  483. {
  484. return $this->sendTemplate('USER_EXTRACT', $uid, [
  485. 'amount3' => bcadd((string)$extractNumber,'0',2),
  486. 'time4' => date('Y-m-d H:i:s', time())
  487. ]);
  488. }
  489. /**
  490. * 提现失败
  491. * @param $uid
  492. * @param $extractNumber
  493. * @param $message
  494. * @return bool|mixed
  495. */
  496. public function sendExtractFail($uid, $extractNumber, $message)
  497. {
  498. return $this->sendTemplate('USER_EXTRACT_FAIL', $uid, [
  499. 'first' => '亲,您的提现申请未通过',
  500. 'keyword1' => $extractNumber,
  501. 'keyword2' => date('Y-m-d H:i:s', time()),
  502. 'keyword3' => $message,
  503. 'remark' => '请联系管理员!'
  504. ]);
  505. }
  506. /**
  507. * 服务消息(新)
  508. * @param $openid
  509. * @param $data
  510. * @param $url
  511. * @return bool|mixed
  512. */
  513. public function sendServiceNoticeNew($openid, $data, $url)
  514. {
  515. return $this->sendTemplate('ADMIN_NOTICE', $openid, [
  516. 'first' => $data['first'],
  517. 'keyword1' => $data['keyword1'],
  518. 'keyword2' => $data['keyword2'],
  519. 'keyword3' => $data['keyword3'],
  520. 'remark' => $data['remark']
  521. ], $url);
  522. }
  523. /**虚拟商品发货消息
  524. * @param $uid
  525. * @param $data
  526. * @param $url
  527. * @return bool|mixed
  528. */
  529. public function sendKamiDeliverGoods($uid,$value,$url)
  530. {
  531. return $this->sendTemplate('KAMI_DELIVER_GOODS_CODE', $uid, [
  532. 'first' => '亲,你的虚拟商品购买成功',
  533. 'keyword1' => '虚拟数字卡密',
  534. 'keyword2' => $value,
  535. 'remark' => '感谢您的支持!'
  536. ], $url);
  537. }
  538. }