微信扫码登陆 —— 接收消息
官方参数示例:
参数分为:param 形式 和 body形式(xml),上面参数和 现实调用也有差距!!
@PostMapping(value = "/receive", consumes = MediaType.TEXT_XML_VALUE)
@Operation(summary = "21 消息接受接口")
@ApiOperationSupport(order = 21)
public void receive(WechatReceiveParam param, @RequestBody WechatReceiveBody body) {log.info("消息接受接口,参数:{},body:{}", JSONUtil.toJsonStr(param), JSONUtil.toJsonStr(body));wechatMpService.receive(param, body);
}
param参数
@Data
public class WechatReceiveParam {/*** 微信加密签名*/private String signature;/*** 时间戳*/private String timestamp;/*** 随机数*/private String nonce;/*** 微信用户id*/private String openid;/*** 加密类型*/private String encrypt_type;/*** 消息签名*/private String msg_signature;}
body参数
需引入解析xml
<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId><version>2.19.2</version>
</dependency>
@Data
@EqualsAndHashCode(callSuper = true)
@JacksonXmlRootElement(localName = "xml")
public class WechatReceiveBody extends WechatMsgInfo {/*** 密文:安全模式下,会把父类字段放在加密消息中*/@JacksonXmlProperty(localName = "Encrypt")private String encrypt;}
@Data
@JacksonXmlRootElement(localName = "xml")
public class WechatMsgInfo {/*** 接收者*/@JacksonXmlProperty(localName = "ToUserName")private String toUserName;/*** 发送者*/@JacksonXmlProperty(localName = "FromUserName")private String fromUserName;/*** 时间戳*/@JacksonXmlProperty(localName = "CreateTime")private String createTime;/*** 消息类型:普通消息 和 事件(关注,取消关注,扫码 等)*/@JacksonXmlProperty(localName = "MsgType")private String msgType;/*** 消息内容*/@JacksonXmlProperty(localName = "Content")private String content;/*** 消息id*/@JacksonXmlProperty(localName = "MsgId")private String msgId;/*** 订阅:subscribe,取消订阅:unsubscribe,。。。*/@JacksonXmlProperty(localName = "Event")private String event;@JacksonXmlProperty(localName = "EventKey")private String eventKey;}