php:关于微信一直无法通过php token验证, ehcho echo $echoStr; 总是提示不对的问题.

用微信官方提供的demo验证token 老是失败, 但是我自己用IIS 加 .net , token就能登录成功, 后来debug, 找各种问题,总是不能解决.

最后还是再搜了搜. 找到这么一篇解决方案.原文在这里:

https://www.cnblogs.com/donlyn/p/5675483.html

解决方案:

php:关于微信一直无法通过php token验证, ehcho echo $echoStr; 总是提示不对的问题.

最终在echo $_GET[‘echostr‘];前添加了一句代码ob_clean();

 1 <?php 2 //设置token 3 define("TOKEN", "sohovan2"); 4 5  //新建object 6 $wechatObj = new wechatCallbackapiTest(); 7 //没有得到echostr 回声, 先验证 8 //如果不是get操作. get有没有这个echostr. 9 if (!isset($_GET[‘echostr‘])) {10 11 }else{12 //如果是get操作, 并且是非空.13  //验证消息;14 $wechatObj->valid();15 }16 17 class wechatCallbackapiTest18 {19 //验证消息20 public function valid()21  {22 $echoStr = $_GET["echostr"];23 //返回的是简单,去掉参数24 header("content-type:text;charset=utf-8");25 if($this->checkSignature()){26 ob_clean();27 echo $echoStr;28 exit;29  }30  }31 32 //检查签名33 private function checkSignature()34  {35 $signature = $_GET["signature"];36 $timestamp = $_GET["timestamp"];37 $nonce = $_GET["nonce"];38 $token = TOKEN;39 $tmpArr = array($token, $timestamp, $nonce);40 //排序.41 sort($tmpArr, SORT_STRING);42 //数组的值转化成字符串.43 $tmpStr = implode($tmpArr);44 //sha145 $tmpStr = sha1($tmpStr);46 47 if($tmpStr == $signature){48 return true;49 }else{50 return false;51  }52  }53 54 //是否是GET提交55 public function isGet(){56 return $_SERVER[‘REQUEST_METHOD‘] == ‘GET‘ ? true : false;57  }58 ?>

 这里面有关于php输出缓冲区, 和ob_clean() 的解释,  先没时间研究了, 感兴趣的可以仔细了解一下.

相关文章