微信公众平台消息接口开发(29)校验签名与消息响应合并

2019-03-02 00:56|来源: 网路

微信公众平台开发 微信公众平台开发者 微信公众平台开发模式 签名校验 消息响应
作者:方倍工作室
原文:http://www.cnblogs.com/txw1958/archive/2013/05/08/weixin-if29-valid-responseMsg.html 

 

一、问题来源

微信公众平台在启用接口的时候使用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&timestamp=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 变量是一个数组,内容是由 HTTP GET 方法发送的变量名称和值。
$_GET 变量用于收集来自 method="get" 的表单中的值。从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送的信息量也有限制(最多 100 个字符)。

为什么使用 $_GET?
注释:在使用 $_GET 变量时,所有的变量名和值都会显示在 URL 中。所以在发送密码或其他敏感信息时,不应该使用这个方法。不过,正因为变量显示在 URL 中,因此可以在收藏夹中收藏该页面。在某些情况下,这是很有用的。

 

我们注意到在二中描述的,两次不同的请求,签名验证请求中,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();
}

 

至此,我们就不用再来注释一个启用另一个了,减少了一次麻烦。

 


转自:http://www.cnblogs.com/pondbay/archive/2013/05/08/3486457

相关问答

更多
  • 能使用的!微信 在安卓手机里可以使用,安装是用java 开发的,所以 可以用java开发
  • 云海中腾OA办公自动化系统,基于java开发平台,MVP架构,配备各版本移动客户端,阿里钉钉、微信企业号接口,大量控件直接免费内置,产品包含200多个标准化的功能组件。 1、电子邮件、手机短信、即时通讯、论坛和讨论区等功能组件,建立起企业内部沟通和通讯平台; 2、公告通知、新闻管理、日程管理、工作计划、工作日志、投票管理等功能组件,建立起企业行政办公平台; 3、工作流系统提供灵活、可视化的“智能表单设计器”和“流程设计器”,提供强大的工作流引擎和业务引擎,提供完备的流程处理、监控、超时催办、数据分析等功能, ...
  • 微信公众平台开发注意事项: 一、微信公众平台开发是指为微信公众号进行业务开发,为移动应用、PC端网站、公众号第三方平台(为各行各业公众号运营者提供服务)的开发,请前往微信开放平台接入。 二、在申请到认证公众号之前,你可以先通过测试号申请系统,快速申请一个接口测试号,立即开始接口测试开发。 三、在开发过程中,可以使用接口调试工具来在线调试某些接口。 四、每个接口都有每日接口调用频次限制,可以在公众平台官网-开发者中心处查看具体频次。 五、在开发出现问题时,可以通过接口调用的返回码,以及报警排查指引(在公众平台 ...
  • 小猪cms还凑合,,有源码的 ,每周更新两三个模板的 ,你可以看下 ,,
  • 登录微信公众平台,点击左下角的 开发者工具,即可看到相关文档。
  • 1. 申请消息接口点击申请,如实填写负责人姓名 、 手机号和邮箱,填写网址url和token,其中token可由开发者可以任意填写,用作生成签名。 2. 网址接入公众平台用户提交信息后,我们将以GET请求方式请求到填写的Url上,并且带上四个参数: signature — 微信加密签名; timestamp — 时间戳 ;nonce — 随机数 ;echostr — 随机字符串。开发者通过检验signature对网址接入合法性进行校验。 3. 三消息推送当普通微信用户向公众账号发消息时,公众平台将POST该 ...
  • 你这个问题太深奥了,去微信开发平台问吧. 网址是微信的全拼.com
  • 微网站开发模式教程:   第一步:申请消息接口   在公众平台网站的高级功能 – 开发模式页,点击“成为开发者”按钮,填写URL和Token,其中URL是开发者用来接收微信服务器数据的接口URL。Token可由开发者可以任意填写,用作生成签名。   第二步:验证URL有效性   开发者提交信息后,微信服务器将发送GET请求到填写的URL上,GET请求携带四个参数:   开发者通过检验signature对请求进行校验。若确认此次GET请求来自微信服务器,请原样返回 echostr参数内容,则接入生效,成为开发 ...