微信公众号开发(一)接入验证

1.官方文档接入验证如下所示:

2.

由以上介绍可知,当我们填入url与token的值,并提交后,微信会发送一个get请求到我们填写的url上,并且携带4个参数,而signature参数结合了开发者填写的token参数和请求中的timestamp参数、nonce参数来做的加密签名,我们在后台需要对该签名进行校验,看是否合法。实际上,我们发现微信带过来的4个参数中并没有带token参数,仅有signature是和token有关的,所以我们应该在本地应用中也准备一个和填入的token相同的参数,再通过微信传入的timestamp与nonce做相同算法的加密操作,若结果与微信传入的signature相同,即为合法,则原样返回echostr参数,代表接入成功,否则不做处理,则接入失败

3.url我们可以通过购买内网穿透natapp来完成,该natapp链接映射本地tomcat,我的配置如下图所示:

4.因此我的代码应该写一个请求是get方式的intoWechat接口,代码如下:

@Controller
public class WechatIntoController {
/***
 * 微信URL接入验证
 */
	@RequestMapping(value="/intoWechat",method=RequestMethod.GET)
	@ResponseBody
	public String validate(String signature,String timestamp,String nonce,String echostr) {
		//1.将token、timestamp、nonce三个参数进行字典排序
		String[] arr= {timestamp,nonce,WechatUtil.TOKEN};
		Arrays.sort(arr);
		//2.将三个字符串拼接成一个字符串进行sha1加密
		StringBuilder sb=new StringBuilder();
		for (String string : arr) {
			sb.append(string);
		}
		//3.将加密后的字符串与signature对比,标识请求来源于微信
		if(SecurityUtil.getSha1(sb.toString()).equals(signature)) {
			//接入成功
			return echostr;
		}else {
			//接入失败
			return "";
		}	
	}
}

5.在微信公众平台提交设置显示配置成功就代表接入成功

6.备注:1.代码中WeChatUtil.TOKEN是一个常量,常量值必须要和我们在微信公众平台页面上填入的token值相同,通常可以抽取到配置文件中来注入值比较灵活。

2.SecurityUtil是一个工具类,提供了sha1加密的方法。sha1下载地址:

https://download.csdn.net/download/royal1235/11489272

 

发布了87 篇原创文章 · 获赞 40 · 访问量 21万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章