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