OrderMessage.php 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace app\model\order;
  11. use app\model\member\Member;
  12. use app\model\message\Sms;
  13. use app\model\BaseModel;
  14. use addon\wechat\model\Message as WechatMessage;
  15. use addon\weapp\model\Message as WeappMessage;
  16. use addon\aliapp\model\Message as AliappMessage;
  17. use app\model\shop\ShopAcceptMessage;
  18. /**
  19. * 订单消息操作
  20. *
  21. * @author Administrator
  22. *
  23. */
  24. class OrderMessage extends BaseModel
  25. {
  26. /************************************************ 会员消息 start ************************************************************/
  27. /**
  28. * 订单催付通知
  29. * @param $data
  30. */
  31. public function messageOrderUrgePayment($data)
  32. {
  33. trace('进入订单催付消息发送');
  34. $order_info = model('order')->getInfo([ [ "order_id", "=", $data[ 'order_id' ] ] ], "full_address,site_id,create_time,address,order_no,mobile,member_id,order_type,create_time,order_name,order_money");
  35. //计算订单自动关闭时间
  36. $config_model = new Config();
  37. $order_config_result = $config_model->getOrderEventTimeConfig($order_info[ 'site_id' ]);
  38. $order_config = $order_config_result[ "data" ];
  39. $execute_time = $order_info[ 'create_time' ] + $order_config[ "value" ][ "auto_close" ] * 60; //自动关闭时间
  40. //会员信息
  41. $member_model = new Member();
  42. $member_info = $member_model->getMemberInfo([ [ "member_id", "=", $order_info[ "member_id" ] ] ])[ 'data' ];
  43. // 发送短信
  44. if (!empty($member_info) && !empty($member_info[ 'mobile' ])) {
  45. $var_parse = array (
  46. 'goodsname' => replaceSpecialChar(str_sub($order_info[ 'order_name' ])),//商品名称
  47. 'expiretime' => date('d', $execute_time) . '日' . date('H', $execute_time) . '时' . date('i', $execute_time) . '分'
  48. );
  49. $data[ "sms_account" ] = $member_info[ "mobile" ];//手机号
  50. $data[ "var_parse" ] = $var_parse;
  51. $sms_model = new Sms();
  52. $res = $sms_model->sendMessage($data);
  53. trace($res, '订单催付短信发送结果');
  54. }
  55. // 公众号模板消息
  56. if (!empty($member_info) && !empty($member_info[ "wx_openid" ])) {
  57. $wechat_model = new WechatMessage();
  58. $data[ "openid" ] = $member_info[ "wx_openid" ];
  59. $data[ "template_data" ] = [
  60. 'keyword1' => $order_info[ 'order_no' ],
  61. 'keyword2' => $order_info[ 'order_name' ],
  62. 'keyword3' => '待支付',
  63. 'keyword4' => '请在' . time_to_date($execute_time) . '前完成支付'
  64. ];
  65. $data[ "page" ] = $this->handleUrl($order_info[ 'order_type' ], $data[ 'order_id' ]);
  66. $res = $wechat_model->sendMessage($data);
  67. trace($res, '订单催付公众号模板消息发送结果');
  68. }
  69. //发送订阅消息
  70. if (!empty($member_info) && !empty($member_info[ "weapp_openid" ])) {
  71. $weapp_model = new WeappMessage();
  72. $data[ "openid" ] = $member_info[ "weapp_openid" ];
  73. $data[ "template_data" ] = [
  74. 'character_string1' => [
  75. 'value' => $order_info[ 'order_no' ]
  76. ],
  77. 'thing2' => [
  78. 'value' => $order_info[ 'order_name' ]
  79. ],
  80. 'character_string3' => [
  81. 'value' => $order_info[ 'order_money' ],
  82. ]
  83. ];
  84. $data[ "page" ] = $this->handleUrl($order_info[ 'order_type' ], $data[ 'order_id' ]);
  85. $res = $weapp_model->sendMessage($data);
  86. trace($res, '订单催付小程序订阅消息发送结果');
  87. }
  88. }
  89. /**
  90. * 消息发送——支付成功
  91. * @param $params
  92. * @return array|mixed|void
  93. */
  94. public function messagePaySuccess($params)
  95. {
  96. $member_model = new Member();
  97. $member_info_result = $member_model->getMemberInfo([ [ "member_id", "=", $params[ "member_id" ] ] ]);
  98. $member_info = $member_info_result[ "data" ];
  99. // 发送短信
  100. if (!empty($member_info) && !empty($member_info[ 'mobile' ])) {
  101. $var_parse = [
  102. "orderno" => $params[ 'order_no' ],
  103. "username" => replaceSpecialChar($member_info[ "nickname" ]),
  104. "ordermoney" => $params[ "order_money" ],
  105. ];
  106. $params[ "sms_account" ] = $member_info[ "mobile" ] ?? '';//手机号
  107. $params[ "var_parse" ] = $var_parse;
  108. $sms_model = new Sms();
  109. $res = $sms_model->sendMessage($params);
  110. trace($res, '订单支付短信发送结果');
  111. }
  112. //绑定微信公众号才发送
  113. if (!empty($member_info) && !empty($member_info[ "wx_openid" ])) {
  114. $wechat_model = new WechatMessage();
  115. $data = $params;
  116. $data[ "openid" ] = $member_info[ "wx_openid" ];
  117. $data[ "template_data" ] = [
  118. 'keyword1' => time_to_date($params[ 'create_time' ]),
  119. 'keyword2' => $params[ 'order_no' ],
  120. 'keyword3' => str_sub($params[ 'order_name' ]),
  121. 'keyword4' => $params[ 'order_money' ],
  122. ];
  123. $data[ "page" ] = $this->handleUrl($params[ 'order_type' ], $params[ "order_id" ]);
  124. $res = $wechat_model->sendMessage($data);
  125. trace($res, '订单支付公众号发送结果');
  126. }
  127. //发送订阅消息
  128. if (!empty($member_info) && !empty($member_info[ "weapp_openid" ])) {
  129. $weapp_model = new WeappMessage();
  130. $data = $params;
  131. $data[ "openid" ] = $member_info[ "weapp_openid" ];
  132. $data[ "template_data" ] = [
  133. 'character_string1' => [
  134. 'value' => $params[ 'order_no' ]
  135. ],
  136. 'time2' => [
  137. 'value' => time_to_date($params[ 'create_time' ])
  138. ],
  139. 'thing4' => [
  140. 'value' => str_sub($params[ 'order_name' ])
  141. ],
  142. 'amount3' => [
  143. 'value' => $params[ 'order_money' ]
  144. ],
  145. ];
  146. $data[ "page" ] = $this->handleUrl($params[ 'order_type' ], $params[ "order_id" ]);
  147. $res = $weapp_model->sendMessage($data);
  148. trace($res, '订单支付小程序订阅号发送结果');
  149. }
  150. //发送支付宝订阅消息
  151. if (!empty($member_info) && !empty($member_info[ "ali_openid" ]) && addon_is_exit('aliapp', $params['site_id'])) {
  152. $aliapp_model = new AliappMessage();
  153. $data = $params;
  154. $data[ "openid" ] = $member_info[ "aliapp_openid" ];
  155. $data[ "template_data" ] = [
  156. 'keyword1' => [
  157. 'value' => '已支付'
  158. ],
  159. 'keyword2' => [
  160. 'value' => time_to_date($params[ 'create_time' ])
  161. ],
  162. 'keyword3' => [
  163. 'value' => str_sub($params[ 'order_name' ])
  164. ],
  165. 'keyword4' => [
  166. 'value' => '¥'.$params[ 'order_money' ]
  167. ]
  168. ];
  169. $data[ "page" ] = $this->handleUrl($params[ 'order_type' ], $params[ "order_id" ]);
  170. $res = $aliapp_model->sendMessage($data);
  171. trace($res, '订单支付支付宝小程序订阅号发送结果');
  172. }
  173. }
  174. /**
  175. * 订单关闭提醒
  176. * @param $data
  177. */
  178. public function messageOrderClose($data)
  179. {
  180. //发送短信
  181. $sms_model = new Sms();
  182. $order_id = $data[ "order_id" ];
  183. $order_info = model('order')->getInfo([ [ "order_id", "=", $order_id ] ], "order_type,order_no,mobile,member_id,order_name,create_time,order_money,close_time");
  184. $member_model = new Member();
  185. $member_info_result = $member_model->getMemberInfo([ [ "member_id", "=", $order_info[ "member_id" ] ] ]);
  186. $member_info = $member_info_result[ "data" ];
  187. $var_parse = array (
  188. "orderno" => $order_info[ "order_no" ],//商品名称
  189. );
  190. $data[ "sms_account" ] = $member_info[ "mobile" ];//手机号
  191. $data[ "var_parse" ] = $var_parse;
  192. $sms_model->sendMessage($data);
  193. if (!empty($member_info) && !empty($member_info[ "wx_openid" ])) {
  194. $wechat_model = new WechatMessage();
  195. $data[ "openid" ] = $member_info[ "wx_openid" ];
  196. $data[ "template_data" ] = [
  197. 'keyword1' => str_sub($order_info[ 'order_name' ]),
  198. 'keyword2' => $order_info[ 'order_no' ],
  199. 'keyword3' => time_to_date($order_info[ 'create_time' ]),
  200. 'keyword4' => $order_info[ 'order_money' ],
  201. 'keyword5' => time_to_date($order_info[ 'close_time' ])
  202. ];
  203. $data[ "page" ] = $this->handleUrl($order_info[ 'order_type' ], $order_id);
  204. $wechat_model->sendMessage($data);
  205. }
  206. //发送订阅消息
  207. if (!empty($member_info) && !empty($member_info[ "weapp_openid" ])) {
  208. $weapp_model = new WeappMessage();
  209. $data[ "openid" ] = $member_info[ "weapp_openid" ];
  210. $data[ "template_data" ] = [
  211. 'thing4' => [
  212. 'value' => str_sub($order_info[ 'order_name' ])
  213. ],
  214. 'character_string1' => [
  215. 'value' => $order_info[ 'order_no' ]
  216. ],
  217. 'time3' => [
  218. 'value' => time_to_date($order_info[ 'create_time' ])
  219. ],
  220. 'amount6' => [
  221. 'value' => $order_info[ 'order_money' ]
  222. ],
  223. 'time5' => [
  224. 'value' => time_to_date($order_info[ 'close_time' ])
  225. ],
  226. ];
  227. $data[ "page" ] = $this->handleUrl($order_info[ 'order_type' ], $order_id);
  228. $weapp_model->sendMessage($data);
  229. }
  230. }
  231. /**
  232. * 买家订单完成通知商家
  233. * @param $data
  234. */
  235. public function messageBuyerOrderComplete($data)
  236. {
  237. //发送短信
  238. // $sms_model = new Sms();
  239. $order_id = $data[ "order_id" ];
  240. $order_info = model('order')->getInfo([ [ "order_id", "=", $order_id ] ], "order_type,order_no,mobile,member_id,order_name,create_time,finish_time");
  241. $shop_accept_message_model = new ShopAcceptMessage();
  242. $result = $shop_accept_message_model->getShopAcceptMessageList();
  243. $list = $result[ 'data' ];
  244. //发送模板消息
  245. if (!empty($list)) {
  246. foreach ($list as $v) {
  247. if (!empty($v[ "wx_openid" ])) {
  248. $wechat_model = new WechatMessage();
  249. $data[ "openid" ] = $v[ "wx_openid" ];
  250. $data[ "template_data" ] = [
  251. 'keyword1' => $order_info[ 'order_no' ],
  252. 'keyword2' => str_sub($order_info[ 'order_name' ]),
  253. ];
  254. $data[ "page" ] = $this->handleMobileShopUrl($order_info[ 'order_type' ], $order_id);
  255. $wechat_model->sendMessage($data);
  256. }
  257. }
  258. }
  259. }
  260. /**
  261. * 订单完成提醒
  262. * @param $data
  263. */
  264. public function messageOrderComplete($data)
  265. {
  266. //发送短信
  267. $sms_model = new Sms();
  268. $order_id = $data[ "order_id" ];
  269. $order_info = model('order')->getInfo([ [ "order_id", "=", $order_id ] ], "order_type,order_no,mobile,member_id,order_name,create_time,finish_time");
  270. $member_model = new Member();
  271. $member_info_result = $member_model->getMemberInfo([ [ "member_id", "=", $order_info[ "member_id" ] ] ]);
  272. $member_info = $member_info_result[ "data" ];
  273. $var_parse = array (
  274. "orderno" => $order_info[ "order_no" ],//商品名称
  275. );
  276. $data[ "sms_account" ] = $member_info[ "mobile" ];//手机号
  277. $data[ "var_parse" ] = $var_parse;
  278. $sms_model->sendMessage($data);
  279. //发送模板消息
  280. $wechat_model = new WechatMessage();
  281. $data[ "openid" ] = $member_info[ "wx_openid" ];
  282. $data[ "template_data" ] = [
  283. 'keyword1' => $order_info[ 'order_no' ],
  284. 'keyword2' => str_sub($order_info[ 'order_name' ]),
  285. 'keyword3' => time_to_date($order_info[ 'create_time' ]),
  286. ];
  287. $data[ "page" ] = $this->handleUrl($order_info[ 'order_type' ], $order_id);
  288. $wechat_model->sendMessage($data);
  289. //发送订阅消息
  290. if (!empty($member_info) && !empty($member_info[ "weapp_openid" ])) {
  291. $weapp_model = new WeappMessage();
  292. $data[ "openid" ] = $member_info[ "weapp_openid" ];
  293. $data[ "template_data" ] = [
  294. 'character_string1' => [
  295. 'value' => $order_info[ 'order_no' ]
  296. ],
  297. 'thing2' => [
  298. 'value' => str_sub($order_info[ 'order_name' ])
  299. ],
  300. 'time4' => [
  301. 'value' => time_to_date($order_info[ 'finish_time' ])
  302. ]
  303. ];
  304. $data[ "page" ] = $this->handleUrl($order_info[ 'order_type' ], $order_id);
  305. $weapp_model->sendMessage($data);
  306. }
  307. }
  308. /**
  309. * 订单发货提醒
  310. * @param $data
  311. */
  312. public function messageOrderDelivery($data)
  313. {
  314. //发送短信
  315. $sms_model = new Sms();
  316. $order_id = $data[ "order_id" ];
  317. $order_info = model('order')->getInfo([ [ "order_id", "=", $order_id ] ], "order_type,order_no,mobile,member_id,order_name,goods_num,order_money,delivery_time");
  318. $member_model = new Member();
  319. $member_info_result = $member_model->getMemberInfo([ [ "member_id", "=", $order_info[ "member_id" ] ] ]);
  320. $member_info = $member_info_result[ "data" ];
  321. $var_parse = array (
  322. "orderno" => $order_info[ "order_no" ],//商品名称
  323. );
  324. $data[ "sms_account" ] = $member_info[ "mobile" ];//手机号
  325. $data[ "var_parse" ] = $var_parse;
  326. $sms_model->sendMessage($data);
  327. //发送模板消息
  328. $wechat_model = new WechatMessage();
  329. $data[ "openid" ] = $member_info[ "wx_openid" ];
  330. $data[ "template_data" ] = [
  331. 'keyword1' => $order_info[ 'order_no' ],
  332. 'keyword2' => str_sub($order_info[ 'order_name' ]),
  333. 'keyword3' => numberFormat($order_info[ 'goods_num' ]),
  334. 'keyword4' => $order_info[ 'order_money' ],
  335. 'keyword5' => time_to_date($order_info[ 'delivery_time' ]),
  336. ];
  337. $data[ "page" ] = $this->handleUrl($order_info[ 'order_type' ], $order_id);
  338. $wechat_model->sendMessage($data);
  339. //发送订阅消息
  340. if (!empty($member_info) && !empty($member_info[ "weapp_openid" ])) {
  341. $weapp_model = new WeappMessage();
  342. $data[ "openid" ] = $member_info[ "weapp_openid" ];
  343. $data[ "template_data" ] = [
  344. 'character_string2' => [
  345. 'value' => $order_info[ 'order_no' ]
  346. ],
  347. 'thing1' => [
  348. 'value' => str_sub($order_info[ 'order_name' ])
  349. ],
  350. 'amount7' => [
  351. 'value' => $order_info[ 'order_money' ]
  352. ],
  353. 'date3' => [
  354. 'value' => time_to_date($order_info[ 'delivery_time' ])
  355. ]
  356. ];
  357. $data[ "page" ] = $this->handleUrl($order_info[ 'order_type' ], $order_id);
  358. $weapp_model->sendMessage($data);
  359. }
  360. }
  361. /**
  362. * 订单收货提醒
  363. * @param $data
  364. */
  365. public function messageOrderTakeDelivery($data)
  366. {
  367. //发送短信
  368. $sms_model = new Sms();
  369. $order_id = $data[ "order_id" ];
  370. $order_info = model('order')->getInfo([ [ "order_id", "=", $order_id ] ], "order_type,order_no,mobile,member_id,full_address,address,name,order_name,sign_time");
  371. $member_model = new Member();
  372. $member_info_result = $member_model->getMemberInfo([ [ "member_id", "=", $order_info[ "member_id" ] ] ]);
  373. $member_info = $member_info_result[ "data" ];
  374. $var_parse = array (
  375. "orderno" => $order_info[ "order_no" ],//商品名称
  376. );
  377. $data[ "sms_account" ] = $member_info[ "mobile" ];//手机号
  378. $data[ "var_parse" ] = $var_parse;
  379. $sms_model->sendMessage($data);
  380. //发送模板消息
  381. $wechat_model = new WechatMessage();
  382. $data[ "openid" ] = $member_info[ "wx_openid" ];
  383. $data[ "template_data" ] = [
  384. 'keyword1' => $order_info[ 'full_address' ] . $order_info[ 'address' ],
  385. 'keyword2' => $order_info[ "name" ],
  386. 'keyword3' => $order_info[ 'order_no' ],
  387. 'keyword4' => $order_info[ 'order_name' ],
  388. 'keyword5' => time_to_date($order_info[ 'sign_time' ]),
  389. ];
  390. $data[ "page" ] = $this->handleUrl($order_info[ 'order_type' ], $order_id);
  391. $wechat_model->sendMessage($data);
  392. //发送订阅消息
  393. if (!empty($member_info) && !empty($member_info[ "weapp_openid" ])) {
  394. $weapp_model = new WeappMessage();
  395. $data[ "openid" ] = $member_info[ "weapp_openid" ];
  396. $data[ "template_data" ] = [
  397. 'character_string1' => [
  398. 'value' => $order_info[ 'order_no' ]
  399. ],
  400. 'thing2' => [
  401. 'value' => str_sub($order_info[ 'order_name' ])
  402. ],
  403. 'time7' => [
  404. 'value' => time_to_date($order_info[ 'sign_time' ])
  405. ],
  406. 'thing9' => [
  407. 'value' => str_sub($order_info[ 'name' ])
  408. ]
  409. ];
  410. $data[ "page" ] = $this->handleUrl($order_info[ 'order_type' ], $order_id);
  411. $weapp_model->sendMessage($data);
  412. }
  413. }
  414. /**
  415. * 订单退款同意提醒
  416. * @param $data
  417. */
  418. public function messageOrderRefundAgree($data)
  419. {
  420. //发送短信
  421. $sms_model = new Sms();
  422. $order_id = $data[ "order_id" ];
  423. $order_info = model('order')->getInfo([ [ "order_id", "=", $order_id ] ], "order_type,order_no,mobile,member_id");
  424. $member_model = new Member();
  425. $member_info_result = $member_model->getMemberInfo([ [ "member_id", "=", $order_info[ "member_id" ] ] ]);
  426. $member_info = $member_info_result[ "data" ];
  427. $order_goods_info = model('order_goods')->getInfo([ [ "order_goods_id", "=", $data[ "order_goods_id" ] ] ], "refund_apply_money,refund_time,refund_action_time");
  428. $var_parse = array (
  429. "orderno" => $order_info[ "order_no" ],//商品名称
  430. );
  431. $data[ "sms_account" ] = $member_info[ "mobile" ];//手机号
  432. $data[ "var_parse" ] = $var_parse;
  433. $sms_model->sendMessage($data);
  434. //发送模板消息
  435. $wechat_model = new WechatMessage();
  436. $data[ "openid" ] = $member_info[ "wx_openid" ];
  437. $data[ "template_data" ] = [
  438. 'keyword1' => $order_info[ 'order_no' ],
  439. 'keyword2' => $order_goods_info[ "refund_apply_money" ],
  440. 'keyword3' => time_to_date(time()),
  441. ];
  442. $data[ "page" ] = $this->handleUrl($order_info[ 'order_type' ], $order_id);
  443. $wechat_model->sendMessage($data);
  444. //发送订阅消息
  445. if (!empty($member_info) && !empty($member_info[ "weapp_openid" ])) {
  446. $weapp_model = new WeappMessage();
  447. $data[ "openid" ] = $member_info[ "weapp_openid" ];
  448. $data[ "template_data" ] = [
  449. 'character_string3' => [
  450. 'value' => $order_info[ 'order_no' ]
  451. ],
  452. 'amount1' => [
  453. 'value' => $order_goods_info[ "refund_apply_money" ]
  454. ],
  455. 'phrase7' => [
  456. 'value' => '成功'
  457. ]
  458. ];
  459. $data[ "page" ] = $this->handleUrl($order_info[ 'order_type' ], $order_id);
  460. $weapp_model->sendMessage($data);
  461. }
  462. }
  463. /**
  464. * 订单退款拒绝提醒
  465. * @param $data
  466. */
  467. public function messageOrderRefundRefuse($data)
  468. {
  469. //发送短信
  470. $sms_model = new Sms();
  471. $order_id = $data[ "order_id" ];
  472. $order_info = model('order')->getInfo([ [ "order_id", "=", $order_id ] ], "order_type,order_no,mobile,member_id");
  473. $order_goods_info = model('order_goods')->getInfo([ [ "order_goods_id", "=", $data[ "order_goods_id" ] ] ], "refund_apply_money,refund_time,refund_action_time");
  474. $member_model = new Member();
  475. $member_info_result = $member_model->getMemberInfo([ [ "member_id", "=", $order_info[ "member_id" ] ] ]);
  476. $member_info = $member_info_result[ "data" ];
  477. $var_parse = array (
  478. "orderno" => $order_info[ "order_no" ],//商品名称
  479. );
  480. $data[ "sms_account" ] = $member_info[ "mobile" ];//手机号
  481. $data[ "var_parse" ] = $var_parse;
  482. $sms_model->sendMessage($data);
  483. //发送模板消息
  484. $wechat_model = new WechatMessage();
  485. $data[ "openid" ] = $member_info[ "wx_openid" ];
  486. $data[ "template_data" ] = [
  487. 'keyword1' => $order_info[ 'order_no' ],
  488. 'keyword2' => $order_goods_info[ "refund_apply_money" ],
  489. 'keyword3' => time_to_date($order_goods_info[ 'refund_action_time' ]),
  490. ];
  491. $data[ "page" ] = $this->handleUrl($order_info[ 'order_type' ], $order_id);
  492. $wechat_model->sendMessage($data);
  493. //发送订阅消息
  494. if (!empty($member_info) && !empty($member_info[ "weapp_openid" ])) {
  495. $weapp_model = new WeappMessage();
  496. $data[ "openid" ] = $member_info[ "weapp_openid" ];
  497. $data[ "template_data" ] = [
  498. 'character_string4' => [
  499. 'value' => $order_info[ 'order_no' ]
  500. ],
  501. 'amount3' => [
  502. 'value' => $order_goods_info[ "refund_apply_money" ]
  503. ]
  504. ];
  505. $data[ "page" ] = $this->handleUrl($order_info[ 'order_type' ], $order_id);
  506. $weapp_model->sendMessage($data);
  507. }
  508. }
  509. /**
  510. * 核销码过期提醒
  511. * @param $data
  512. */
  513. public function messageVerifyCodeExpire($data)
  514. {
  515. // 发送短信
  516. $sms_model = new Sms();
  517. // 商品表
  518. $goods_virtual_info = model('goods_virtual')->getInfo([ [ "order_id", "=", $data[ "relate_id" ] ] ]);
  519. // 总核销次数
  520. $total_verify_num = model('goods_virtual')->getCount([ [ "order_id", "=", $data[ "relate_id" ] ] ]);
  521. // 已核销次数
  522. $verify_num = model('goods_virtual')->getCount([ [ "order_id", "=", $data[ "relate_id" ] ], [ 'is_veirfy', '=', 1 ] ]);
  523. // 剩余次数
  524. $residue = $total_verify_num - $verify_num;
  525. // 用户信息
  526. $member_model = new Member();
  527. $member_info_result = $member_model->getMemberInfo([ [ "member_id", "=", $goods_virtual_info[ 'member_id' ] ] ]);
  528. $member_info = $member_info_result[ "data" ];
  529. $order_info = model('order')->getInfo([ [ "order_id", "=", $goods_virtual_info[ "order_id" ] ] ], 'mobile,order_no,order_name,order_type,pay_time');
  530. trace($residue);
  531. if ($residue > 0) {
  532. // 公众号模板消息
  533. //绑定微信公众号才发送
  534. if (!empty($member_info) && !empty($member_info[ "wx_openid" ])) {
  535. $wechat_model = new WechatMessage();
  536. $data[ "openid" ] = $member_info[ "wx_openid" ];
  537. $data[ "template_data" ] = [
  538. 'keyword1' => $order_info[ 'order_no' ],
  539. 'keyword2' => $order_info[ 'order_name' ],
  540. 'keyword3' => '已过期'
  541. ];
  542. $wechat_model->sendMessage($data);
  543. }
  544. //发送订阅消息
  545. if (!empty($member_info) && !empty($member_info[ "weapp_openid" ])) {
  546. $weapp_model = new WeappMessage();
  547. $data[ "openid" ] = $member_info[ "weapp_openid" ];
  548. $data[ "template_data" ] = [
  549. 'character_string1' => [
  550. 'value' => $order_info[ 'order_no' ],
  551. ],
  552. 'time2' => [
  553. 'value' => time_to_date($order_info[ 'pay_time' ])
  554. ],
  555. 'time3' => [
  556. 'value' => time_to_date(time())
  557. ],
  558. 'thing5' => [
  559. 'value' => '您的订单核销码已过期',
  560. ],
  561. ];
  562. $weapp_model->sendMessage($data);
  563. }
  564. // 短信通知
  565. if (!empty($member_info) && !empty($member_info[ 'mobile' ])) {
  566. //"desc" => '您购买的'.$goods_virtual_info['sku_name'].'将在'.date('Y-m-d H:i:s',$goods_virtual_info['expire_time']).'到期',//商品名称,
  567. $var_parse = [
  568. "sitename" => replaceSpecialChar($data[ 'site_info' ][ 'site_name' ]),
  569. "sku_name" => $goods_virtual_info[ 'sku_name' ]
  570. ];
  571. $data[ "sms_account" ] = $member_info[ "mobile" ];//手机号
  572. $data[ "var_parse" ] = $var_parse;
  573. $sms_model->sendMessage($data);
  574. }
  575. }
  576. }
  577. /**
  578. * 核销商品临期提醒
  579. */
  580. public function messageVerifyOrderOutTime($data)
  581. {
  582. // 商品表
  583. $goods_virtual_info = model('goods_virtual')->getInfo([ [ "order_id", "=", $data[ "order_id" ] ] ]);
  584. // 总核销次数
  585. $total_verify_num = model('goods_virtual')->getCount([ [ "order_id", "=", $data[ "order_id" ] ] ]);
  586. // 已核销次数
  587. $verify_num = model('goods_virtual')->getCount([ [ "order_id", "=", $data[ "order_id" ] ], [ 'is_veirfy', '=', 1 ] ]);
  588. // 剩余次数
  589. $residue = $total_verify_num - $verify_num;
  590. // 用户信息
  591. $member_model = new Member();
  592. $member_info_result = $member_model->getMemberInfo([ [ "member_id", "=", $goods_virtual_info[ 'member_id' ] ] ]);
  593. $member_info = $member_info_result[ "data" ];
  594. // 手机号
  595. $order_info = model('order')->getInfo([ [ "order_id", "=", $data[ "order_id" ] ] ], 'order_type,mobile,order_no,order_name');
  596. if ($residue > 0) {
  597. // 公众号模板消息
  598. //绑定微信公众号才发送
  599. if (!empty($member_info) && !empty($member_info[ "wx_openid" ])) {
  600. $wechat_model = new WechatMessage();
  601. $data[ "openid" ] = $member_info[ "wx_openid" ];
  602. $data[ "template_data" ] = [
  603. 'keyword1' => $order_info[ 'order_no' ],
  604. 'keyword2' => $order_info[ 'order_name' ],
  605. 'keyword3' => '未核销'
  606. ];
  607. $wechat_model->sendMessage($data);
  608. }
  609. //发送订阅消息
  610. if (!empty($member_info) && !empty($member_info[ "weapp_openid" ])) {
  611. // 核销码临近到期时间(小时)
  612. $config_model = new Config();
  613. $verify_config = $config_model->getOrderVerifyConfig($data[ 'site_id' ], 'shop')[ 'data' ][ 'value' ];
  614. $order_verify_out_time = $verify_config[ 'order_verify_time_out' ] ?? 24;
  615. $time_strtime = $order_verify_out_time * 3600;
  616. $weapp_model = new WeappMessage();
  617. $data[ "openid" ] = $member_info[ "weapp_openid" ];
  618. $data[ "template_data" ] = [
  619. 'thing1' => [
  620. 'value' => $order_info[ 'order_name' ]
  621. ],
  622. 'date2' => [
  623. 'value' => time_to_date(time() + $time_strtime),
  624. ],
  625. 'thing3' => [
  626. 'value' => '请在到期前核销,以免影响您的使用!',
  627. ]
  628. ];
  629. $weapp_model->sendMessage($data);
  630. }
  631. // 短信消息
  632. $sms = new Sms();
  633. $var_parse = [
  634. 'username' => $member_info[ 'username' ],//用户名称
  635. 'sku_name' => $goods_virtual_info[ 'sku_name' ],//商品名称
  636. 'expire_time' => date('Y-m-d H:i:s', $goods_virtual_info[ 'expire_time' ])//到期时间
  637. ];
  638. $data[ "sms_account" ] = $order_info[ 'phone' ];//手机号
  639. $data[ "var_parse" ] = $var_parse;
  640. $sms->sendMessage($data);
  641. }
  642. }
  643. /**
  644. * 订单核销通知
  645. * @param $data
  646. */
  647. public function messageOrderVerify($data)
  648. {
  649. //发送短信
  650. $sms_model = new Sms();
  651. $order_id = $data[ "order_id" ];
  652. $order_info = model('order')->getInfo([ [ "order_id", "=", $order_id ] ], "order_type,order_no,mobile,member_id,order_name,goods_num,sign_time,delivery_store_name");
  653. $member_model = new Member();
  654. $member_info_result = $member_model->getMemberInfo([ [ "member_id", "=", $order_info[ "member_id" ] ] ]);
  655. $member_info = $member_info_result[ "data" ];
  656. $var_parse = array (
  657. "orderno" => $order_info[ "order_no" ],//订单编号
  658. );
  659. $data[ "sms_account" ] = $member_info[ "mobile" ];//手机号
  660. $data[ "var_parse" ] = $var_parse;
  661. $sms_model->sendMessage($data);
  662. // 公众号模板消息
  663. //绑定微信公众号才发送
  664. if (!empty($member_info) && !empty($member_info[ "wx_openid" ])) {
  665. $wechat_model = new WechatMessage();
  666. $data[ "openid" ] = $member_info[ "wx_openid" ];
  667. $data[ "template_data" ] = [
  668. 'keyword1' => $order_info[ 'order_name' ],//用户名称
  669. 'keyword2' => 1,
  670. 'keyword3' => time_to_date(time()),
  671. ];
  672. $wechat_model->sendMessage($data);
  673. }
  674. //发送订阅消息
  675. if (!empty($member_info) && !empty($member_info[ "weapp_openid" ])) {
  676. $weapp_model = new WeappMessage();
  677. $data[ "openid" ] = $member_info[ "weapp_openid" ];
  678. $data[ "template_data" ] = [
  679. 'phrase1' => [
  680. 'value' => '已核销'
  681. ],
  682. 'time2' => [
  683. 'value' => time_to_date(time()),
  684. ],
  685. 'character_string3' => [
  686. 'value' => $order_info[ 'order_no' ],
  687. ]
  688. ];
  689. $data[ "page" ] = $this->handleUrl($order_info[ 'order_type' ], $data[ 'order_id' ]);
  690. $weapp_model->sendMessage($data);
  691. }
  692. }
  693. /************************************************ 会员消息 end ************************************************************/
  694. /**
  695. * 买家发起退款,卖家通知
  696. * @param $data
  697. */
  698. public function messageOrderRefundApply($data)
  699. {
  700. //发送短信
  701. $sms_model = new Sms();
  702. $order_goods_id = $data[ "order_goods_id" ];
  703. $order_goods_info = model('order_goods')->getInfo([ 'order_goods_id' => $order_goods_id ], '*');
  704. $order_info = model('order')->getInfo([ [ "order_id", "=", $order_goods_info[ 'order_id' ] ] ], "order_no,mobile,member_id,site_id,name,order_type");
  705. $member_model = new Member();
  706. $member_info_result = $member_model->getMemberInfo([ [ "member_id", "=", $order_info[ "member_id" ] ] ]);
  707. $member_info = $member_info_result[ "data" ];
  708. $var_parse = array (
  709. "username" => replaceSpecialChar($member_info[ "nickname" ]),//会员名
  710. "orderno" => $order_info[ "order_no" ],//订单编号
  711. "goodsname" => mb_substr(replaceSpecialChar($order_goods_info[ "sku_name" ]), 0, 25, 'UTF8'),//商品名称
  712. "refundno" => $order_goods_info[ "refund_no" ],//退款编号
  713. "refundmoney" => $order_goods_info[ "refund_apply_money" ],//退款申请金额
  714. "refundreason" => replaceSpecialChar($order_goods_info[ "refund_reason" ]),//退款原因
  715. );
  716. $data[ "var_parse" ] = $var_parse;
  717. // $site_id = $data['site_id'];
  718. // $shop_info = model("shop")->getInfo([["site_id", "=", $site_id]], "mobile,email");
  719. // $message_data["sms_account"] = $shop_info["mobile"];//手机号
  720. $shop_accept_message_model = new ShopAcceptMessage();
  721. $result = $shop_accept_message_model->getShopAcceptMessageList();
  722. $list = $result[ 'data' ];
  723. if (!empty($list)) {
  724. foreach ($list as $v) {
  725. $message_data = $data;
  726. $message_data[ "sms_account" ] = $v[ "mobile" ];//手机号
  727. $sms_model->sendMessage($message_data);
  728. if ($v[ 'wx_openid' ] != '') {
  729. $wechat_model = new WechatMessage();
  730. $data[ "openid" ] = $v[ 'wx_openid' ];
  731. $data[ "template_data" ] = [
  732. 'keyword1' => $order_goods_info[ 'order_no' ],
  733. 'keyword2' => time_to_date($order_goods_info[ 'refund_action_time' ]),
  734. 'keyword3' => $order_goods_info[ 'refund_apply_money' ],
  735. ];
  736. $data[ "page" ] = 'pages/order/refund/detail?order_goods_id=' . $order_goods_id;
  737. $wechat_model->sendMessage($data);
  738. }
  739. }
  740. }
  741. }
  742. /**
  743. * 买家已退款,卖家通知
  744. * @param $data
  745. */
  746. public function messageOrderRefundDelivery($data)
  747. {
  748. //发送短信
  749. $sms_model = new Sms();
  750. $order_id = $data[ 'order_goods_info' ][ "order_id" ];
  751. $order_info = model('order')->getInfo([ [ "order_id", "=", $order_id ] ], "order_no");
  752. $var_parse = array (
  753. "orderno" => $order_info[ "order_no" ],//商品名称
  754. );
  755. // $site_id = $data['site_id'];
  756. // $shop_info = model("shop")->getInfo([["site_id", "=", $site_id]], "mobile,email");
  757. // $message_data["sms_account"] = $shop_info["mobile"];//手机号
  758. $data[ "var_parse" ] = $var_parse;
  759. $shop_accept_message_model = new ShopAcceptMessage();
  760. $result = $shop_accept_message_model->getShopAcceptMessageList();
  761. $list = $result[ 'data' ];
  762. if (!empty($list)) {
  763. foreach ($list as $v) {
  764. $message_data = $data;
  765. $message_data[ "sms_account" ] = $v[ "mobile" ];//手机号
  766. $sms_model->sendMessage($message_data);
  767. if ($v[ 'wx_openid' ] != '') {
  768. $wechat_model = new WechatMessage();
  769. $data[ "openid" ] = $v[ 'wx_openid' ];
  770. $data[ "template_data" ] = [
  771. 'keyword1' => $data[ 'order_goods_info' ][ 'order_no' ],
  772. 'keyword2' => mb_substr($data[ 'order_goods_info' ][ 'sku_name' ], 0, 7, 'utf-8'),
  773. 'keyword3' => $data[ 'order_goods_info' ][ 'num' ],
  774. 'keyword4' => $data[ 'order_goods_info' ][ 'refund_real_money' ],
  775. ];
  776. $data[ "page" ] = 'pages/order/refund/detail?order_goods_id=' . $data[ 'order_goods_info' ][ 'order_goods_id' ];
  777. $wechat_model->sendMessage($data);
  778. }
  779. }
  780. }
  781. }
  782. /**
  783. * 买家支付成功,卖家通知
  784. * @param $data
  785. */
  786. public function messageBuyerPaySuccess($data)
  787. {
  788. //发送短信
  789. $sms_model = new Sms();
  790. $var_parse = array (
  791. "orderno" => $data[ "order_no" ],//订单编号
  792. "ordermoney" => $data[ "order_money" ],//退款申请金额
  793. );
  794. // $site_id = $data['site_id'];
  795. // $shop_info = model("shop")->getInfo([["site_id", "=", $site_id]], "mobile,email");
  796. // $message_data["sms_account"] = $shop_info["mobile"];//手机号
  797. $data[ "var_parse" ] = $var_parse;
  798. $shop_accept_message_model = new ShopAcceptMessage();
  799. $result = $shop_accept_message_model->getShopAcceptMessageList();
  800. $list = $result[ 'data' ];
  801. if (!empty($list)) {
  802. foreach ($list as $v) {
  803. $message_data = $data;
  804. $message_data[ "sms_account" ] = $v[ "mobile" ];//手机号
  805. $sms_model->sendMessage($message_data);
  806. if ($v[ 'wx_openid' ] != '') {
  807. $wechat_model = new WechatMessage();
  808. $data[ "openid" ] = $v[ 'wx_openid' ];
  809. $data[ "template_data" ] = [
  810. 'keyword1' => time_to_date($data[ 'pay_time' ]),
  811. 'keyword2' => $data[ 'order_no' ],
  812. 'keyword3' => str_sub($data[ 'order_name' ]),
  813. 'keyword4' => $data[ 'order_money' ],
  814. ];
  815. $data[ "page" ] = $this->handleMobileShopUrl($data[ 'order_type' ], $data[ 'order_id' ]);
  816. $wechat_model->sendMessage($data);
  817. }
  818. }
  819. }
  820. }
  821. /**
  822. * 处理订单链接
  823. * @param $order_type
  824. * @param $order_id
  825. * @return string
  826. */
  827. public function handleUrl($order_type, $order_id)
  828. {
  829. switch ( $order_type ) {
  830. case 2:
  831. return 'pages/order/detail_pickup?order_id=' . $order_id;
  832. break;
  833. case 3:
  834. return 'pages/order/detail_local_delivery?order_id=' . $order_id;
  835. break;
  836. case 4:
  837. return 'pages_tool/order/detail_virtual?order_id=' . $order_id;
  838. break;
  839. default:
  840. return 'pages/order/detail?order_id=' . $order_id;
  841. break;
  842. }
  843. }
  844. /**
  845. * 处理商家端订单页面路径
  846. * @param $order_type
  847. * @param $order_id
  848. * @return string
  849. */
  850. public function handleMobileShopUrl($order_type, $order_id)
  851. {
  852. switch ( $order_type ) {
  853. case 2:
  854. return 'pages/order/detail/store?order_id=' . $order_id . '&template=store';
  855. break;
  856. case 3:
  857. return 'pages/order/detail/local?order_id=' . $order_id . '&template=local';
  858. break;
  859. case 4:
  860. return 'pages/order/detail/virtual?order_id=' . $order_id . '&template=virtual';
  861. break;
  862. default:
  863. return 'pages/order/detail/basis?order_id=' . $order_id . '&template=basis';
  864. break;
  865. }
  866. }
  867. }