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

微信公众平台开发 微信公众平台开发者 微信公众平台开发模式 签名校验 消息响应
作者:方倍工作室
原文: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();
}

 

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

 

时间: 2024-09-20 15:10:15

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

asp.net开发微信公众平台通过接口上传图片到微信服务器后台

问题描述 asp.net开发微信公众平台通过接口上传图片到微信服务器后台 asp.net开发微信公众平台通过接口上传图片到微信服务器后台,就要代码. ASCIIEncoding encodings = new ASCIIEncoding(); HttpWebResponse webResponses = null; string s = zone.Substring(0, zone.Length - 1); s = s.Substring(1, s.Length - 1); string img

微信公众平台通用接口API指南

  下述文档已过期,新版文档请访问 http://www.cnblogs.com/txw1958/p/weixin-access-token.html  微信公众平台目前分成消息接口和通用接口两大模块. 接入消息接口的微信公众账号,当关注该公众账号的粉丝向其发送消息,微信服务器会对公众账号所对应的服务器地址推送一个特定结构的消息体,公众账号开发者可以通过响应包进行对该条消息的回复. 通用接口的作用是实现诸如获取粉丝资料,上传媒体文件以便消息接口回复图片.语音和视频等多媒体消息等功能,丰富消息接口

微信公众平台数据接口开始内测

微信公众平台每天的数据量越来越庞大了,新年红包再次延迟逐显服务器压力,微信也慢慢开放一些接口给第三方平台,这不,今天微信公众平台数据接口开始公测了.微信公众平台数据接口正式对所有认证公众号开放   测试期间,为保证数据接口质量,目前仅对申请接入了微信开放平台公众号登录授权服务的第三方平台提供.   通过数据接口,第三方平台开发者可以为公众号运营者提供更详细的数据统计服务.具体能力如下:   1.用户分析数据接口 通过该接口可以获取公众号的用户增减数据和累计用户数据.   2.图文分析数据接口 通

ASP玩转微信公众平台自定义接口

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 微信最近开放第三方API接口,申请地址:http://mp.weixin.qq.com/cgi-bin/callbackprofile?t=wxm-callbackapi&type=info&lang=zh_CN 从微信公众平台开通自定义回复后,就一直在关注微信接口这一块,很想用自定义回复这块做个站长工具的查询,例如PR查询,

微网站-微信公众平台内部接口调整,以前写的代码用不了了,有懂这一块的高手帮帮忙吧

问题描述 微信公众平台内部接口调整,以前写的代码用不了了,有懂这一块的高手帮帮忙吧 近几日微信公众平台内部接口调整主要有: 1.自定义菜单生成验证方式改变,部分用户生成自定义菜单会有curl_35问题 2.公众平台不再接受一键拨号类的tel:协议,含有此类自定义菜单的一律不通过,表现为生成的时候出现:sub button url..... 就是提示自定义菜单中不能含有一键拨号类信息 3.url和token绑定的时候验证时间缩短,导致部分服务器本身反映不够快的客户url超时 以前写的代码用不了了,

java微信公众平台支付jsApi开发,支付验证签名失败问题

问题描述 java微信公众平台支付jsApi开发,支付验证签名失败问题 java微信公众平台支付jsApi开发,支付验证签名失败,提交给微信生成订单的数据与微信测试工具生成的数据是一样的,后面去调支付的时候就出现支付验证签名失败问题,哪位大神指点一下哇! 解决方案 http://bbs.csdn.net/topics/391882172 解决方案二: 你的签名在开发者平台注册了么?

腾讯低调推出微信公众平台第三方接口平台风铃

中介交易 SEO诊断淘宝客 站长团购 云主机 技术大厅 [最科技讯]最近,腾讯低调推出微信公众平台第三方接口平台风铃,除自定义菜单外,还有其他众多微信接口高级权限:一键生成HTML4和WAP站,留言.报名.抽奖等组件,集成QQ客服,打通微信与微博等. 腾讯风铃的最大卖点就是通过各种模块的选择快速的生成属于企业或者个人自己的微信APP,随着微信5.0的到来,服务号每月只能推送一条后,企业将只能通过微网站的方式来配合自定义回复接口为用户提供服务,图中可以看出风铃提供了16种不同功能的模块,包括抽奖.

微信公众平台返回接口错误. 错误代码为: 40016 错误信息为: invalid button size hint: [e3OCua0942vr20] 错误描

问题描述 微信公众平台返回接口错误.错误代码为:40016错误信息为:invalidbuttonsizehint:[e3OCua0942vr20]错误描述为:不合法的按钮个数求各位大神教教我怎么解决,谢谢! 解决方案 解决方案二:你调用的哪个接口?

微信公众平台群发接口优化 新增原创校验逻辑

微信公众平台对高级群发接口进行了优化,新增原创校验逻辑.公众号在调用接口群发图文消息时,将进行原创校验,并根据群发接口新参数 send_ignore_reprint 的设置,返回群发操作结果.该逻辑将于2016年12月22日生效. 一.群发接口新增原创校验流程 开发者在调用接口群发图文消息时,微信会将开发者准备群发的文章,与公众号平台原创库中的文章进行比较,校验结果如下: 当前准备群发的文章,未命中原创库的文章,则可以群发. 当前准备群发的文章,命中了原创库的文章的: 若原文作者允许转载,则可以

微信公众平台智能机器人PHP开发示例

最近在做微信公众平台开发,一口气写了二十几个功能,挺有意思的-     今天来分享一下开发经验~ 微信公众平台提供的接口很简单,先看看消息交互流程:     说的通俗一些,用户使用微信发送消息 -> 微信将数据发送给开发者 -> 开发者处理消息并返回数据至微信 -> 微信把返回数据发送给用户,期间数据交互通过XML完成,就这么简单.   下面写个实例,开发微信智能聊天机器人:   1. 注册微信公众平台账号 微信公众平台: https://mp.weixin.qq.com/ 注: 目前一