因为只是接入,只须要一个Controller的方法路径 和 定义一个token,能够写在配置文件里java
/** * FileName: CoreController * Author: Phil * Date: 8/1/2018 15:52 * Description: 接入微信并处理消息事件 * History: * <author> <time> <version> <desc> * 做者姓名 修改时间 版本号 描述 */ package com.phil.wechat; import com.phil.modules.util.SignatureUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; /** * 〈一句话功能简述〉 * 〈接入微信并处理消息事件〉 * * @author Phil * @create 8/1/2018 15:52 * @since 1.0.0 */ @RestController @RequestMapping("api/core/weixin/V1") @Slf4j public class CoreController { /** * 处理微信服务器发来的get请求,进行签名的验证 * <p> * signature 微信端发来的签名 * timestamp 微信端发来的时间戳 * nonce 微信端发来的随机字符串 * echostr 微信端发来的验证字符串 */ @GetMapping(value = "wechat") public String validate(@RequestParam(value = "signature") String signature, @RequestParam(value = "timestamp") String timestamp, @RequestParam(value = "nonce") String nonce, @RequestParam(value = "echostr") String echostr) { log.warn("validate"); return SignatureUtil.checkSignature(signature, timestamp, nonce) ? echostr : null; } /** * 此处是处理微信服务器的消息转发的 */ @PostMapping(value = "wechat") public String processMsg(HttpServletRequest request) { // // 调用核心服务类接收处理请求 return ""; } }
/**
* 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);
}
略web