来源:自学PHP网 时间:2015-04-14 12:58 作者: 阅读:次
[导读] 一、问题来源微信公众平台在启用接口的时候使用valid函数进行验证,define(TOKEN, 方倍工作室);$wechatObj = new wechatCallbackapiTest();$wechatObj-valid();但在验证完成后,就开始执行对消息的响应...
一、问题来源 微信公众平台在启用接口的时候使用valid函数进行验证, define("TOKEN", "方倍工作室"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->valid(); 但在验证完成后,就开始执行对消息的响应,不再使用valid函数,需要把他注释掉,并且设置成responseMsg() 如下 define("TOKEN", "方倍工作室"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->responseMsg(); 这样操作,其实比较麻烦,因为要回头来改函数。
二、问题分析为什么要用两个不同函数来处理呢?这是因为两个不同的函数执行不同的功能, 当执行valid函数时,提交的是验证字符串,用于保证url和token填写提交正确,这个时候微信服务器提交给url的请求是 signature=eded789463180edf6c13691398d0cb4c85fb0e23&echostr=5838479218127813673&stamp=1359100969&nonce=1359376876 而当响应消息的时候,已经可以确定url地址正确了,这时候主要是获得回复的xml了,这时提交的请求类似如下: signature=ba7f5cf8aee512037e5a669596f6f64a8e763d7c×tamp=1368016183&nonce=1368211921
二、解决方法我们回头来看一下valid函数 public function valid() { $echoStr = $_GET["echostr"]; //valid signature , option if($this->checkSignature()){ echo $echoStr; exit; } } 其中有一个_GET变量,那么什么是_GET变量,以下内容来自 http://www.w3school.com.cn/php/php_get.asp $_GET 变量 为什么使用 $_GET?
我们注意到在二中描述的,两次不同的请求,签名验证请求中,url中有个echostr变量,而在响应消息中是没有的, signature=eded789463180edf6c13691398d0cb4c85fb0e23&echostr=5838479218127813673&stamp=1359100969&nonce=1359376876 那么我们用同样的思路,判断_GET变量中是否有这个echostr变量,来实现区分两种不同的请求: 最终代码类似如下: //define your token define("TOKEN", "方倍工作室"); $wechatObj = new wechatCallbackapiTest(); if (isset($_GET['echostr'])) { $wechatObj->valid(); }else{ $wechatObj->responseMsg(); }
至此,我们就不用再来注释一个启用另一个了,减少了一次麻烦。
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com