<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index(){
// 获得参数signature nonce token timestamp
$nonce = $_GET['nonce'];
$token = 'family';
$timestamp = $_GET['timestamp'];
$signature = $_GET['signature'];
$echostr = $_GET['echostr'];
$arr = array($nonce, $token, $timestamp);
sort($arr);
$tempstr = implode('', $arr);
$tempstr = sha1($tempstr);
if($tempstr == $signature && $echostr)
{
// 第一次接入微信API接口时验证,因为第一次有四个参数发送过来,其他情况下发送三个
echo $echostr;
exit;
}else
{
$this->responseMsg();
}
}
public function responseMsg()
{
// 获取微信推送过来的post数据(XML格式)
$postArr = $GLOBALS['HTTP_RAW_POST_DATA'];
// 处理消息类型,并设置回复类型和内容
/*<xml>
<ToUserName><![CDATA[toUser]]></ToUserName> 开发者微信
<FromUserName><![CDATA[FromUser]]></FromUserName> 发送发账号
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType> 消息类型
<Event><![CDATA[subscribe]]></Event> 事件类型
</xml>*/
// simplexml_load_string();将XML转换成对象
$postObj = simplexml_load_string($postArr);
// 判断该数据包是否是消息订阅的时间推送
if($postObj->MsgType == 'event')
{
// 判断是否是关注事件
if ($postObj->Event == 'subscribe') {
// 回复用户消息
$ToUserName = $postObj->FromUserName;
$FromUserName = $postObj->ToUserName;
$CreateTime = time();
$MsgType = 'text';
$Content = '欢迎关注清风草'.'\n'.$postObj->ToUserName.'-'.$postObj->FromUserName;
$template = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$info = sprintf($template, $ToUserName, $FromUserName, $CreateTime, $MsgType, $Content);
echo $info;
}
}
/*// 回复纯文本
if($postObj->MsgType == 'text')
{
// 判断是否是关注事件
switch(strtolower(trim($postObj->Content))) {
case 'php':
$Content = 'php相关知识thinkphp框架';
break;
case 1:
$Content = '这是数字1';
break;
case 'test':
$Content = '请不要在这里输入test英文字段';
break;
case 'i love you':
$Content = 'Me,Too !';
break;
case 'Mother':
$Content = 'The Mothers Day in next monday !';
break;
}
// 回复用户消息
$ToUserName = $postObj->FromUserName;
$FromUserName = $postObj->ToUserName;
$CreateTime = time();
$MsgType = 'text';
$template = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
echo sprintf($template, $ToUserName, $FromUserName, $CreateTime, $MsgType, $Content);
}*/
// 用户发送tuwen1关键字的时候,回复一个单图文
if( strtolower($postObj->MsgType == 'text') && trim( $postObj->Content == 'tuwen1')){
$ToUserName = $postObj->FromUserName;
$FromUserName = $postObj->ToUserName;
$arr = array(
array(
'title' => 'Qingfeng',
'description' => "It is very cool",
'picUrl' => 'http://scgg.gyyx.cn/wd/images/wd170328/wd_bd_logo.png',
'url' => 'http://www.gyyx.cn/',
),
);
$template = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<ArticleCount>".count($arr)."</ArticleCount>
<Articles>";
foreach($arr as $k => $v){
$template .= "<item>
<Title><![CDATA[".$v['title']."]]></Title>
<Description><![CDATA[".$v['description']."]]></Description>
<PicUrl><![CDATA[".$v['picUrl']."]]></PicUrl>
<Url><![CDATA[".$v['url']."]]></Url>
</item>";
}
$template .= "</Articles>
</xml>";
echo sprintf($template,$FromUSerName,$ToUserName,time(),'news');
}else{
switch(trim($postObj->Content)) {
case 'php':
$Content = 'php相关知识thinkphp框架';
break;
case 1:
$Content = '这是数字1';
break;
case 'test':
$Content = '请不要在这里输入test英文字段';
break;
case 'i love you':
$Content = 'Me,Too !';
break;
case 'mother':
$Content = 'mother loves father over forever !';
break;
}
// 回复用户消息
$ToUserName = $postObj->FromUserName;
$FromUserName = $postObj->ToUserName;
$CreateTime = time();
$MsgType = 'text';
$template = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
echo sprintf($template, $ToUserName, $FromUserName, $CreateTime, $MsgType, $Content);
}
}
}
?>