抽空总结一下微信公众号开发,用的是现在github最流行的wechatSDK:weixin-java-tools.这个包挺强大,不过缺点就是文档极其简陋,像我这样的lowB码农,用起来还是需要摸索。
首先总得看微信api,贴一下地址吧。https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319
一开始看微信api必须用qq浏览器,现在不用了,谷歌就可以了。
1.接入微信公众平台开发
贴一下api里那个服务器地址接口。
@RequestMapping(value = "signature")
public void signature(HttpServletResponse response,HttpServletRequest request, String signature, String timestamp,String nonce, String echostr, String postData) throws IOException {
response.setContentType("text/html;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
if (echostr != null || StringUtils.isNotBlank(echostr)) {
boolean ck = weiXinMPService.checkSignature(signature, timestamp,nonce, echostr);
if (ck) {
ServletUtil.writerText(response, echostr);
}
return;
}
// 如果没有echostr,则说明传递过来的是用户消息,在解密方法里会自动验证消息是否合法
WxMpConfigStorage defaultStorage = WeiXinMpInit.defaultStorage;
String encryptType = StringUtils.isBlank(request.getParameter("encrypt_type")) ? "raw" : request.getParameter("encrypt_type");
if ("raw".equals(encryptType)) {
// 明文传输的消息
WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(request.getInputStream());
WxMpXmlOutMessage outMessage = weiXinMPService.analyticalData(inMessage);
if (outMessage != null) {
response.getWriter().write(outMessage.toXml());
}
return;
}
if ("aes".equals(encryptType)) {
// 是aes加密的消息
String msgSignature = request.getParameter("msg_signature");
WxMpXmlMessage inMessage = WxMpXmlMessage.fromEncryptedXml(request.getInputStream(), defaultStorage, timestamp, nonce,msgSignature);
WxMpXmlOutMessage outMessage = weiXinMPService.analyticalData(inMessage);
response.getWriter().write(outMessage.toEncryptedXml(defaultStorage));
return;
}
response.getWriter().println("不可识别的加密类型");
}