以前也成功过,但是今天不知道为啥死活不成功,各种百度还是没有结果,不过最后找到了结果,第一个 要在验证前清缓存 ob_clean();第二个就是大概意思是,微信你直接返回给他1他不认的,还得反馈相应的东西过去,好吧下面我放成功了的代码
<?php //define your token ob_clean(); define("TOKEN", "weixina20200703aa"); //一定要替换自己的token $wechatObj = new wechatCallbackapiTest();//将7行的class类实例化 $wechatObj->valid();//使用-》访问类中valid方法,用来验证开发模式 class wechatCallbackapiTest { public function valid()//验证接口的方法 { $echoStr = $_GET["echostr"];//从微信用户端获取一个随机字符赋予变量echostr //valid signature , option访问地61行的checkSignature签名验证方法,如果签名一致,输出变量echostr,完整验证配置接口的操作 if($this->checkSignature()){ echo $echoStr; exit; } } //签名验证程序 ,checkSignature被18行调用。官方加密、校验流程:将token,timestamp,nonce这三个参数进行字典序排序,然后将这三个参数字符串拼接成一个字符串惊喜shal加密,开发者获得加密后的字符串可以与signature对比,表示该请求来源于微信。 private function checkSignature() { $signature = $_GET["signature"];//从用户端获取签名赋予变量signature $timestamp = $_GET["timestamp"];//从用户端获取时间戳赋予变量timestamp $nonce = $_GET["nonce"]; //从用户端获取随机数赋予变量nonce $token = TOKEN;//将常量token赋予变量token $tmpArr = array($token, $timestamp, $nonce);//简历数组变量tmpArr sort($tmpArr, SORT_STRING);//新建排序 $tmpStr = implode( $tmpArr );//字典排序 $tmpStr = sha1( $tmpStr );//shal加密 //tmpStr与signature值相同,返回真,否则返回假 if( $tmpStr == $signature ){ return true; }else{ return false; } } }
下一篇: php 把数组里增加一个字段
0条评论