微信扫码登陆 —— 接收消息

官方参数示例:

参数分为: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;

}