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/。

我来说两句: