Prechádzať zdrojové kódy

:new: 增加 WxMpXmlOutMessage 返回包含被加密信息对象的方法

Scruel Tao 3 rokov pred
rodič
commit
3f8b6e1c7a

+ 48 - 3
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlOutMessage.java

@@ -1,10 +1,12 @@
 package me.chanjar.weixin.mp.bean.message;
 
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlCData;
 import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
 import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import com.thoughtworks.xstream.annotations.XStreamConverter;
 import lombok.Data;
+import me.chanjar.weixin.common.util.crypto.WxCryptUtil;
 import me.chanjar.weixin.common.util.xml.XStreamCDataConverter;
 import me.chanjar.weixin.mp.config.WxMpConfigStorage;
 import me.chanjar.weixin.mp.builder.outxml.*;
@@ -20,13 +22,15 @@ public abstract class WxMpXmlOutMessage implements Serializable {
   private static final long serialVersionUID = -381382011286216263L;
 
   @XStreamAlias("ToUserName")
-  @JacksonXmlProperty(localName = "ToUserName")
   @XStreamConverter(value = XStreamCDataConverter.class)
+  @JacksonXmlProperty(localName = "ToUserName")
+  @JacksonXmlCData
   protected String toUserName;
 
   @XStreamAlias("FromUserName")
-  @JacksonXmlProperty(localName = "FromUserName")
   @XStreamConverter(value = XStreamCDataConverter.class)
+  @JacksonXmlProperty(localName = "ToUserName")
+  @JacksonXmlCData
   protected String fromUserName;
 
   @XStreamAlias("CreateTime")
@@ -34,10 +38,36 @@ public abstract class WxMpXmlOutMessage implements Serializable {
   protected Long createTime;
 
   @XStreamAlias("MsgType")
-  @JacksonXmlProperty(localName = "MsgType")
   @XStreamConverter(value = XStreamCDataConverter.class)
+  @JacksonXmlProperty(localName = "MsgType")
+  @JacksonXmlCData
   protected String msgType;
 
+
+  @XStreamAlias("Encrypt")
+  @XStreamConverter(value = XStreamCDataConverter.class)
+  @JacksonXmlProperty(localName = "Encrypt")
+  @JacksonXmlCData
+  private String encrypt;
+
+  @XStreamAlias("MsgSignature")
+  @XStreamConverter(value = XStreamCDataConverter.class)
+  @JacksonXmlProperty(localName = "MsgSignature")
+  @JacksonXmlCData
+  private String msgSignature;
+
+  @XStreamAlias("TimeStamp")
+  @XStreamConverter(value = XStreamCDataConverter.class)
+  @JacksonXmlProperty(localName = "TimeStamp")
+  @JacksonXmlCData
+  private String timeStamp;
+
+  @XStreamAlias("Nonce")
+  @XStreamConverter(value = XStreamCDataConverter.class)
+  @JacksonXmlProperty(localName = "Nonce")
+  @JacksonXmlCData
+  private String nonce;
+
   /**
    * 获得文本消息builder
    */
@@ -100,6 +130,21 @@ public abstract class WxMpXmlOutMessage implements Serializable {
   }
 
   /**
+   * 转换成加密的结果
+   */
+  public WxMpXmlOutMessage toEncrypted(WxMpConfigStorage wxMpConfigStorage) {
+    String plainXml = toXml();
+    WxMpCryptUtil pc = new WxMpCryptUtil(wxMpConfigStorage);
+    WxCryptUtil.EncryptContext context = pc.encryptContext(plainXml);
+    WxMpXmlOutMessage res = new WxMpXmlOutMessage() {};
+    res.setNonce(context.getNonce());
+    res.setEncrypt(context.getEncrypt());
+    res.setTimeStamp(context.getTimeStamp());
+    res.setMsgSignature(context.getSignature());
+    return res;
+  }
+
+  /**
    * 转换成加密的xml格式
    */
   public String toEncryptedXml(WxMpConfigStorage wxMpConfigStorage) {