热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

微信公众平台开发微信公众平台开发者微信公众平台开发模式签名校验消息响应


一、问题来源

微信公众平台在启用接口的时候使用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 变量是一个数组,内容是由 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();
}


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


推荐阅读
  • PHPcURL获取微信公众号access_token的实例php实例:这篇文章主要介绍了PHPcURL获取微信公众号access_token的实例,需要的朋友可以参考下1.开发微信 ... [详细]
  • CentOS8.4 安装PHP7.4.25
    1、下载官网:https:www.php.netdownloads#cdmydata#wgethttps:www.php.netdistributionsphp ... [详细]
  • jquery popupDialog 使用 加载jsp页面办法
    php教程|PHP开发jqueryphp教程-PHP开发如下所示:软件市场源码,vsCode字体不变,ubuntu的所有版本,taotomcat,sqlite连接php,个人域名服 ... [详细]
  • 微信小程序官方组件展示之表单组件input源码
    以下将展示微信小程序之表单组件input源码官方组件能力,组件样式仅供参考,开发者可根据自身需求定义组件样式,具体属性参数详见小程序开发文档。功能描述:输入框。该组件是原生组件, ... [详细]
  • crossorigin注解添加了解决不了跨域问题_CORS与@CrossOrigin详解
    1、跨域的基本概念a、跨域的解释要了解跨域,首先需要知晓浏览器的同源策略,简单的说就是两个请求协议、端口、主机都相同,则两个请求具有相同的 ... [详细]
  • 这是orginally答复Elias的内容:为什么不需要E5风险控制我们一致认为E4和3.x并不是100%兼容的,E4只是提供了一个兼容层用于运行3.x的插件,这其实并不完全符合E4的设计理 ... [详细]
  • 事务是通过MULTI命令开始的,在非事务状态下客户端发送的命令会被立刻执行,而在事务状态下,除了EXECWATCHDISCARD这几个命令外,redis会将命令保留在事务队列里。 ... [详细]
  • MyBatis模糊查询和多条件查询一、ISmbmsUserDao层根据姓名模糊查询publicListgetUser();多条件查询publicList ... [详细]
  • lora物联网开发教程(物联网lora特点)
    长距离星型架构,由于长距离连接性,从而减少了电池寿命。这个协议采用了阿罗哈法。在一个网状网络或者一个异步网络中,例如蜂窝网,结点必须频繁的被唤醒,来同步网络和检查消息。这种同步,大 ... [详细]
  • 导读:今天编程笔记来给各位分享关于php动态扩展怎么加载的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: ... [详细]
  • 【自制小工具】代码生成器
    【自制小工具】代码生成器陆陆续续接触过好几款代码生成工具,发现确实好用,但都会有那么点不完善的地方,所以索性就自己做一个吧。界面非常简单,反正是自己用的,简单点用起来也方便上图:左 ... [详细]
  • 一、基本Tag1.Tag定义了Item实例,有三个基本的属性来定义一个item实例,大小写敏感。id-每个Item实例的唯一标识type ... [详细]
  • nvmw安装,用于控制node版本;
    之前一直使用的是nodev2.2.0版本,挺说新版本的node解决了npm安装插件产生文件夹结构过深的问题,所以就想更新试试;上网一看才发现,尼玛的node已经到了6.+版本了,好 ... [详细]
  • 42VERSE & 圆圈徽章,Web3 社交的流派之争——针对两个国内案例的调研
    01 行业分析本文所研究的细分赛道为:Web3应用层——社交与内容场景——DID/创新场景(以元宇宙3D空间为 ... [详细]
  • C语言是一个什么样的语言,为什么每个程序员都要学习
    对于大部分程序员,C语言是学习编程的第一门语言,很少有不了解C的程序员。C语言除了能让你了解编程的相关概念,带你走进编程的大门,还能让你明白程序的运行原理,比如,计算机的各个部件是 ... [详细]
author-avatar
给糖就不骗你
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有