WechatMessage.php 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace addon\system\Wechat\common\model;
  11. use app\model\BaseModel;
  12. /**
  13. * 微信公众号模板消息配置
  14. */
  15. class WechatMessage extends BaseModel
  16. {
  17. public $site_model;
  18. public function __construct()
  19. {
  20. $this->site_model = new Site();
  21. }
  22. /**
  23. * 发送模板消息
  24. * @param $data
  25. */
  26. public function send($param)
  27. {
  28. $message_model = new Wechat();
  29. $config_result = $message_model->getWechatConfigInfo($param["site_id"]);
  30. $config_data = $config_result["data"]["value"];
  31. $wechat_api = new Weixin('public');
  32. $wechat_api->initWechatPublicAccount($config_data["appid"], $config_data["appsecret"]);
  33. $data = array(
  34. "open_id" => $param["open_id"],
  35. "template_id" => $param["template_id"],
  36. "url" => $param["url"],
  37. "first" => $param["first"],
  38. "remark" => $param["remark"],
  39. "keyword" => $param["keyword"]
  40. );
  41. $res = $wechat_api->tmplmsgSend($data);
  42. if ($res->errcode == 0) {
  43. return $this->success($res);
  44. } else {
  45. return $this->error($res);
  46. }
  47. }
  48. /**
  49. * 获取所有当前绑定微信公众号的模板消息
  50. * @param $param
  51. */
  52. public function getWechatTemplateList($param)
  53. {
  54. $config_result = $this->getWechatConfigInfo($param["site_id"]);
  55. $config_data = $config_result["data"]["value"];
  56. $wechat_api = new Weixin('public');
  57. $wechat_api->initWechatPublicAccount($config_data["appid"], $config_data["appsecret"]);
  58. $res = $wechat_api->getWechatTemplateList();//获取微信消息模板
  59. return $res;
  60. }
  61. /**
  62. * 获取微信模板消息id
  63. * @param $param
  64. */
  65. public function getMessageTemolateId($param)
  66. {
  67. $wechat_model = new Wechat();
  68. $config_result = $wechat_model->getWechatConfigInfo($param["site_id"]);
  69. $config_data = $config_result["data"]["value"];
  70. $wechat_api = new Weixin('public');
  71. $wechat_api->initWechatPublicAccount($config_data["appid"], $config_data["appsecret"]);
  72. $keyword = $param["keyword"];//消息管理关键标识
  73. //微信消息模板
  74. $message_model = new Message();
  75. $message_info_result = $message_model->getSiteWechatMessageInfo(["keyword" => $keyword, "site_id" => $param["site_id"]]);
  76. $message_info = $message_info_result["data"];
  77. if (empty($message_info))
  78. return $this->error([], "当前微信消息模板不存在!");
  79. $message_type_model = new MessageModel();
  80. $message_type_info_result = $message_type_model->getMessageTypeInfo(["keyword" => $keyword]);
  81. $message_type_info = $message_type_info_result["data"];
  82. if (empty($message_type_info["wechat_json"]))
  83. return $this->error([], "当前微信消息模板不存在!");
  84. $template_res = $wechat_api->getWechatTemplateId($message_type_info["wechat_json"]["template_no"]);
  85. if ($template_res->errcode == 0) {
  86. //设置模板编号
  87. $res = $message_model->editSiteWechatMessage(["template_id" => $template_res->template_id], ["keyword" => $keyword, "site_id" => $param["site_id"]]);
  88. return $res;
  89. } else {
  90. return $this->error($template_res, $template_res->errmsg);
  91. }
  92. }
  93. /**
  94. * 重置模板消息
  95. * @param $param
  96. * @return mixed
  97. */
  98. public function resetMessage($param)
  99. {
  100. $wechat_model = new Wechat();
  101. $config_result = $wechat_model->getWechatConfigInfo($param["site_id"]);
  102. $config_data = $config_result["data"]["value"];
  103. $wechat_api = new Weixin('public');
  104. $wechat_api->initWechatPublicAccount($config_data["appid"], $config_data["appsecret"]);
  105. $res = $wechat_api->getWechatTemplateList();//获取微信消息模板
  106. //申請微信模板消息
  107. $message_model = new Message();
  108. $list = $message_model->getSiteWechatMessageList(["site_id" => $param["site_id"]]);
  109. $res = error();
  110. if (!empty($list["data"])) {
  111. foreach ($list["data"] as $k => $v) {
  112. if (!empty($v["wechat_json"])) {
  113. $temp_json = json_decode($v["wechat_json"], true);
  114. if (!empty($temp_json["template_no"])) {
  115. $res = $wechat_api->getWechatTemplateId($temp_json["template_no"]);
  116. if ($res->errcode == 0) {
  117. //设置模板编号
  118. $message_model->editSiteWechatMessage(["template_id" => $res->template_id], ["keyword" => $v["keyword"], "site_id" => $param["site_id"]]);
  119. } else {
  120. return $this->error($res, $res->errmsg);
  121. }
  122. }
  123. }
  124. }
  125. }
  126. return $res;
  127. }
  128. /**
  129. * 發送模板消息
  130. * @param $param
  131. */
  132. public function sendMessage($param)
  133. {
  134. $message_model = new SiteMessage();
  135. $type_info = $message_model->getSiteMessageTypeViewInfo(["keyword" => $param["keyword"], "site_id" => $param["site_id"]]);
  136. if (((!empty($param["support_type"]) && stripos($param["support_type"], "Wechat") !== false) || empty($param["support_type"])) && stripos($type_info["data"]["port"], "Wechat") !== false && $type_info["data"]["wechat_is_open"] == 1) {
  137. $message_model = new Message();
  138. $message_info = $message_model->getSiteWechatMessageInfo(["keyword" => $param["keyword"], "site_id" => $param["site_id"]]);
  139. if (empty($message_info["data"]["template_id"]))
  140. return $this->error();
  141. if (empty($message_info["data"]["headtext"]))
  142. return $this->error();
  143. if (empty($message_info["data"]["bottomtext"]))
  144. return $this->error();
  145. //模板消息字段
  146. if (empty($param["keyword_json"]))
  147. return $this->error();
  148. //发送的接收用户
  149. if (empty($param["open_id"]))
  150. return $this->error();
  151. $url = empty($param["url"]) ? '' : $param["url"];
  152. $data = array(
  153. "open_id" => $param["open_id"],
  154. "template_id" => $message_info["data"]["template_id"],
  155. "url" => $url,
  156. "first" => $message_info["data"]["headtext"],
  157. "remark" => $message_info["data"]["bottomtext"],
  158. "keyword" => $param["keyword_json"],
  159. "site_id" => $param["site_id"],
  160. );
  161. //添加发送记录(未即时发送的记录 发送状态为为发送)
  162. $message_records_model = new MessageRecords();
  163. $records_data = array(
  164. "site_id" => $param["site_id"],
  165. "open_id" => $param["open_id"],
  166. "keyword_json" => json_encode($param["keyword_json"]),
  167. "keyword" => $param["keyword"],
  168. "url" => $url,
  169. "create_time" => time()
  170. );
  171. //是否即时发送
  172. if ($type_info["data"]["is_instant"] == 1) {
  173. $result = $this->send($data);
  174. if ($result["code"] == 0) {
  175. $status = 1;
  176. $records_data["send_time"] = time();
  177. } else {
  178. $status = -1;
  179. $records_data["result"] = $result["data"]->errmsg;
  180. }
  181. } else {
  182. $status = 0;
  183. }
  184. $records_data["status"] = $status;
  185. $result = $message_records_model->addWechatMessageRecords($records_data);
  186. return $result;
  187. }
  188. }
  189. /**
  190. * 邮箱消息延时发送
  191. * @param array $param
  192. */
  193. public function cronMessageSend($param = [])
  194. {
  195. $message_records_model = new MessageRecords();
  196. $message_records_list = $message_records_model->getWechatMessageRecordsList(["status" => 0]);
  197. if (!empty($message_records_list["data"])) {
  198. foreach ($message_records_list["data"] as $k => $v) {
  199. $message_model = new Message();
  200. $message_info = $message_model->getSiteWechatMessageInfo(["keyword" => $param["keyword"], "site_id" => $param["site_id"]]);
  201. $params = array(
  202. "site_id" => $v["site_id"],
  203. "open_id" => $v["open_id"],
  204. "keyword" => json_decode($v["keyword_json"], true),
  205. "url" => $v["url"],
  206. "template_id" => $message_info["data"]["template_id"],
  207. "first" => $message_info["data"]["headtext"],
  208. "remark" => $message_info["data"]["bottomtext"],
  209. );
  210. $result = $this->send($params);
  211. $data = array();
  212. $condition = array(
  213. "id" => $v["id"],
  214. "site_id" => $v["site_id"]
  215. );
  216. if ($result["code"] == 0) {
  217. $data["send_time"] = time();
  218. $data["status"] = 1;
  219. } else {
  220. $data["status"] = -1;
  221. $data["result"] = $result["message"];
  222. }
  223. $message_records_model->editWechatMessageRecords($data, $condition);
  224. }
  225. }
  226. }
  227. }