测试页面g1.php展示:
~~~
<?php
define('TOKEN','zhangyouwu');//定义token
$obj=new Weixin();//实例化函数
if(!isset($_GET['echostr'])){//如果随机字符串不存在
$obj->receive();
}else{
$obj->checkSignature();//调用函数中的方法
}
class Weixin{
public function checkSignature()
{
$signature = $_GET["signature"];//加密签名
$timestamp = $_GET["timestamp"];//时间戳
$nonce = $_GET["nonce"];//随机数
$token = TOKEN;
$tmpArr = array($token,$timestamp, $nonce);//组成新数组
sort($tmpArr, SORT_STRING);//重新排序
$tmpStr = implode( $tmpArr );//转换成字符串
$tmpStr = sha1( $tmpStr );//再将字符串加密
if( $tmpStr==$signature ){
echo $_GET['echostr'];
}else{
return false;
}
}
public function receive(){
$obj=$GLOBALS['HTTP_RAW_POST_DATA'];//接受消息
$postSql=simplexml_load_string($obj,'SimpleXMLElement',LIBXML_NOCDATA);
$this->logger("接受:\n".$obj);
if(!empty($postSql)){
switch(trim($postSql->MsgType)){
case "text":
$result=$this->receiveText($postSql);
break;
case "event":
$result=$this->receiveEvent($postSql);
break;
}
if(!empty($result)){
echo $result;
}else{
$xml="<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
echo $result=sprintf($xml,$postSql->FromUserName,$postSql->ToUserName,time(),$postSql->MsgType,"没有这条文本信息(⊙o⊙)…");
}
}
}
//自动回复文本
private function receiveEvent($postSql){
$xml="<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$result=sprintf($xml,$postSql->FromUserName,$postSql->ToUserName,time(),"text","欢迎来到zyw微信测试");
$this->logger("自动回复消息:\n".$result);
return $result;
}
//处理文本消息
private function receiveText($postSql){
$content=trim($postSql->Content);
if(strstr($content,"你好")){//strstr模糊匹配
$xml="<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$result=sprintf($xml,$postSql->FromUserName,$postSql->ToUserName,time(),$postSql->MsgType,"hello");
return $result;
}else if(strstr($content,"单图文")){
$result=$this->receiveImage($postSql);
$this->logger("发送单图文消息:\n".$result);
return $result;
}
else if(strstr($content,"多图文")){
$result=$this->receiveImages($postSql);
$this->logger("发送多图文消息:\n".$result);
return $result;
}
else if(strstr($content,"图片")){
$result=$this->receiveMedia($postSql);
$this->logger("发送图片消息:\n".$result);
return $result;
}
}
//图片
private function receiveMedia($postSql){
$xml="<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Image><MediaId><![CDATA[%s]]></MediaId></Image></xml>";
$result=sprintf($xml,$postSql->FromUserName,$postSql->ToUserName,time(),"image","mtq3etLgLiGtMeCF0GX1QuKgpeK69SjUkkZFRxFvMipccv0QRjLnT1Kn7Ud9PC8I");
return $result;
}
//单图文
private function receiveImage($postSql){
$xml="<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<ArticleCount>1</ArticleCount>
<Articles>
<item><Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url></item>
</Articles></xml>";
$result=sprintf($xml,$postSql->FromUserName,$postSql->ToUserName,time(),"news","zhangyouwu的微信开发","微信开发其实很简单","http://pic.baike.soso.com/ugc/baikepic2/5494/20170825195528-1233831972_jpg_387_310_14279.jpg/0","http://www.baidu.com");
return $result;
}
//多图文,最多8条
private function receiveImages($postSql){
$content=array();
$content[]=array("Title"=>"zhangyouwu的微信开发","Description"=>"微信开发其实很简单","PicUrl"=>"http://pic.baike.soso.com/ugc/baikepic2/5494/20170825195528-1233831972_jpg_387_310_14279.jpg/0","Url"=>"http://www.baidu.com");
$content[]=array("Title"=>"zhangyouwu的微信开发","Description"=>"微信开发其实很简单","PicUrl"=>"http://pic.baike.soso.com/ugc/baikepic2/5494/20170825195528-1233831972_jpg_387_310_14279.jpg/0","Url"=>"http://www.baidu.com");
$content[]=array("Title"=>"zhangyouwu的微信开发","Description"=>"微信开发其实很简单","PicUrl"=>"http://pic.baike.soso.com/ugc/baikepic2/5494/20170825195528-1233831972_jpg_387_310_14279.jpg/0","Url"=>"http://www.baidu.com");
$content[]=array("Title"=>"zhangyouwu的微信开发","Description"=>"微信开发其实很简单","PicUrl"=>"http://pic.baike.soso.com/ugc/baikepic2/5494/20170825195528-1233831972_jpg_387_310_14279.jpg/0","Url"=>"http://www.baidu.com");
$str="<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url></item>";
$news="";
foreach($content as $newArray){
$news.=sprintf($str,$newArray['Title'],$newArray['Description'],$newArray['PicUrl'],$newArray['Url']);
}
$xml="<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<ArticleCount>%s</ArticleCount>
<Articles>
$news
</Articles></xml>";
$result=sprintf($xml,$postSql->FromUserName,$postSql->ToUserName,time(),"news",count($content));
return $result;
}
//存储日志
private function logger($content){//存储日志
$logSize=100000;//定义日志大小
$log="log.txt";//定义日志名字
if(file_exists($log)&&filesize($log)>$logSize){//如果日志存在并且大于定义的大小
unlink($log);//删除
}
//文件写入1.名字2.内容,+时间防止重复3.内容往后加而不是覆盖
file_put_contents($log,date('H:i:s')." ".$content."\n",FILE_APPEND);
}
}
?>
~~~
相关部分:
![](https://box.kancloud.cn/0a0ee293ca39c102c09dd772b7f20279_348x53.png)
![](https://box.kancloud.cn/d422cb7b3d6408aa08c8289d8beeff65_786x224.png)
注意:
![](https://box.kancloud.cn/0b7428cae51e31a49a7a78feee4abf59_1005x405.png)
结果展示:
![](https://box.kancloud.cn/af3095f049e601360ae9b0628f2f8649_345x187.png)