This commit is contained in:
shikong 2024-12-15 02:37:08 +08:00
parent b9c5228d59
commit f7293a1f04
Signed by: Shikong
GPG Key ID: BD85FF18B373C341
2 changed files with 59 additions and 47 deletions

View File

@ -1,4 +1,5 @@
package cn.skcks.docking.wx.services.mp.config;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;

View File

@ -68,61 +68,72 @@ public class MpAppService {
});
}
public void service(HttpServletRequest request, HttpServletResponse response, String appId, SignatureVo signatureVo) throws IOException {
response.setContentType("text/html;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
/**
* 处理微信公众号消息请求的服务方法
*
* @param request HTTP请求对象
* @param response HTTP响应对象
* @param appId 应用ID
* @param signatureVo 签名验证信息
* @throws IOException 如果处理过程中发生IO异常
*/
public void service(HttpServletRequest request, HttpServletResponse response, String appId, SignatureVo signatureVo) throws IOException {
// 设置响应内容类型和状态码
response.setContentType("text/html;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
WxMpService wxMpService = serviceMap.get(appId);
if(ObjectUtils.anyNull(appId, signatureVo, wxMpService)){
response.getWriter().println("非法请求");
return;
}
// 从服务映射中获取WxMpService实例
WxMpService wxMpService = serviceMap.get(appId);
if (ObjectUtils.anyNull(appId, signatureVo, wxMpService)) {
// 如果参数为空返回非法请求响应
response.getWriter().println("非法请求");
return;
}
if(!wxMpService.checkSignature(signatureVo.getTimestamp(), signatureVo.getNonce(), signatureVo.getSignature())){
response.getWriter().println("非法请求");
return;
}
// 验证签名是否合法
if (!wxMpService.checkSignature(signatureVo.getTimestamp(), signatureVo.getNonce(), signatureVo.getSignature())) {
// 如果签名不合法返回非法请求响应
response.getWriter().println("非法请求");
return;
}
// 处理微信服务器的验证请求
String echostr = request.getParameter("echostr");
if (StringUtils.isNotBlank(echostr)) {
// 返回echostr以通过微信服务器的验证
response.getWriter().println(echostr);
return;
}
// 签名验证请求
String echostr = request.getParameter("echostr");
if(StringUtils.isNotBlank(echostr)){
response.getWriter().println(echostr);
return;
}
// 获取加密类型默认为"raw"
String encryptType = StringUtils.isBlank(request.getParameter("encrypt_type")) ? "raw" : request.getParameter("encrypt_type");
String encryptType = StringUtils.isBlank(request.getParameter("encrypt_type")) ?
"raw" :
request.getParameter("encrypt_type");
WxMpXmlMessage inMessage = messageHandlerService.handleMessage(request, wxMpService, signatureVo);
if(inMessage == null) {
response.getWriter().println("不可识别的加密类型");
// 处理消息并获取解析后的WxMpXmlMessage对象
WxMpXmlMessage inMessage = messageHandlerService.handleMessage(request, wxMpService, signatureVo);
if (inMessage == null) {
// 如果无法识别的加密类型返回不可识别的消息响应
response.getWriter().println("不可识别的加密类型");
} else {
// 记录接收到的消息内容
log.debug("\n[↓] 接收消息: \n{}", inMessage);
// 构建自动回复的消息
WxMpXmlOutMessage outMessage = WxMpXmlOutMessage.TEXT()
.toUser(inMessage.getFromUser())
.fromUser(inMessage.getToUser())
.content(DateUtil.now())
.build();
log.debug("\n[↑] 响应消息: \n{}", JsonUtils.toCompressJson(outMessage));
// 根据加密类型返回响应
if (StringUtils.equalsIgnoreCase(encryptType, "raw")) {
response.getWriter().write(outMessage.toXml());
} else {
log.debug("\n[↓] 接收消息: \n{}", inMessage);
// 客服消息
// response.getWriter().write("");
//mpKeFuService.reply(response, wxMpService, inMessage);
// WxMpKefuMessage outMessage = WxMpKefuMessage.TEXT()
// .toUser(inMessage.getFromUser())
// .content(DateUtil.now())
// .build();
// wxMpService.getKefuService().sendKefuMessage(outMessage);
// 自动回复
WxMpXmlOutMessage outMessage = WxMpXmlOutMessage.TEXT()
.toUser(inMessage.getFromUser())
.fromUser(inMessage.getToUser())
.content(DateUtil.now())
.build();
log.debug("\n[↑] 响应消息: \n{}", JsonUtils.toCompressJson(outMessage));
if(StringUtils.equalsIgnoreCase(encryptType, "raw")) {
response.getWriter().write(outMessage.toXml());
} else {
response.getWriter().write(outMessage.toEncryptedXml(wxMpService.getWxMpConfigStorage()));
}
response.getWriter().write(outMessage.toEncryptedXml(wxMpService.getWxMpConfigStorage()));
}
}
}
/**
* 获取所有公众号列表