public Object receiveAuth(@RequestBody String postData,
@RequestParam(value = "signature", required = false) String signature,
@RequestParam(value = "timestamp", required = false) String timeStamp,
@RequestParam(value = "nonce", required = false) String nonce,
@RequestParam(value = "encrypt_type", required = false) String encryptType,
@RequestParam(value = "msg_signature", required = false) String msgSignature) {
try {
if (postData.endsWith("\\n")) {
postData = postData.substring(0, postData.length() - 2);
}
postData = UnicodeUtil.toString(postData);
org.w3c.dom.Document document = XmlUtil.readXML(postData);
NodeList nodeList = document.getElementsByTagName("Encrypt");
String encrypt = nodeList.item(0).getTextContent();
log.info("Encrypt:" + encrypt);
String format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%1$s]]></Encrypt></xml>";
String fromXML = String.format(format, encrypt);
String msg;
if (StrUtil.isEmpty(encrypt)) {
msg = fromXML;
} else {
WXBizMsgCrypt wxBizMsgCrypt = new WXBizMsgCrypt(wechatOpenProperties.getComponentToken(), wechatOpenProperties.getComponentAesKey(), wechatOpenProperties.getComponentAppId());
msg = wxBizMsgCrypt.decryptMsg(msgSignature, timeStamp, nonce, fromXML);
}
log.info("解密后的明文:" + msg);
Document resultDocument = XmlUtil.readXML(msg);
NodeList infoTypeNodeList = resultDocument.getElementsByTagName("InfoType");
String infoType = infoTypeNodeList.item(0).getTextContent();
switch (infoType) {
case "component_verify_ticket":
NodeList ticketNodeList = resultDocument.getElementsByTagName("ComponentVerifyTicket");
String componentVerifyTicket = ticketNodeList.item(0).getTextContent();
log.info("ComponentVerifyTicket成功更新:{}", componentVerifyTicket);
break;
default:
break;
}
} catch (Exception e) {
log.error(e.getMessage());
}
return "success";
}
https://developers.weixin.qq.com/community/develop/doc/000a089c48c1881c2f8404a1d6b400