weixinModel.php基于mPHP开发的PHP微信模块
[文章作者:磨延城 转载请注明原文出处: https://mo2g.com/view/90/ ]
很早就想写相关的技术分享了,例如如何通过PHP调用微信API,如何使用sphinx实现站内的搜索功能等等一系列我已经实现了的开源技术,但是因为各种各样的原因,迟迟没有下笔.今天有时间,就顺笔写一下基于mPHP开发的通用微信模块吧.
很早就想写相关的技术分享了,例如如何通过PHP调用微信API,如何使用sphinx实现站内的搜索功能等等一系列我已经实现了的开源技术,但是因为各种各样的原因,迟迟没有下笔。今天有时间,就顺笔写一下基于mPHP开发的通用微信模块吧。
先展示一下使用示例:
<?php $weixinModel = new weixinModel(); $arrMsg = $weixinModel->getMsg(); if( isset($_GET["echostr"]) ) { //验证开发者身份 $weixinModel->valid(); } elseif( $arrMsg['MsgType'] == 'event' && ( $arrMsg['Event'] == 'subscribe' || $arrMsg['Event'] == 'unsubscribe') ) { //关注或取消关注 if( $arrMsg['Event'] == 'subscribe' ) { $weixinModel->subscribe($arrMsg); } else { //$weixinModel->unsubscribe($arrMsg); } } else { //根据用户回复的数字调用相关功能 $this->service->controller(); exit; }
weixinModel的代码实现如下:
<?php class weixinModel { private $token = '设定的token'; public function __construct() { } //微信验证 public function valid() { $echoStr = $_GET["echostr"]; if( $this->checkSignature() ) { echo $echoStr; exit; } } private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = $this->token; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ) { return true; } else { return false; } } //解析微信服务器发送过来的xml消息 public function getMsg() { $arrMsg = array(); $post = $GLOBALS["HTTP_RAW_POST_DATA"];//get post data, May be due to the different environments if( !empty($post) ) { $objXml = simplexml_load_string($post, 'SimpleXMLElement', LIBXML_NOCDATA); foreach( $objXml as $key => $row ) { $arrMsg[$key] = $objXml->$key; } $arrMsg['Content'] = trim($arrMsg['Content']); } return $arrMsg; } //向微信服务器推送xml消息 public function putMsg($arrData) { //推送消息的时候,互换发信人与收信人的微信号 $ToUserName = $arrData['FromUserName']; $FromUserName = $arrData['ToUserName']; $MsgType = $arrData['MsgType']; $Content = $arrData['Content']; $CreateTime = $_SERVER['REQUEST_TIME']; $strXml = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag> </xml>"; $strXml = sprintf($strXml, $ToUserName, $FromUserName, $CreateTime, $MsgType, $Content); //$strXml = sprintf($strXml, $ToUserName, $FromUserName, $CreateTime); echo $strXml; } /* 微信用户订阅的时候,磨途歌提示的信息 $arrMsg:从微信服务器获取用户发送过来的信息 */ public function subscribe($arrMsg) { $CreateTime = $_SERVER['REQUEST_TIME']; $strXml = " <xml> <ToUserName><![CDATA[{$arrMsg['FromUserName']}]]></ToUserName> <FromUserName><![CDATA[{$arrMsg['ToUserName']}]]></FromUserName> <CreateTime>{$CreateTime}</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>1</ArticleCount> <Articles> <item> <Title><![CDATA[感谢您订阅磨途歌]]></Title> <Description><![CDATA[您的支持是我们精彩的延续,我们会努力为您提供优质的博客资讯]]></Description> <PicUrl><![CDATA[".IMG_URL."]]></PicUrl> <Url><![CDATA[".U()."]]></Url> </item> </Articles> </xml> "; $strXml = mini_html($strXml); echo $strXml; } /* 创建xml格式图文信息 $arrMsg:从微信服务器获取用户发送过来的信息 $arrBlog:文章数据 */ public function getBlogXml($arrMsg,$arrBlog) { $intCount = count($arrBlog); $CreateTime = $_SERVER['REQUEST_TIME']; $strXml = " <xml> <ToUserName><![CDATA[{$arrMsg['FromUserName']}]]></ToUserName> <FromUserName><![CDATA[{$arrMsg['ToUserName']}]]></FromUserName> <CreateTime>{$CreateTime}</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>{$intCount}</ArticleCount> <Articles>"; foreach( $arrBlog as $row ) { $strXml .= " <item> <Title><![CDATA[{$row['title']}]]></Title> <Description><![CDATA[{$row['description']}]]></Description> <PicUrl><![CDATA[".IMG_URL."{$row['img']}]]></PicUrl> <Url><![CDATA[".U("a=view&id=$row[id]")."]]></Url> </item>"; } $strXml .= " </Articles> </xml> "; $strXml = mini_html($strXml); echo $strXml; } }
weixinModel模块已经把关键的功能给封装好了,如果自己有特殊需求,只要根据微信提供的文档进行开发即可。
可以关注我的微信体验一下:http://mo2g.com/message/。
我来说两句: