Message.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\weapp\model;
  11. use app\model\BaseModel;
  12. /**
  13. * 微信小程序订阅消息
  14. */
  15. class Message extends BaseModel
  16. {
  17. /**
  18. * 消息分页列表
  19. * @param array $condition
  20. * @param int $site_id
  21. * @param int $page
  22. * @param int $page_size
  23. * @param string $order
  24. * @return array
  25. */
  26. public function getMessagePageList($condition = [], $site_id = 0, $page = 1, $page_size = PAGE_LIST_ROWS, $order = '')
  27. {
  28. $list = model('message_template')->pageList($condition, 'id,keywords,title,message_type,weapp_json', $order, $page, $page_size);
  29. if ($site_id > 0) {
  30. if (!empty($list[ 'list' ])) {
  31. foreach ($list[ 'list' ] as $k => $v) {
  32. $list[ 'list' ][ $k ]['message_info'] = json_decode($v['weapp_json'], true);
  33. $message_info = model('message')->getInfo([ [ "keywords", "=", $v[ 'keywords' ] ], [ 'site_id', '=', $site_id ] ], 'weapp_is_open,weapp_template_id');
  34. $list[ 'list' ][ $k ][ 'weapp_is_open' ] = $message_info == null ? 0 : $message_info[ 'weapp_is_open' ];
  35. $list[ 'list' ][ $k ][ 'weapp_template_id' ] = $message_info == null ? 0 : $message_info[ 'weapp_template_id' ];
  36. }
  37. }
  38. }
  39. return $this->success($list);
  40. }
  41. /**
  42. * 获取微信模板消息id
  43. * @param string $keywords
  44. * todo 批量获取模板消息
  45. */
  46. public function getWeappTemplateNo(string $keywords, $site_id, $weapp_is_open = 0)
  47. {
  48. $keyword = explode(',', $keywords);
  49. $wechat = new Weapp($site_id);
  50. if ($weapp_is_open == 1) {
  51. // 启用
  52. foreach ($keyword as $item) {
  53. $shop_message = model('message')->getInfo([ [ 'keywords', '=', $item ], [ "site_id", "=", $site_id ] ], 'weapp_template_id');
  54. $data = [
  55. 'weapp_is_open' => $weapp_is_open,
  56. 'site_id' => $site_id,
  57. 'keywords' => $item,
  58. ];
  59. // 开启时没有模板则进行添加
  60. if (!empty($shop_message)) {
  61. if (empty($shop_message[ 'weapp_template_id' ])) {
  62. $template_info = model('message_template')->getInfo([ [ 'keywords', '=', $item ], [ 'weapp_json', '<>', '' ] ], 'weapp_json');
  63. if (!empty($template_info)) {
  64. $template = json_decode($template_info[ 'weapp_json' ], true);
  65. $res = $wechat->getTemplateId($template);
  66. if (isset($res[ 'errcode' ]) && $res[ 'errcode' ] == 0) {
  67. $data[ 'weapp_template_id' ] = $res[ 'priTmplId' ];
  68. } else {
  69. return $this->error($res, $res[ 'errmsg' ]);
  70. }
  71. }
  72. }
  73. model('message')->update($data, [ [ 'keywords', '=', $item ], [ "site_id", "=", $site_id ] ]);
  74. } else {
  75. $template_info = model('message_template')->getInfo([ [ 'keywords', '=', $item ], [ 'weapp_json', '<>', '' ] ], 'weapp_json');
  76. if (!empty($template_info)) {
  77. $template = json_decode($template_info[ 'weapp_json' ], true);
  78. $res = $wechat->getTemplateId($template);
  79. if (isset($res[ 'errcode' ]) && $res[ 'errcode' ] == 0) {
  80. $data[ 'weapp_template_id' ] = $res[ 'priTmplId' ];
  81. } else {
  82. return $this->error($res, $res[ 'errmsg' ]);
  83. }
  84. }
  85. model('message')->add($data);
  86. }
  87. }
  88. } else if ($weapp_is_open == 0) {
  89. // 关闭
  90. foreach ($keyword as $item) {
  91. $shop_message = model('message')->getInfo([ [ 'keywords', '=', $item ], [ "site_id", "=", $site_id ] ], 'weapp_template_id');
  92. if (!empty($shop_message)) {
  93. model('message')->update([ 'weapp_is_open' => $weapp_is_open ], [ [ 'keywords', '=', $item ], [ "site_id", "=", $site_id ] ]);
  94. } else {
  95. model('message')->add([
  96. 'site_id' => $site_id,
  97. 'keywords' => $item,
  98. 'weapp_is_open' => $weapp_is_open
  99. ]);
  100. }
  101. }
  102. } else {
  103. // 获取
  104. $list = model('message_template')->getList([ [ 'keywords', 'in', $keyword ], [ 'weapp_json', '<>', '' ] ], 'keywords,weapp_json');
  105. if (!empty($list)) {
  106. foreach ($list as $item) {
  107. $template = json_decode($item[ 'weapp_json' ], true);
  108. $res = $wechat->getTemplateId($template);
  109. if (isset($res[ 'errcode' ]) && $res[ 'errcode' ] != 0) return $this->error($res, $res[ 'errmsg' ]);
  110. $shop_message = model('message')->getInfo([ [ 'keywords', '=', $item[ 'keywords' ] ], [ "site_id", "=", $site_id ] ], 'weapp_template_id');
  111. if (!empty($shop_message)) {
  112. model('message')->update([ 'weapp_template_id' => $res[ 'priTmplId' ] ], [ [ 'keywords', '=', $item[ 'keywords' ] ], [ "site_id", "=", $site_id ] ]);
  113. } else {
  114. model('message')->add([
  115. 'site_id' => $site_id,
  116. 'keywords' => $item[ 'keywords' ],
  117. 'weapp_template_id' => $res[ 'priTmplId' ]
  118. ]);
  119. }
  120. }
  121. }
  122. }
  123. return $this->success();
  124. }
  125. /**
  126. * 发送订阅消息
  127. * @param array $param
  128. */
  129. public function sendMessage(array $param)
  130. {
  131. try {
  132. $site_id = $param['site_id'] ? $param['site_id'] : 1;
  133. $support_type = $param['message_info']["support_type"] ?? [];
  134. if (empty($support_type) || strpos($support_type, "weapp") === false) return $this->success();
  135. if (empty($param['openid'])) return $this->success('缺少必需参数openid');
  136. $message_info = $param['message_info'];
  137. if ($message_info['weapp_is_open'] == 0) return $this->error('未启用模板消息');
  138. if (!isset($message_info['weapp_template_id']) || empty($message_info['weapp_template_id'])) return $this->error('未配置模板消息');
  139. $data = [
  140. 'openid' => $param['openid'],
  141. 'template_id' => $message_info['weapp_template_id'],
  142. 'data' => $param['template_data'],
  143. 'page' => $param['page'] ?? ''
  144. ];
  145. $weapp = new Weapp($site_id);
  146. $res = $weapp->sendTemplateMessage($data);
  147. return $res;
  148. } catch (\Exception $e) {
  149. return $this->error('', "消息发送失败");
  150. }
  151. }
  152. /**
  153. * 获取订阅消息模板id集合
  154. * @param $site_id
  155. * @param $keywords
  156. */
  157. public function getMessageTmplIds($site_id, $keywords){
  158. $data = model('message')->getColumn([ ['weapp_is_open', '=', 1], ['weapp_template_id', '<>', ''], ['site_id', '=', $site_id], ['keywords', 'in', explode(',', $keywords) ] ], 'weapp_template_id');
  159. return $this->success($data);
  160. }
  161. }