下面是代码,是哪里错了吗?
<?php
header('Content-type:text');
//验证服务器地址的有效性
function check(){
//1.将timestamp,nonce,token按字典序排序
$timestamp = $_GET['timestamp'];
$nonce = $_GET['nonce'];
$token = "weixin";
$signature = $_GET['signature'];
$echostr = $_GET['echostr'];
//$_GET 变量用于收集来自 method="get" 的表单中的值。从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送的信息量也有限制(最多 100 个字符)
$array = array( $timestamp,$nonce,$token );
//创建名为 $array 的索引数组,向它赋三个元素
sort($array);
//2.将排序后的三个参数进行拼接之后再用sha1加密
$tmpstr = implode('',$array);
//把数组元素按指定规则组合为字符串
$tmpstr = sha1( $tmpstr );
//3.将加密后的字符串与signature进行对比,判断该请求是否来自微信
if( $tmpstr == $signature && $echostr){
//第一次接入微信api
echo $echostr;
exit;
} else{
//之后接入api即用户关注公众号和发送消息
responseMsg();
}
}
check();
//接收事件推送并回复
function responseMsg(){
//1.获取微信推送过来的数据,即post数据(为xml格式)
$postArr = file_get_contents('php://input');
//2.处理推送数据,并设置回复类型和内容
/*推送XML数据包示例:
<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数据转为对象
//判断该数据包是否是订阅的事件推送
if( strtolower( $postObj -> MsgType) == 'event'){
//如果是关注事件即subscribe则回复消息
if(strtolower( $postObj -> Event) == 'subscribe'){
$toUser = $postObj -> FromUserName;
$fromUser = $postObj -> ToUserName;
$createTime = time();
$msgType = 'text';
$content = '您已成功关注该平台';
$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,$createTime,$msgType,$content);//将xml数据包进行对应的变量赋值
echo $info;
}
}
}
?>
你的中括号,检查下
我使用yii2是没有任何问题的,和框架是没有关系的
我用tp5一直没有收到自动回复,不知道是什么回事