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


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

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

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

    解决方案:

    最终在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 wechatCallbackapiTest
    18 {
    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         //sha1
    45         $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() 的解释,  先没时间研究了, 感兴趣的可以仔细了解一下.

    QQ:309488423 Email:leiliu_lucfer@163.com
  • 相关阅读:
    XML 特殊字符
    asp.net Application、 Session、Cookie、ViewState、Cache、Hidden 的区别
    Oracle 和 SqlServer 的区别
    TFS源代码管理的8大注意事项
    json 排序
    网页中内容的显示问题
    e.target与事件委托简例(转)
    form 中的 table元素过滤定位事件
    (转) Ajax 重定向
    Django ajax post 403 问题
  • 原文地址:https://www.cnblogs.com/leiliu-lucifer/p/9970745.html
Copyright © 2020-2023  润新知