以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 data if (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
