WxMaMessage.java 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. package cn.binarywang.wx.miniapp.bean;
  2. import cn.binarywang.wx.miniapp.config.WxMaConfig;
  3. import cn.binarywang.wx.miniapp.util.crypt.WxMaCryptUtils;
  4. import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
  5. import cn.binarywang.wx.miniapp.util.xml.XStreamTransformer;
  6. import com.google.gson.annotations.SerializedName;
  7. import com.thoughtworks.xstream.annotations.XStreamAlias;
  8. import com.thoughtworks.xstream.annotations.XStreamConverter;
  9. import lombok.Data;
  10. import me.chanjar.weixin.common.util.xml.XStreamCDataConverter;
  11. import org.apache.commons.io.IOUtils;
  12. import java.io.IOException;
  13. import java.io.InputStream;
  14. import java.io.Serializable;
  15. import java.nio.charset.StandardCharsets;
  16. /**
  17. * @author <a href="https://github.com/binarywang">Binary Wang</a>
  18. */
  19. @XStreamAlias("xml")
  20. @Data
  21. public class WxMaMessage implements Serializable {
  22. private static final long serialVersionUID = -3586245291677274914L;
  23. @SerializedName("Encrypt")
  24. @XStreamAlias("Encrypt")
  25. @XStreamConverter(value = XStreamCDataConverter.class)
  26. private String encrypt;
  27. @SerializedName("ToUserName")
  28. @XStreamAlias("ToUserName")
  29. @XStreamConverter(value = XStreamCDataConverter.class)
  30. private String toUser;
  31. @SerializedName("FromUserName")
  32. @XStreamAlias("FromUserName")
  33. @XStreamConverter(value = XStreamCDataConverter.class)
  34. private String fromUser;
  35. @SerializedName("CreateTime")
  36. @XStreamAlias("CreateTime")
  37. private Integer createTime;
  38. @SerializedName("MsgType")
  39. @XStreamAlias("MsgType")
  40. @XStreamConverter(value = XStreamCDataConverter.class)
  41. private String msgType;
  42. @SerializedName("MsgDataFormat")
  43. @XStreamAlias("MsgDataFormat")
  44. @XStreamConverter(value = XStreamCDataConverter.class)
  45. private String msgDataFormat;
  46. @SerializedName("Content")
  47. @XStreamAlias("Content")
  48. @XStreamConverter(value = XStreamCDataConverter.class)
  49. private String content;
  50. @SerializedName("MsgId")
  51. @XStreamAlias("MsgId")
  52. private Long msgId;
  53. @SerializedName("PicUrl")
  54. @XStreamAlias("PicUrl")
  55. @XStreamConverter(value = XStreamCDataConverter.class)
  56. private String picUrl;
  57. @SerializedName("MediaId")
  58. @XStreamAlias("MediaId")
  59. @XStreamConverter(value = XStreamCDataConverter.class)
  60. private String mediaId;
  61. @SerializedName("Event")
  62. @XStreamAlias("Event")
  63. @XStreamConverter(value = XStreamCDataConverter.class)
  64. private String event;
  65. @SerializedName("Title")
  66. @XStreamAlias("Title")
  67. @XStreamConverter(value = XStreamCDataConverter.class)
  68. private String title;
  69. @SerializedName("AppId")
  70. @XStreamAlias("AppId")
  71. @XStreamConverter(value = XStreamCDataConverter.class)
  72. private String appId;
  73. @SerializedName("PagePath")
  74. @XStreamAlias("PagePath")
  75. @XStreamConverter(value = XStreamCDataConverter.class)
  76. private String pagePath;
  77. @SerializedName("ThumbUrl")
  78. @XStreamAlias("ThumbUrl")
  79. @XStreamConverter(value = XStreamCDataConverter.class)
  80. private String thumbUrl;
  81. @SerializedName("ThumbMediaId")
  82. @XStreamAlias("ThumbMediaId")
  83. @XStreamConverter(value = XStreamCDataConverter.class)
  84. private String thumbMediaId;
  85. @SerializedName("SessionFrom")
  86. @XStreamAlias("SessionFrom")
  87. @XStreamConverter(value = XStreamCDataConverter.class)
  88. private String sessionFrom;
  89. /**
  90. * 以下是异步校验图片/音频是否含有违法违规内容的异步检测结果推送报文中的参数
  91. */
  92. @SerializedName("isrisky")
  93. @XStreamAlias("isrisky")
  94. @XStreamConverter(value = XStreamCDataConverter.class)
  95. private String isRisky;
  96. @SerializedName("extra_info_json")
  97. @XStreamAlias("extra_info_json")
  98. @XStreamConverter(value = XStreamCDataConverter.class)
  99. private String extraInfoJson;
  100. @SerializedName("appid")
  101. @XStreamAlias("appid")
  102. @XStreamConverter(value = XStreamCDataConverter.class)
  103. private String appid;
  104. @SerializedName("trace_id")
  105. @XStreamAlias("trace_id")
  106. @XStreamConverter(value = XStreamCDataConverter.class)
  107. private String traceId;
  108. @SerializedName("status_code")
  109. @XStreamAlias("status_code")
  110. @XStreamConverter(value = XStreamCDataConverter.class)
  111. private String statusCode;
  112. @SerializedName("Scene")
  113. @XStreamAlias("Scene")
  114. private Integer scene;
  115. @SerializedName("Query")
  116. @XStreamAlias("Query")
  117. @XStreamConverter(value = XStreamCDataConverter.class)
  118. private String query;
  119. public static WxMaMessage fromXml(String xml) {
  120. return XStreamTransformer.fromXml(WxMaMessage.class, xml);
  121. }
  122. public static WxMaMessage fromXml(InputStream is) {
  123. return XStreamTransformer.fromXml(WxMaMessage.class, is);
  124. }
  125. /**
  126. * 从加密字符串转换.
  127. *
  128. * @param encryptedXml 密文
  129. * @param wxMaConfig 配置存储器对象
  130. * @param timestamp 时间戳
  131. * @param nonce 随机串
  132. * @param msgSignature 签名串
  133. */
  134. public static WxMaMessage fromEncryptedXml(String encryptedXml,
  135. WxMaConfig wxMaConfig, String timestamp, String nonce,
  136. String msgSignature) {
  137. String plainText = new WxMaCryptUtils(wxMaConfig).decrypt(msgSignature, timestamp, nonce, encryptedXml);
  138. return fromXml(plainText);
  139. }
  140. public static WxMaMessage fromEncryptedXml(InputStream is, WxMaConfig wxMaConfig, String timestamp,
  141. String nonce, String msgSignature) {
  142. try {
  143. return fromEncryptedXml(IOUtils.toString(is, StandardCharsets.UTF_8), wxMaConfig,
  144. timestamp, nonce, msgSignature);
  145. } catch (IOException e) {
  146. throw new RuntimeException(e);
  147. }
  148. }
  149. public static WxMaMessage fromJson(String json) {
  150. return WxMaGsonBuilder.create().fromJson(json, WxMaMessage.class);
  151. }
  152. public static WxMaMessage fromEncryptedJson(String encryptedJson, WxMaConfig config) {
  153. try {
  154. WxMaMessage encryptedMessage = fromJson(encryptedJson);
  155. String plainText = new WxMaCryptUtils(config).decrypt(encryptedMessage.getEncrypt());
  156. return fromJson(plainText);
  157. } catch (Exception e) {
  158. throw new RuntimeException(e);
  159. }
  160. }
  161. public static WxMaMessage fromEncryptedJson(InputStream inputStream, WxMaConfig config) {
  162. try {
  163. return fromEncryptedJson(IOUtils.toString(inputStream, StandardCharsets.UTF_8), config);
  164. } catch (IOException e) {
  165. throw new RuntimeException(e);
  166. }
  167. }
  168. @Override
  169. public String toString() {
  170. return this.toJson();
  171. }
  172. public String toJson() {
  173. return WxMaGsonBuilder.create().toJson(this);
  174. }
  175. }