WechatBasisUtil.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <?php
  2. /**
  3. * 易优CMS
  4. * ============================================================================
  5. * 版权所有 2016-2028 海南赞赞网络科技有限公司,并保留所有权利。
  6. * 网站地址: http://www.eyoucms.com
  7. * ----------------------------------------------------------------------------
  8. * 如果商业用途务必到官方购买正版授权, 以免引起不必要的法律纠纷.
  9. * ============================================================================
  10. * Author: 小虎哥 <1105415366@qq.com>
  11. * Date: 2018-4-3
  12. */
  13. namespace app\plugins\util;
  14. /**
  15. * 微信公众号操作类
  16. */
  17. class WechatBasisUtil
  18. {
  19. private $config = []; //微信公众号配置
  20. private $errorMsg = ''; //错误字符串信息
  21. private $debug = false; //是否开启调试
  22. private $tagsMap = null; //粉丝标签映射
  23. public $baseObj;
  24. public $messagesObj;
  25. public $msg_serviceObj;
  26. public $materialObj;
  27. public $userObj;
  28. public function __construct($config)
  29. {
  30. vendor('wechat.wechat');
  31. $this->config = $config;
  32. /* 微信公众平台类 */
  33. $this->baseObj = $this->getClassObj('base');
  34. $this->messagesObj = $this->getClassObj('messages');
  35. $this->msg_serviceObj = $this->getClassObj('messages_service');
  36. $this->materialObj = $this->getClassObj('material');
  37. $this->userObj = $this->getClassObj('user');
  38. }
  39. public function getClassObj($className)
  40. {
  41. $class = '\\'.$className; //
  42. return new $class($this->config); //实例化对应的类
  43. }
  44. public function getError()
  45. {
  46. return $this->errorMsg;
  47. }
  48. private function setError($error)
  49. {
  50. if (!is_string($error)) {
  51. $error = json_encode($error, JSON_UNESCAPED_UNICODE);
  52. }
  53. $this->errorMsg = $error;
  54. }
  55. public function isDedug()
  56. {
  57. return $this->debug;
  58. }
  59. public function logDebugFile($content)
  60. {
  61. if (!$this->debug) {
  62. return;
  63. }
  64. if (!is_string($content)) {
  65. $content = json_encode($content, JSON_UNESCAPED_UNICODE);
  66. }
  67. file_put_contents ( DATA_PATH."wechat.txt", date ( "Y-m-d H:i:s" ) . " " . var_export($content,true) . "\r\n", FILE_APPEND );
  68. // file_put_contents("./wechat.log", date('Y-m-d H:i:s').' -- '.$content."\n", FILE_APPEND);
  69. }
  70. /**
  71. * 根据关键词获取回复内容
  72. */
  73. public function getKeywordContent($keyword = '')
  74. {
  75. $map = array(
  76. 'keyword' => $keyword,
  77. 'token' => $this->config['token'],
  78. );
  79. $k_info = M('weapp_wx_keyword')->field('pid, type')->where($map)->find();
  80. //自动回复模式
  81. switch ($k_info['type']) {
  82. case 'TEXT': // 文本
  83. $t_info = M('weapp_wx_text')->field('text')->find($k_info['pid']);
  84. $content = $t_info['text']?:'默认文本';
  85. break;
  86. case 'PIC': // 图片
  87. $p_info = M('weapp_wx_pic')->field('media_id')->find($k_info['pid']);
  88. $content = array("MediaId"=>$p_info['media_id']);
  89. break;
  90. case 'IMG': // 单图文
  91. $i_info = M('weapp_wx_img')->field('title, litpic, intro, url')->find($k_info['pid']);
  92. $litpic = is_http_url($i_info['litpic']) ? $i_info['litpic'] : SITE_URL.$i_info['litpic'];
  93. $content = array();
  94. $content[] = array("Title"=>$i_info['title'], "Description"=>$i_info['intro'], "PicUrl"=>$litpic, "Url" =>$i_info['url']);
  95. break;
  96. case 'NEWS': // 组合图文
  97. $n_info = M('weapp_wx_news')->field('img_id')->find($k_info['pid']);
  98. $arr = explode(',', $n_info['img_id']);
  99. $img_list = M('weapp_wx_img')->where(array('id'=>array('in',$arr)))->getAllWithIndex('id');
  100. $content = array();
  101. foreach ($arr as $key => $val) {
  102. $litpic = is_http_url($img_list[$val]['litpic']) ? $img_list[$val]['litpic'] : SITE_URL.$img_list[$val]['litpic'];
  103. $content[] = array("Title"=>$img_list[$val]['title'], "Description"=>$img_list[$val]['intro'], "PicUrl"=>$litpic, "Url" =>$img_list[$val]['url']);
  104. }
  105. break;
  106. default:
  107. $content = false;//"没有这个关键词:".$keyword;
  108. break;
  109. }
  110. $this->logDebugFile($content);
  111. return $content;
  112. }
  113. /**
  114. * 获取带参数临时二维码的参数,并转为数组
  115. */
  116. public function convert_ticket_data($object)
  117. {
  118. $form_data_str = $object->EventKey;
  119. if ($object->Event == 'subscribe') { // 用户未关注时,进行关注后的事件推送
  120. $form_data_str = substr($form_data_str, 8);
  121. } else if ($object->Event == 'SCAN') { // 用户已关注时的事件推送
  122. $form_data_str = substr($form_data_str, 0);
  123. }
  124. $form_data = json_decode(base64_decode($form_data_str), true);
  125. return $form_data;
  126. }
  127. }