微信公众平台开发(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接口,这样弄成一个会让初学者感到困惑。


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

相关文章
|
5月前
|
小程序 PHP
微信公众号开发(一)打通服务器与微信之间的通信
说来惭愧PHP做了这么久,好像就没有从头开发过一个微信公众号,这次刚好有机会从头接入开发一个完整的公众号,也不能说完整,但是这些微信的接口我基本上都试一试~看看大概是什么情况。 首先:打通服务器与微信之间的通信。
62 0
|
2月前
|
前端开发 开发者
【微信公众号对接】有关签名一直报错,提示invalid signature问题(我的签名和使用微信开发者工具验证返回的签名的是一致的)但还是报错!!!
【微信公众号对接】有关签名一直报错,提示invalid signature问题(我的签名和使用微信开发者工具验证返回的签名的是一致的)但还是报错!!!
35 0
|
2月前
|
开发者
微信公众平台开发基本配置
微信公众平台开发基本配置
90 0
|
13天前
|
安全 Java Linux
企业微信应用结合Cpolar内网穿透实现固定域名验证回调本地接口服务
企业微信应用结合Cpolar内网穿透实现固定域名验证回调本地接口服务
|
6月前
|
JavaScript 算法 Java
企业微信开启接收消息+验证URL有效性
企业微信开启接收消息、验证URL有效性、SHA1、提供接收和推送给企业微信消息的加解密接口、计算消息签名接口
106 1
企业微信开启接收消息+验证URL有效性
|
2月前
|
移动开发 JavaScript
微信公众号H5开发,在微信浏览器打开H5,无法一键下载图片
微信公众号H5开发,在微信浏览器打开H5,无法一键下载图片
57 0
|
4月前
|
XML Go 数据格式
【微信公众号开发】基于golang的公众号开发——接入消息自动回复接口
【微信公众号开发】基于golang的公众号开发——接入消息自动回复接口
157 0
|
5月前
|
前端开发 开发者
【微信公众号对接】有关签名一直报错,提示invalid signature问题(我的签名和使用微信开发者工具验证返回的签名的是一致的)但还是报错!!!
【微信公众号对接】有关签名一直报错,提示invalid signature问题(我的签名和使用微信开发者工具验证返回的签名的是一致的)但还是报错!!!
53 0
|
5月前
|
小程序 PHP 开发者
微信公众号开发(八)生成带参数二维码,以及将二维码下载至本地
微信的二维码真是个神奇的东西。在我们开发中,应用也是很多~ 用户扫描带场景值(参数)二维码时,可能推送以下两种事件:
73 1
|
5月前
|
XML 移动开发 小程序
微信公众号开发(七)微信h5跳转小程序及小游戏示例
最近公司做活动,需要从h5页面跳转至微信小游戏。 当时接到这个需求的时候,就在想,这玩意能相互跳转么? 后来百度了一下,还真行。
121 1

热门文章

最新文章