声明 : 本系列纯属自己为了学习而编写,均已测试号为例,如果不正之处,恳请指正,谢谢!
接入微信公众平台开发,开发者需要按照如下步骤完成:
1、填写服务器配置
由于只是接入,只需要一个Controller的方法路径 和 定义一个token,可以写在配置文件里
2、验证服务器地址的有效性
/**
* 处理微信服务器发来的get请求,进行签名的验证
* <p>
* signature 微信端发来的签名
* timestamp 微信端发来的时间戳
* nonce 微信端发来的随机字符串
* echostr 微信端发来的验证字符串
*/
@GetMapping(value = "wechat")
public void validate(HttpServletRequest request, HttpServletResponse response) throws IOException {
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String echostr = request.getParameter("echostr");
IOUtils.write(SignatureUtil.checkSignature(signature, wechatAccountConfig.getToken(), timestamp, nonce) ? echostr : null, response.getOutputStream());
}
/**
* 此处是处理微信服务器的消息转发的
*/
@PostMapping(value = "wechat")
public void processMsg(HttpServletRequest request, HttpServletResponse response) throws Exception {
//调用核心服务类接收处理请求
defaultMsgDispose(request.getInputStream(), response.getOutputStream());
}
/**
* SHA1加密 验证签名
*
* @param signature 微信签名
* @param params token,timestamp,nonce
* @return 是否符合
*/
public static boolean checkSignature(String signature, String... params) {
Arrays.sort(params);
String str = StringUtils.join(params);
String sign = DigestUtils.sha1Hex(str);
return Objects.equals(signature, sign);
}