微信公众号开发之文本消息自动回复,以及系统关注自动回复,php代码
生活随笔
收集整理的這篇文章主要介紹了
微信公众号开发之文本消息自动回复,以及系统关注自动回复,php代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
以tshop為例
直接上代碼:
企業 cc_wx_sys表為自建,存儲系統消息的配置的?
字段: id type key status
<?php /*** tpshop* ============================================================================* * 版權所有 2015-2027 深圳搜豹網絡科技有限公司,并保留所有權利。* 網站地址: http://www.tp-shop.cn* ----------------------------------------------------------------------------* 這不是一個自由軟件!您只能在不用于商業目的的前提下對程序代碼進行修改和使用 .* 不允許對程序代碼以任何形式任何目的的再發布。* ============================================================================* 微信交互類*/ namespace Home\Controller; use Think\Controller; class WeixinController extends BaseController {public $client;public $wechat_config;public function _initialize(){parent::_initialize();//獲取微信配置信息$this->wechat_config = M('wx_user')->find(); $options = array('token'=>$this->wechat_config['w_token'], //填寫你設定的key'encodingaeskey'=>$this->wechat_config['aeskey'], //填寫加密用的EncodingAESKey'appid'=>$this->wechat_config['appid'], //填寫高級調用功能的app id'appsecret'=>$this->wechat_config['appsecret'], //填寫高級調用功能的密鑰 );}public function oauth(){}public function index(){if($this->wechat_config['wait_access'] == 0) exit($_GET["echostr"]);else $this->responseMsg();} public function responseMsg(){//get post data, May be due to the different environments$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//extract post dataif (empty($postStr)) exit("");/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,the best way is to check the validity of xml by yourself */libxml_disable_entity_loader(true);$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$fromUsername = $postObj->FromUserName;$toUsername = $postObj->ToUserName;$time = time();$keyword = trim($postObj->Content);$msgtype = 'text'; //消息類型:文本$textTp1sys = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content></xml>";$textTpl2sys = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><ArticleCount><![CDATA[%s]]></ArticleCount><Articles><item><Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description><PicUrl><![CDATA[%s]]></PicUrl><Url><![CDATA[%s]]></Url></item> </Articles></xml>";//點擊菜單拉取消息時的事件推送/** 1、click:點擊推事件* 用戶點擊click類型按鈕后,微信服務器會通過消息接口推送消息類型為event的結構給開發者(參考消息接口指南)* 并且帶上按鈕中開發者填寫的key值,開發者可以通過自定義的key值與用戶進行交互;*/if($postObj->MsgType == 'event' && $postObj->Event == 'CLICK'){$keyword = trim($postObj->EventKey);}/*系統關注,回復*/if($postObj->MsgType == 'event') {if ($postObj->Event == 'subscribe') { //如果是訂閱事件$sys = M('wx_sys')->where("status=1")->find();if($sys) {$keyw=$sys['key'];if($sys['type']==1){$wx_text = M('wx_text')->where("keyword like '%$keyw%'")->find();if ($wx_text) {$contentStr = $wx_text['text'];$resultStr = sprintf($textTp1sys, $fromUsername, $toUsername, $time, $msgtype, $contentStr);echo $resultStr;exit();}}else{$wx_img = M('wx_img')->where("keyword like '%$keyword%'")->find();if($wx_img) {$resultStr = sprintf($textTpl2sys, $fromUsername, $toUsername, $time, 'news', '1', $wx_img['title'], $wx_img['desc'], $wx_img['pic'], $wx_img['url']);exit($resultStr);}}}}}if(empty($keyword))exit("Input something...");// 圖文回復$wx_img = M('wx_img')->where("keyword like '%$keyword%'")->find();if($wx_img){$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><ArticleCount><![CDATA[%s]]></ArticleCount><Articles><item><Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description><PicUrl><![CDATA[%s]]></PicUrl><Url><![CDATA[%s]]></Url></item> </Articles></xml>"; $resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,'news','1',$wx_img['title'],$wx_img['desc'], $wx_img['pic'], $wx_img['url']);exit($resultStr); }// 文本回復$wx_text = M('wx_text')->where("keyword like '%$keyword%'")->find();if($wx_text){$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>";$contentStr = $wx_text['text'];$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, 'text', $contentStr);exit($resultStr);}// 其他文本回復 $textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>"; $contentStr = '歡迎來到TPshop商城!';$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, 'text', $contentStr);exit($resultStr); } }參考:
http://www.jb51.net/article/90019.htm
http://www.tuicool.com/articles/QF3Qjm
?
轉載于:https://www.cnblogs.com/xqschool/p/6745113.html
總結
以上是生活随笔為你收集整理的微信公众号开发之文本消息自动回复,以及系统关注自动回复,php代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Druid源码分析系列1:dataSou
- 下一篇: Java基础- super 和 thi