官方参数示例:

参数分为:param 形式 和 body 形式(xml),上面参数和 现实调用也有差距!!
java
@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参数
java
@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
java
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.19.2</version>
</dependency>
java
@Data
@EqualsAndHashCode(callSuper = true)
@JacksonXmlRootElement(localName = "xml")
public class WechatReceiveBody extends WechatMsgInfo {
/**
* 密文:安全模式下,会把父类字段放在加密消息中
*/
@JacksonXmlProperty(localName = "Encrypt")
private String encrypt;
}
java
@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;
}