<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index(){
//获得参数 signature nonce token timestamp echostr
//微信服务器发出参数都是以get形式发送
$nonce = $_GET['nonce'];
$timestamp = $_GET['timestamp'];
$echostr = $_GET['echostr'];
$signature = $_GET['signature'];
$token = 'zorozdd';
//形成数组 按照字典序排序sort
$array = array($nonce , $timestamp , $token);
sort($array);
//拼接成字符串 sha1加密 与signature进行校验
$str = sha1( implode( $array ) );
if( $str == $signature && $echostr){
//第一次接入微信API 之后连入不会再有$echostr这个参数
echo $echostr;
exit;
}else{
$this->reponseMsg();
}
}
public function reponseMsg(){
//获取微信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>*/
$postObj = simplexml_load_string( $postArr );
/*
将XML转化为对象之后对象内存在如下参数
$postObj->ToUserName = '';
$postObj->FromUserName = '';
$postObj->CreateTime = '';
$postObj->MsgType = '';
$postObj->Event = '';
*/
//判断该数据包是否是事件推送
if ( strtolower($postObj->MsgType) == 'event' ){
//如果是关注subscribe事件
if( strtolower($postObj->Event == 'subscribe') ){
$toUser = $postObj->FromUserName;
$fromUser = $postObj->ToUserName;
$time = time();
$msgType = 'text';
$content = '欢迎关注Zorozdd的的公众账号,测试用信息发送,你的账号为'.$toUser;
$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,$toUser,$fromUser,$time,$msgType,$content);
echo $info;
}
}
//单图文回复范例
/*
if ( strtolower($postObj->MsgType) == 'text' ){
if ($postObj->Content == 'hello' ){
$template = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$toUser = $postObj->FromUserName;
$fromUser = $postObj->ToUserName;
$time = time();
$content = 'hello,word.today is colorful.';
$msgType = 'text';
echo sprintf($template,$toUser,$fromUser,$time,$msgType,$content);
}
}
*/
if ( strtolower($postObj->MsgType) == 'text' && $postObj->Content == '1' ){
$toUser = $postObj->FromUserName;
$fromUser = $postObj->ToUserName;
$time = time();
$arr = array(
array(
'title' => 'zorozdd’word',
'description' => '这里是测试用公众平台',
'picUrl' => 'https://www.baidu.com/img/bd_logo1.png',
'url' => 'http://i.blog.sina.com.cn/'
),
array(
'title' => '软件测试基础入门',
'description' => '软件测试基础',
'picUrl' => 'http://pic.pptbz.com/pptpic/201601/2016012052598041.jpg',
'url' => 'http://i.blog.sina.com.cn/'
),
array(
'title' => 'PHP高级教程精通进阶',
'description' => 'PHP高级教程精通',
'picUrl' => 'http://pic.pptbz.com/pptpic/201510/2015103172664321.jpg',
'url' => 'http://i.blog.sina.com.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,$toUser,$fromUser,$time,'news');
}
}
}
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index(){
//获得参数 signature nonce token timestamp echostr
//微信服务器发出参数都是以get形式发送
$nonce = $_GET['nonce'];
$timestamp = $_GET['timestamp'];
$echostr = $_GET['echostr'];
$signature = $_GET['signature'];
$token = 'zorozdd';
//形成数组 按照字典序排序sort
$array = array($nonce , $timestamp , $token);
sort($array);
//拼接成字符串 sha1加密 与signature进行校验
$str = sha1( implode( $array ) );
if( $str == $signature && $echostr){
//第一次接入微信API 之后连入不会再有$echostr这个参数
echo $echostr;
exit;
}else{
$this->reponseMsg();
}
}
public function reponseMsg(){
//获取微信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>*/
$postObj = simplexml_load_string( $postArr );
/*
将XML转化为对象之后对象内存在如下参数
$postObj->ToUserName = '';
$postObj->FromUserName = '';
$postObj->CreateTime = '';
$postObj->MsgType = '';
$postObj->Event = '';
*/
//判断该数据包是否是事件推送
if ( strtolower($postObj->MsgType) == 'event' ){
//如果是关注subscribe事件
if( strtolower($postObj->Event == 'subscribe') ){
$toUser = $postObj->FromUserName;
$fromUser = $postObj->ToUserName;
$time = time();
$msgType = 'text';
$content = '欢迎关注Zorozdd的的公众账号,测试用信息发送,你的账号为'.$toUser;
$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,$toUser,$fromUser,$time,$msgType,$content);
echo $info;
}
}
//单图文回复范例
/*
if ( strtolower($postObj->MsgType) == 'text' ){
if ($postObj->Content == 'hello' ){
$template = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$toUser = $postObj->FromUserName;
$fromUser = $postObj->ToUserName;
$time = time();
$content = 'hello,word.today is colorful.';
$msgType = 'text';
echo sprintf($template,$toUser,$fromUser,$time,$msgType,$content);
}
}
*/
if ( strtolower($postObj->MsgType) == 'text' && $postObj->Content == '1' ){
$toUser = $postObj->FromUserName;
$fromUser = $postObj->ToUserName;
$time = time();
$arr = array(
array(
'title' => 'zorozdd’word',
'description' => '这里是测试用公众平台',
'picUrl' => 'https://www.baidu.com/img/bd_logo1.png',
'url' => 'http://i.blog.sina.com.cn/'
),
array(
'title' => '软件测试基础入门',
'description' => '软件测试基础',
'picUrl' => 'http://pic.pptbz.com/pptpic/201601/2016012052598041.jpg',
'url' => 'http://i.blog.sina.com.cn/'
),
array(
'title' => 'PHP高级教程精通进阶',
'description' => 'PHP高级教程精通',
'picUrl' => 'http://pic.pptbz.com/pptpic/201510/2015103172664321.jpg',
'url' => 'http://i.blog.sina.com.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,$toUser,$fromUser,$time,'news');
}
}
}