请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

可以获取微信的GET请求 ,但验证失败

服务器里接受到的get请求是:

//weixin/msg/index?signature=c7e61239e4b56e0adf7b6623b74fa6c61de24fcc&echostr=2019533780509753310&timestamp=1512789272&nonce=3310232241


把它复制到浏览器,也确实能返回。


只是checkSignature 加密验证不通过。


我加了两个var_dump打印变量:

//加密验证
    public function checkSignature(){
        $signature = trim($this -> get("signature",""));
        $timestamp = trim($this -> get("timestamp",""));
        $nonce = trim($this ->get("nonce",""));

        $tmpArr = array(\Yii::$app->params['weixin']['token'],$timestamp,$nonce);
        sort($tmpArr);
        $tmpStr = implode($tmpArr);
        $tmpStr = sha1($tmpStr);
		var_dump($tmpStr);
		var_dump($signature);
		exit();
        if($tmpStr == $signature){
            return true;
        }else{
            return false;
        }
    }


结果:

https://img1.sycdn.imooc.com//szimg/5a2b5c430001155508210101.jpg


明明get请求里有 signature 这个字段,但是没有获取


而且,$tmpStr打印出来的值,和服务器里日志的signature值并不匹配。


之前做的时候好像还没问题 ...... 不知道是哪改毁了吧.....

正在回答 回答被采纳积分+3

7回答

编程浪子 2017-12-14 21:24:12

微信调你的接口,你用打印给谁看的,你看不到哇。还是那个问题,打印没用,这个调试要写入文件了


还有 要看看微信请求到底有咩有发送到你的 服务器上去,请求都没有发送,那就不用调试了。那要看看是不是配置对不对了

0 回复 有任何疑惑可以回复我~
  • 提问者 www974 #1
    没有发送。 但不知道哪里配置出问题了...
    回复 有任何疑惑可以回复我~ 2017-12-18 08:57:34
  • 提问者 www974 #2
    只有我在微信公众号里修改服务器配置,点击提交,微信会给我服务器发送get请求并验证通过,通过后,再访问微信里配置的服务器URL地址,就不会再给我服务器发送get请求,验证失败
    回复 有任何疑惑可以回复我~ 2017-12-18 09:47:22
  • 提问者 www974 #3
    好吧....我找到了....应该是本来就是这样 .... 我以为验证通过后,每次访问msg/index都会发给我一个get请求
    回复 有任何疑惑可以回复我~ 2017-12-18 10:18:50
提问者 www974 2017-12-13 09:08:48
class MsgController extends BaseWebController
{
    public function actionIndex(){
		var_dump($_GET); exit();
        //加密验证
        if(!$this->checkSignature()){
            return "微信验证失败...Token无效";
        }
		 return "666";

        //第一次微信认证
        if(array_key_exists("echostr",$_GET) && $_GET['echostr']){
            return $_GET['echostr'];
        }

        //微信消息接口  (获取post中的xml格式数据)
        $xml_data = file_get_contents( "php://input" );
        $this -> record_log("[xml_data]".$xml_data);
        if(!$xml_data){
            return "xml_data is empty";
        }

        simplexml_load_string($xml_data,"SimpleXMLElement",LIBXML_NOCDATA);


        return "hello weixin";
    }
    }


微信请求我这个接口,按说var_dump($_GET); exit(); 应该可以打印出微信请求的信息,但是页面显示的是:array(0) { }

0 回复 有任何疑惑可以回复我~
编程浪子 2017-12-12 22:02:36

没有次数限制,这个是微信调用你的接口,不是你调用微信的

0 回复 有任何疑惑可以回复我~
编程浪子 2017-12-12 22:02:10

打印 var_dump($_GET) 是:array(0) { } ,但不知道为什么get请求是空 如何看的到,因为我记得是微信请求 接口的,只能通过nginx 看看请求是不是有,然后在入口记录到文件中了

0 回复 有任何疑惑可以回复我~
  • 提问者 www974 #1
    我用的是apache ,在日志文件中没有带参数的GET请求
    回复 有任何疑惑可以回复我~ 2017-12-13 09:02:40
  • 提问者 www974 #2
    我知道是微信请求我的接口,我上一下我的代码说明吧。楼上
    回复 有任何疑惑可以回复我~ 2017-12-13 09:08:01
编程浪子 2017-12-10 20:49:00

无论什么,程序本身没有任何理由更改request ,建议直接将整个请求打印出来,然后看看

0 回复 有任何疑惑可以回复我~
  • 提问者 www974 #1
    打印 var_dump($_GET) 是:array(0) { }  ,但不知道为什么get请求是空
    回复 有任何疑惑可以回复我~ 2017-12-11 09:24:38
  • 提问者 www974 #2
    微信平台配置的路径是:http://省略.../weixin/msg/index 但是我在msg下面的index方法的第一行去打印  var_dump($_GET) 都是空:array(0) { }  ,也就是根本就没有get请求.......
    回复 有任何疑惑可以回复我~ 2017-12-11 09:31:42
提问者 www974 2017-12-09 11:56:41

又请求了几次,发现得不到get请求参数了 .... 几分钟前还可以,是有次数限制吗?

0 回复 有任何疑惑可以回复我~
提问者 www974 2017-12-09 11:47:40

token 是一样的,之前也是匹配的

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信