微信公众号开发的官方文档:
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319
其中我们开发好的服务器,在配置到微信公众号开发平台的"服务器地址"之后(下图),在真正生效之前,需要通过验证。
![1ab04eb078d1a0b6efa1a5053313281a.png](https://i-blog.csdnimg.cn/blog_migrate/0ec73414cf9d2e23a6a20f23820e1bfd.jpeg)
验证逻辑:
微信服务器会发送一个HTTP GET请求到我们填写的服务器地址URL上。
这个HTTP GET请求携带的参数:
1. signature: 微信加密签名,这是微信平台计算好的一个值,基于开发者填写的token参数和请求中的timestamp参数、nonce参数。
2. timestamp:时间戳
3. nonce:随机数
4. echostr:随机字符串
开发者需要通过编程,若确认此次GET请求是否来自微信服务器。确认的逻辑就是把token, 请求中的timestamp和nouce三个参数作为输入,按照微信公众号开发平台规定的逻辑再计算一次,结果同
如果确实是,需要原样返回echostr参数内容,这样我们开发的微信消息服务器就接入成功了。
不幸的是微信官网上提供的示例代码只有PHP版本的,
![c5698fce96fc4e2ad4284bb9371482a2.png](https://i-blog.csdnimg.cn/blog_migrate/0549fecbeb82719be5ad3b9371fcab07.jpeg)
所以我这里提供一份Java版本的:
@GetMapping("/message")
@ResponseBody
public String checkToken(@RequestParam String signature, @RequestParam String timestamp,
@RequestParam String nonce, @RequestParam String echostr) {
boolean result = wxService.checkSignature(signature, timestamp, nonce, echostr);
if (result)
return echostr;
return "FAILURE";
}
checkSignature方法的实现:
public boolean checkSignature(String signature, String timestamp, String nonce, String echostr) {
String[] array = new String[]{ "这里可以硬编码一个token