Skip to content

MP_同步回复消息

Binary Wang edited this page Nov 9, 2023 · 4 revisions

WxMessageRouter默认使用异步的方式处理消息,如果要使用同步回复微信消息,那么:

  1. 需要将路由规则配置为同步
  2. 且handler需要返回一个WxMpXmlOutMessage
// 将WxXmlMessage交给消息路由器
HttpServletRequest request = ...;
WxXmlMessage inMsg = ...;
WxMpXmlOutMessage reMsg = router.route(inMsg);
if (reMsg != null) {
  // 说明是同步回复的消息
  // 将xml写入HttpServletResponse
  response.setCharacterEncoding("UTF-8");
  response.getWriter().write(reMsg.toXml());
} else {
  // 说明是异步回复的消息,直接将空字符串写入HttpServletResponse
}

WxMpXmlOutTextMessage

WxMpXmlOutTextMessage是同步回复给微信消息的对象,不同类型的消息类型可以用不同的方式构造:

文本消息

WxMpXmlOutMessage.TEXT()
  .content("content")
  .fromUser("to")
  .toUser("from")
  .build();

图片消息

WxMpXmlOutMessage.IMAGE()
  .mediaId("ddfefesfsdfef")
  .fromUser("to")
  .toUser("from")
  .build();

语音消息

WxMpXmlOutMessage.VOICE()
  .mediaId("ddfefesfsdfef")
  .fromUser("to")
  .toUser("from")
  .build();

视频消息

WxMpXmlOutMessage.VIDEO()
  .mediaId("media_id")
  .fromUser("toUser")
  .toUser("fromUser")
  .title("title")
  .description("ddfff")
  .build();

音乐消息

WxMpXmlOutMessage.MUSIC()
  .fromUser("toUser")
  .toUser("fromUser")
  .title("title")
  .description("ddfff")
  .hqMusicUrl("hQMusicUrl")
  .musicUrl("musicUrl")
  .thumbMediaId("thumbMediaId")
  .build();

图文消息

WxMpXmlOutNewsMessage.Item item = new WxMpXmlOutNewsMessage.Item();
item.setDescription("description");
item.setPicUrl("picUrl");
item.setTitle("title");
item.setUrl("url");

WxMpXmlOutNewsMessage m = WxMpXmlOutMessage.NEWS()
  .fromUser("toUser")
  .toUser("fromUser")
  .addArticle(item)
  .build();
Clone this wiki locally