微信公衆號開發(一)接入驗證

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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章