微信后端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
4.1 KiB

package com.ynxbd.wx.servlet;
import com.ynxbd.common.result.Result;
import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.wx.wxfactory.bean.event.WxEvent;
import com.ynxbd.wx.wxfactory.utils.WxEventHelper;
import com.ynxbd.wx.wxfactory.utils.WxPassiveReplyHelper;
import com.ynxbd.wx.wxfactory.utils.WxSignHelper;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Slf4j
@WebServlet("/wx")
public class WxServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
WxEvent wxEvent = WxSignHelper.getReqXmlToBean(request, WxEvent.class);
if (wxEvent == null) {
String echoStr = request.getParameter("echostr");
if (echoStr != null) {
Result.respStr(response, echoStr); // 首次请求申请验证,返回echoStr
return;
}
log.warn("[消息]event is null");
Result.respStr(response, WxPassiveReplyHelper.SUCCESS);
return;
}
if (WxEventHelper.filter(wxEvent)) {
Result.respStr(response, WxPassiveReplyHelper.SUCCESS);
return;
}
if (!WxEventHelper.verifyEventSign(request, WeChatConfig.TOKEN)) {
log.warn("[消息]验签失败");
Result.respStr(response, WxPassiveReplyHelper.SUCCESS);
return;
}
String msgId = wxEvent.getMsgId();
//点击菜单不需要往下操作,直接返回
if (msgId == null&&wxEvent.getEvent()==WxPassiveReplyHelper.EVENT_VIEW) {
Result.respStr(response, WxPassiveReplyHelper.SUCCESS);
return;
}
String toUserName = wxEvent.getToUserName();
String fromUserName = wxEvent.getFromUserName();
String key = fromUserName + "_" + toUserName + "_" + msgId + "_" + wxEvent.getCreateTime();
if (WxPassiveReplyHelper.isRepeat(key)) {
Result.respStr(response, WxPassiveReplyHelper.SUCCESS);
return;
}
String eventKey = wxEvent.getEventKey();
String event = wxEvent.getEvent();
String msgType = wxEvent.getMsgType();
String content = wxEvent.getContent();
content = content == null ? null : content.trim().toUpperCase();
WxPassiveReplyHelper.textCommon(response, content, msgType, fromUserName, toUserName);
switch (WeChatConfig.APP_ID) {
case "wx18b15dc67fc96f89":
WxPassiveReplyHelper.华坪县人民医院(response, content, msgType, fromUserName, toUserName, eventKey, event);
break;
case "wx1e30610a28d189a8":
WxPassiveReplyHelper.巍山县人民医院(response, content, msgType, fromUserName, toUserName, eventKey, event);
break;
case "wxca97aaeb3c40c0d0":
WxPassiveReplyHelper.芒市人民医院(response, content, msgType, fromUserName, toUserName, eventKey, event);
break;
case "wxd503671f502bd89d":
WxPassiveReplyHelper.红河州第一人民医院(response, content, msgType, fromUserName, toUserName, eventKey, event);
break;
case "wx1f1e9d29f9b44c36":
WxPassiveReplyHelper.玉龙县人民医院(response, content, msgType, fromUserName, toUserName, eventKey, event);
break;
case "wx8e7ce6f6e83eb156":
WxPassiveReplyHelper.德宏州妇幼保健院(response, content, msgType, fromUserName, toUserName, eventKey, event);
break;
default:
break;
}
Result.respStr(response, WxPassiveReplyHelper.SUCCESS);
}
}