Thinkphp3.2.3接入公众号响应微信发送的Token验证总是失败

不使用Thinkphp3.2.3的情况下可以验证成功,应用框架后不能通过,不知道是什么原因啊
<?php
namespace HOME\Controller;
use Think\Controller;
define("TOKEN", "weixin");//定义你公众号自己设置的token

class WeixinController extends Controller
{

public function index()
{

$echoStr = $_GET["echostr"];
//valid signature , option
if ($this->checkSignature()) {
ob_clean();
echo $echoStr;
exit;
}
}//index end
//验证微信开发者模式接入是否成功
private function checkSignature()
{
if (!defined("TOKEN")) {
throw new Exception('TOKEN is not defined!');
}

$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array(
$token,
$timestamp,
$nonce);
// use SORT_STRING rule
sort($tmpArr, SORT_STRING);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
if ($tmpStr == $signature) {
return true;
} else {
return false;
}
}// checkSignature end

} //classend

?>

用得着判断那个TOKEN?是不是多此一举,用我这个,包你满意

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends WechatController {
    public function index(){
     $v = $_GET["echostr"];
     if(!isset($v)){//根据随机字符串判断是否之前已经验证过,避免重复验证
$this->receive();
}else{
$this->checkSignature();
}
    }
//未验证执行验证
public function checkSignature(){
        $signature = I("signature");//加密签名
        $timestamp = I("timestamp");//时间戳
        $nonce = I("nonce");//随机数
        $token = TOKEN;//token
$tmpArr = array($token,$timestamp, $nonce);//组成新数组
sort($tmpArr,SORT_STRING);//重新排序
$tmpStr = implode($tmpArr);//转换成字符串
$tmpStr = sha1($tmpStr);//再将字符串进行加密
if( $tmpStr == $signature )
{
echo $_GET["echostr"];
exit;
//return true;
}else{
return false;
}
}
//已经验证过执行这里
public function receive(){
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//获取用户发送的消息,格式为xml
//$postStr = file_get_contents("php://input");
libxml_disable_entity_loader(true);
$postObj = simplexml_load_string($postStr, "SimpleXMLElement", LIBXML_NOCDATA);
$this->logger($postStr);
//并且回复信息给用户
if(!empty($postObj)){
switch($postObj->MsgType){
case "text":
$result = $this->receiveText($postObj);
//避免错误信息报出
if(empty($result)){
$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,$postObj->FromUserName,$postObj->ToUserName,time(),$postObj->MsgType,"多图文信息没有获取到");
}
echo $result;
break;
case "image":
$result = $this->receiveImage($postObj);
if(empty($result)){
$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,$postObj->FromUserName,$postObj->ToUserName,time(),"news","跟老李一起来做微信开发","微信开发即微信公众平台开发,将企业信息、服务、活动等内容通过微信网页的方式进行表现,用户通过简单的设置,就能生成微信3G网站。通过微信公众平台将企业品牌展示给微信用户,减少宣传成本,建立企业与消费者、客户的一对一互动和沟通,将消费者接入企业CRM系统,进行促销、推广、宣传、售后等。形成了一种主流的线上线下微信互动营销方式。","https://gss3.bdstatic.com/-Po3dSag_xI4khGkpoWK1HF6hhy/baike/w%3D268%3Bg%3D0/sign=a1070f7517dfa9ecfd2e51115aeb903e/b03533fa828ba61efb07a5464734970a314e59e9.jpg","http://www.baidu.com");
}
echo $result;
break;
case "event":
$result = $this->receiveEvent($postObj);
if(empty($result)){
$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,$postObj->FromUserName,$postObj->ToUserName,time(),"text","感谢您关注微信接口测试服务号,我是李先生!");
}
echo $result;
break;
default :
$result = "你发送的数据类型暂时不做处理: " . $postObj->MsgType;
echo $result;
break;
}
}

}
//log
private function logger($content){
$logSize=100000;
$log = "./log.txt";
if(file_exists($log) && filesize($log) > $logSize){
unlink($log);
}
file_put_contents($log, date("Y-m-d H:i:s")." ".$content."\n",FILE_APPEND);
}
//关注自动回复信息
private function receiveEvent($postObj){
$xml = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
if($postObj->Event=="subscribe"){
$result = sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","感谢您关注微信接口测试服务号,我是李先生!");
}else if($postObj->Event=="CLICK"){
if($postObj->EventKey=="getSalary"){
$result = sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您点击了【查询->工资】按钮");
}else if($postObj->EventKey=="getAttendance"){
$result = sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您点击了【查询->考勤记录】按钮");
}else if($postObj->EventKey=="getBonus"){
$result = sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您点击了【查询->奖金明细】按钮");
}else if($postObj->EventKey=="getAbout"){
$result = sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您点击了【关于我们->联系】按钮");
}else if($postObj->EventKey=="getJoin"){
$result = sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您点击了【关于我们->加入我们】按钮");
}else if($postObj->EventKey=="getCustomer"){
$result = sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您点击了【关于我们->客服】按钮");
}else if($postObj->EventKey=="getInternational"){
$result = sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您点击了【新闻->国际】按钮");
}else if($postObj->EventKey=="getIndustry"){
$result = sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您点击了【新闻->行业】按钮");
}
}else if($postObj->Event=="scancode_waitmsg"){
//扫码带提示的事件
$result = sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您使用了扫码带提示事件,事件KEY:{$postObj->EventKey}");
}else if($postObj->Event=="scancode_push"){
//扫码推事件
$result = sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您使用了扫码推事件,事件KEY:{$postObj->EventKey}");
}else{
$result = sprintf($xml,$postObj->FromUserName,$postObj->ToUserName,time(),"text","您的操作有点奇葩");
}
return $result;
}
//处理接收的文本信息并且回复给用户
private function receiveText($postObj){
$content = trim($postObj->Content);
//if(strstr($content,"你好")){
if(preg_match("/^\d*$/",$content)){
//回复多图文信息
$result = $this->receiveNews($postObj);
return $result;  
}else if($content=="图片"){
//回复图片信息
$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,$postObj->FromUserName,$postObj->ToUserName,time(),"image","t8ASWVXMl1vyPfFmDzNEzLq2Z2B6WiM4JI4pBc23quMuc91t9NM1GWFGajCDuMv-");
return $result;
}else{
//回复文本信息
$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,$postObj->FromUserName,$postObj->ToUserName,time(),$postObj->MsgType,$content);
return $result;
}
}
//处理接收的文本信息并且回复给用户为单图文信息
private function receiveImage($postObj){
$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,$postObj->FromUserName,$postObj->ToUserName,time(),"news","跟老李一起来做微信开发","微信开发即微信公众平台开发,将企业信息、服务、活动等内容通过微信网页的方式进行表现,用户通过简单的设置,就能生成微信3G网站。通过微信公众平台将企业品牌展示给微信用户,减少宣传成本,建立企业与消费者、客户的一对一互动和沟通,将消费者接入企业CRM系统,进行促销、推广、宣传、售后等。形成了一种主流的线上线下微信互动营销方式。","https://gss3.bdstatic.com/-Po3dSag_xI4khGkpoWK1HF6hhy/baike/w%3D268%3Bg%3D0/sign=a1070f7517dfa9ecfd2e51115aeb903e/b03533fa828ba61efb07a5464734970a314e59e9.jpg","http://www.baidu.com");
return $result;
}
//处理接收的文本信息并且回复给用户为多图文信息
private function receiveNews($postObj){
$con = array(
array("Title"=>"观前街","Description"=>"hjhhj","PicUrl"=>"https://gss0.baidu.com/9fo3dSag_xI4khGko9WTAnF6hhy/image/pic/item/5243fbf2b211931382f8e0716c380cd790238db3.jpg","Url"=>"https://gss0.baidu.com/9fo3dSag_xI4khGko9WTAnF6hhy/image/pic/item/5243fbf2b211931382f8e0716c380cd790238db3.jpg"),
array("Title"=>"平江路","Description"=>"mkbkbjj","PicUrl"=>"http://imgtu.5011.net/uploads/content/shehui/wanxiang/2015-08-26/a91f9c47f7bd8616348f0a3560724a45.jpg","Url"=>"http://imgtu.5011.net/uploads/content/shehui/wanxiang/2015-08-26/a91f9c47f7bd8616348f0a3560724a45.jpg"),
array("Title"=>"观前街","Description"=>"hjhhj","PicUrl"=>"http://img2.a0bi.com/upload/ttq/20160729/1469781927056.jpeg","Url"=>"http://img2.a0bi.com/upload/ttq/20160729/1469781927056.jpeg"),
array("Title"=>"平江路","Description"=>"mkbkbjj","PicUrl"=>"http://gaoxiao.zhutou.com/html/UploadPic/2010-3/201033173945493.jpg","Url"=>"http://gaoxiao.zhutou.com/html/UploadPic/2010-3/201033173945493.jpg"),
array("Title"=>"观前街","Description"=>"hjhhj","PicUrl"=>"http://www.haha365.com/uploadfile/2013/0508/20130508102432191.jpg","Url"=>"http://www.haha365.com/uploadfile/2013/0508/20130508102432191.jpg"),
array("Title"=>"平江路","Description"=>"mkbkbjj","PicUrl"=>"http://img1.imgtn.bdimg.com/it/u=995757682,3656700920&fm=214&gp=0.jpg","Url"=>"http://img1.imgtn.bdimg.com/it/u=995757682,3656700920&fm=214&gp=0.jpg"),
array("Title"=>"观前街","Description"=>"hjhhj","PicUrl"=>"http://down.laifudao.com/tupian/201261510566.jpg","Url"=>"http://down.laifudao.com/tupian/201261510566.jpg"),
array("Title"=>"平江路","Description"=>"mkbkbjj","PicUrl"=>"http://img.tupianzj.com/uploads/allimg/160528/9-16052Q54439-50.jpg","Url"=>"http://img.tupianzj.com/uploads/allimg/160528/9-16052Q54439-50.jpg")
);

$bodys="<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>";

$tpl2 ="";
foreach($con as $key=>$newArray) {
$tpl2 .= sprintf($bodys,$newArray["Title"],$newArray["Description"],$newArray["PicUrl"],$newArray["Url"]);
}
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$tpl1="<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<ArticleCount>%s</ArticleCount>
<Articles>";
$tpl3="</Articles>
</xml>";


$tpl1=sprintf($tpl1,$fromUsername,$toUsername,time(),"news",count($con));
$result = $tpl1.$tpl2.$tpl3;
return $result;
}
}

温馨提示:答案为网友推荐,仅供参考
相似回答