• 技术文章 >后端开发 >php教程

    微信开发Token验证失败解决方法

    韦小宝韦小宝2018-03-14 13:21:09原创3368
    本篇文章中讲述了在微信开发中遇到Token验证失败的解决方法,对微信开发感兴趣的或者遇到过token验证失败解决不了的,都可以看看本篇文章哦!废话少说,我们来进入正题吧!

    微信小程序配置消息推送的时候一般都会出现Token验证失败的问题,这个错误是因为,你的接口页面还没有反馈正确的信息给微信接口,网友们也给出了一些解决方法,但有些能够配置成功,有些则不然。下面给出网友提供的2种比较容易配置成功的php接口验证代码。

    代码示例一(我的验证可以成功):

    <?php  
    //1. 将timestamp , nonce , token 按照字典排序  
    $timestamp = $_GET['timestamp'];  
    $nonce = $_GET['nonce'];  
    $token = "你自定义的Token值";  
    $signature = $_GET['signature'];  
    $array = array($timestamp,$nonce,$token);  
    sort($array);  
      
    //2.将排序后的三个参数拼接后用sha1加密  
    $tmpstr = implode('',$array);  
    $tmpstr = sha1($tmpstr);  
      
    //3. 将加密后的字符串与 signature 进行对比, 判断该请求是否来自微信  
    if($tmpstr == $signature)  
    {  
        echo $_GET['echostr'];  
        exit;  
    }

    代码示例二:

    <?php  
    /** 
      * wechat php test 
      */  
      
    //define your token  
    define("TOKEN", "自定义token");  
    $wechatObj = new wechatCallbackapiTest();  
    $wechatObj->valid();  
      
    class wechatCallbackapiTest  
    {  
        public function valid()  
        {  
            $echoStr = $_GET["echostr"];  
      
            //valid signature , option  
            if($this->checkSignature()){  
                echo $echoStr;  
                exit;  
            }  
        }  
      
        public function responseMsg()  
        {  
            //get post data, May be due to the different environments  
            $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];  
      
            //extract post data  
            if (!empty($postStr)){  
                      
                    $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);  
                    $fromUsername = $postObj->FromUserName;  
                    $toUsername = $postObj->ToUserName;  
                    $keyword = trim($postObj->Content);  
                    $time = time();  
                    $textTpl = "<xml>  
                                <ToUserName><![CDATA[%s]]></ToUserName>  
                                <FromUserName><![CDATA[%s]]></FromUserName>  
                                <CreateTime>%s</CreateTime>  
                                <MsgType><![CDATA[%s]]></MsgType>  
                                <Content><![CDATA[%s]]></Content>  
                                <FuncFlag>0</FuncFlag>  
                                </xml>";               
                    if(!empty( $keyword ))  
                    {  
                        $msgType = "text";  
                        $contentStr = "Welcome to wechat world!";  
                        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);  
                        echo $resultStr;  
                    }else{  
                        echo "Input something...";  
                    }  
      
            }else {  
                echo "";  
                exit;  
            }  
        }  
              
        private function checkSignature()  
        {  
            $signature = $_GET["signature"];  
            $timestamp = $_GET["timestamp"];  
            $nonce = $_GET["nonce"];      
                      
            $token = TOKEN;  
            $tmpArr = array($token, $timestamp, $nonce);  
            sort($tmpArr);  
            $tmpStr = implode( $tmpArr );  
            $tmpStr = sha1( $tmpStr );  
              
            if( $tmpStr == $signature ){  
                return true;  
            }else{  
                return false;  
            }  
        }  
    }  
      
    ?>

    以上两种实例代码选择一种直接上传到你的服务器上,在消息配置中的url(服务器地址写上php文件的服务器地址),填入对应的自定义Token(令牌),消息加密密钥随机生成即可,加密方式我的填了兼容模式,数据格式随个人喜好吧(我的填了JSON)。然后直接点击提交即可。如果出现下图说明验证通过了:



    大家遇到过Token验证错误的可以看看哦!帮助你更快的解决token的难题!

    相关推荐:

    详解app接口之token

    微信小程序url与token如何设置

    以上就是微信开发Token验证失败解决方法的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Token 解决 失败
    上一篇:常用的100个PHP类库资源和技巧 下一篇:php中var_export与var_dump的区别解析
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• MAC Environment Setting Up(二)PHP environment • PHP中引述(变量和函数名前加&符号)的用法 • php中应用GD2库创建图形在浏览器中显示不出来 • php连接mssql数据库中文乱码有关问题 • 请问一下memcache相关的
    1/1

    PHP中文网