微信公众平台开发(7)--验证消息的合法性

简介: 本文目录1. 前言2. 区分验证方法3. 验证4. 小结

1. 前言

我们在微信公众平台配置了一个我们自己服务器的URL地址,注意该地址有两个作用:


验证服务器的有效性。也就是说在填写URL并点击提交时,微信官方会发送消息到指定URL,验证我们提供的URL是否有效。

验证消息的合法性。微信给我们的服务发消息时,会先发送验证消息,里面会携带参数,我们可以根据这些参数信息验证消息是否合法——即是否的确来自微信而不是伪造的。

2. 区分验证方法

那么,两种验证都是共享一个URL,如何区分呢。我们从微信官方文档得知,第一种验证是GET方式,第二种是POST方式。而且第二种验证里面并不涉及echostr参数。


所以我们修改验证控制器代码如下:


/**

* 验证控制器

*/

@Controller

public class CheckController {

@Autowired

private WxMpService wxMpService;


// 接入验证

@GetMapping("/checkToken")

@ResponseBody

public String checkTokenGet(@RequestParam("signature") String signature, @RequestParam("timestamp") String timestamp, @RequestParam("nonce") String nonce,

  @RequestParam(name = "echostr", required = false) String echostr) {

 System.out.println("接入验证");

 if (!wxMpService.checkSignature(timestamp, nonce, signature)) {

  // 消息不合法

  return "消息不合法";

 }

 // 消息合法

 return echostr;

}


// 消息合法验证

@PostMapping("/checkToken")

@ResponseBody

public String checkTokenPost(@RequestParam("signature") String signature, @RequestParam("timestamp") String timestamp, @RequestParam("nonce") String nonce) {

 System.out.println("消息合法验证");

 if (!wxMpService.checkSignature(timestamp, nonce, signature)) {

  // 消息不合法

  return "消息不合法";

 }

 // 消息合法则继续处理

 return "";

}

}


3. 验证

我们首先验证服务器有效性,登录微信公众平台,打开【设置与开发】-【基本配置】菜单,点击【修改配置】,然后直接【提交】。控制台打印接入验证,说明此时微信将消息发送到了checkTokenGet 方法。


接下来验证消息的合法性,我们关注微信公众号,然后通过微信给公众号发送一个消息,此时控制台输出了消息合法验证,说明此时微信将消息发送给了checkTokenPost方法处理。


OK,这说明我们的程序逻辑是对的。


4. 小结

我们通过微信公众平台配置的URL,实际上是有两层作用的,第一层是接受微信对我们服务器的验证,第二层是每次发送消息微信会发送合法性的参数供我们来验证消息是否真正来自微信。


这两种消息的关键区分就是一个是GET请求,一个是POST请求,我个人认为应该设计成两个URL接口,这样弄成一个会让初学者感到困惑。


个人一些浅薄见解,仅供参考。

相关文章
|
6月前
|
前端开发 开发者
【微信公众号对接】有关签名一直报错,提示invalid signature问题(我的签名和使用微信开发者工具验证返回的签名的是一致的)但还是报错!!!
【微信公众号对接】有关签名一直报错,提示invalid signature问题(我的签名和使用微信开发者工具验证返回的签名的是一致的)但还是报错!!!
364 0
|
6月前
|
开发者
微信公众平台开发基本配置
微信公众平台开发基本配置
169 0
|
4月前
|
移动开发 JavaScript
thinkPHP5.0开发微信H5页面分享接口signature验证失败,signature与微信 JS 接口签名校验工具返回结果不一致
thinkPHP5.0开发微信H5页面分享接口signature验证失败,signature与微信 JS 接口签名校验工具返回结果不一致
86 0
|
4月前
|
PHP 开发工具
tp5+微信公众号服务器配置时使用官方sdk还是token验证失败
tp5+微信公众号服务器配置时使用官方sdk还是token验证失败
39 0
|
5月前
|
Java API
java进行微信公众号开发
java进行微信公众号开发
144 0
|
6月前
|
安全 Java Linux
企业微信应用结合Cpolar内网穿透实现固定域名验证回调本地接口服务
企业微信应用结合Cpolar内网穿透实现固定域名验证回调本地接口服务
|
6月前
|
人工智能 Python
【Python + 微信】微信公众号开发避坑指南
【Python + 微信】微信公众号开发避坑指南
118 0
|
6月前
|
XML 安全 Java
如何开发微信公众号后台
如何开发微信公众号后台
162 0
|
6月前
|
移动开发 JavaScript
微信公众号H5开发,在微信浏览器打开H5,无法一键下载图片
微信公众号H5开发,在微信浏览器打开H5,无法一键下载图片
213 0
|
6月前
|
XML Go 数据格式
【微信公众号开发】基于golang的公众号开发——接入消息自动回复接口
【微信公众号开发】基于golang的公众号开发——接入消息自动回复接口
404 0