zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    fish shell version
    golang io.ReadFull
    Unity5 2D Animation
    unity3d vscode
    golang bufio.Scanner
    kafka知识点
    linux clone
    Oracle查询在哪些 存储过程/函数/触发器 等等中包含 指定字符串
    在Oracle中,使用简洁的函数(Function)实现字符串split分割效果
    在Spring中,使用ProxyFactory实现对Cglib代理对象的再次代理
  • 原文地址:https://www.cnblogs.com/leiliu-lucifer/p/9970745.html
Copyright © 2011-2022 走看看