You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
224 lines
7.2 KiB
224 lines
7.2 KiB
2 years ago
|
package com.ynxbd.wx.wxfactory.menu.bean.xml;
|
||
|
|
||
|
|
||
|
import com.qq.weixin.mp.aes.WXBizMsgCrypt;
|
||
|
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||
|
import com.thoughtworks.xstream.annotations.XStreamConverter;
|
||
|
|
||
|
import java.io.IOException;
|
||
|
import java.io.InputStream;
|
||
|
import java.nio.charset.StandardCharsets;
|
||
|
import java.util.ArrayList;
|
||
|
import java.util.List;
|
||
|
|
||
|
import com.ynxbd.wx.config.WeChatConfig;
|
||
|
import lombok.Getter;
|
||
|
import lombok.NoArgsConstructor;
|
||
|
import lombok.Setter;
|
||
|
import lombok.ToString;
|
||
|
import org.apache.commons.io.IOUtils;
|
||
|
|
||
|
@Setter
|
||
|
@Getter
|
||
|
@NoArgsConstructor
|
||
|
@ToString
|
||
|
@XStreamAlias("xml")
|
||
|
public class WxXmlMessage {
|
||
|
@XStreamAlias("ToUserName")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String toUserName;
|
||
|
@XStreamAlias("FromUserName")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String fromUserName;
|
||
|
@XStreamAlias("CreateTime")
|
||
|
private Long createTime;
|
||
|
@XStreamAlias("MsgType")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String msgType;
|
||
|
@XStreamAlias("Content")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String content;
|
||
|
@XStreamAlias("MsgId")
|
||
|
private Long msgId;
|
||
|
@XStreamAlias("PicUrl")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String picUrl;
|
||
|
@XStreamAlias("MediaId")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String mediaId;
|
||
|
@XStreamAlias("Format")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String format;
|
||
|
@XStreamAlias("ThumbMediaId")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String thumbMediaId;
|
||
|
@XStreamAlias("Location_X")
|
||
|
private Double locationX;
|
||
|
@XStreamAlias("Location_Y")
|
||
|
private Double locationY;
|
||
|
@XStreamAlias("Scale")
|
||
|
private Double scale;
|
||
|
@XStreamAlias("Label")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String label;
|
||
|
@XStreamAlias("Title")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String title;
|
||
|
@XStreamAlias("Description")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String description;
|
||
|
@XStreamAlias("Url")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String url;
|
||
|
@XStreamAlias("Event")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String event;
|
||
|
@XStreamAlias("EventKey")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String eventKey;
|
||
|
@XStreamAlias("Ticket")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String ticket;
|
||
|
@XStreamAlias("Latitude")
|
||
|
private Double latitude;
|
||
|
@XStreamAlias("Longitude")
|
||
|
private Double longitude;
|
||
|
@XStreamAlias("Precision")
|
||
|
private Double precision;
|
||
|
@XStreamAlias("Recognition")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String recognition;
|
||
|
@XStreamAlias("ExpiredTime")
|
||
|
private String expiredTime;
|
||
|
@XStreamAlias("FailTime")
|
||
|
private String failTime;
|
||
|
@XStreamAlias("FailReason")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String failReason;
|
||
|
@XStreamAlias("TransInfo")
|
||
|
private WxKf kf;
|
||
|
@XStreamAlias("KfAccount")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String kfAccount;
|
||
|
@XStreamAlias("FromKfAccount")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String fromKfAccount;
|
||
|
@XStreamAlias("ToKfAccount")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String toKfAccount;
|
||
|
@XStreamAlias("Status")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String status;
|
||
|
@XStreamAlias("TotalCount")
|
||
|
private Integer totalCount;
|
||
|
@XStreamAlias("FilterCount")
|
||
|
private Integer filterCount;
|
||
|
@XStreamAlias("SentCount")
|
||
|
private Integer sentCount;
|
||
|
@XStreamAlias("ErrorCount")
|
||
|
private Integer errorCount;
|
||
|
@XStreamAlias("ScanCodeInfo")
|
||
|
private ScanCodeInfo scanCodeInfo = new ScanCodeInfo();
|
||
|
@XStreamAlias("SendPicsInfo")
|
||
|
private SendPicsInfo sendPicsInfo = new SendPicsInfo();
|
||
|
@XStreamAlias("SendLocationInfo")
|
||
|
private SendLocationInfo sendLocationInfo = new SendLocationInfo();
|
||
|
|
||
|
|
||
|
protected static WxXmlMessage fromXml(String xml) {
|
||
|
return XStreamTransformer.fromXml(WxXmlMessage.class, xml);
|
||
|
}
|
||
|
|
||
|
protected static WxXmlMessage fromXml(InputStream is) {
|
||
|
return XStreamTransformer.fromXml(WxXmlMessage.class, is);
|
||
|
}
|
||
|
|
||
|
public static WxXmlMessage decryptMsg(String encryptedXml, String timestamp, String nonce, String msgSignature) throws Exception {
|
||
|
WXBizMsgCrypt pc = new WXBizMsgCrypt(WeChatConfig.TOKEN, WeChatConfig.AES_KEY, WeChatConfig.APP_ID);
|
||
|
String plainText = pc.decryptMsg(msgSignature, timestamp, nonce, encryptedXml);
|
||
|
return fromXml(plainText);
|
||
|
}
|
||
|
|
||
|
public static WxXmlMessage decryptMsg(InputStream is, String timestamp, String nonce, String msgSignature) throws Exception {
|
||
|
try {
|
||
|
return decryptMsg(IOUtils.toString(is, StandardCharsets.UTF_8), timestamp, nonce, msgSignature);
|
||
|
} catch (IOException var6) {
|
||
|
throw new RuntimeException(var6);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
@Setter
|
||
|
@Getter
|
||
|
@NoArgsConstructor
|
||
|
@ToString
|
||
|
@XStreamAlias("SendLocationInfo")
|
||
|
public static class SendLocationInfo {
|
||
|
@XStreamAlias("Location_X")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String locationX;
|
||
|
@XStreamAlias("Location_Y")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String locationY;
|
||
|
@XStreamAlias("Scale")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String scale;
|
||
|
@XStreamAlias("Label")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String label;
|
||
|
@XStreamAlias("Poiname")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String poiname;
|
||
|
}
|
||
|
|
||
|
@Setter
|
||
|
@Getter
|
||
|
@NoArgsConstructor
|
||
|
@ToString
|
||
|
@XStreamAlias("SendPicsInfo")
|
||
|
public static class SendPicsInfo {
|
||
|
@XStreamAlias("Count")
|
||
|
private Long count;
|
||
|
@XStreamAlias("PicList")
|
||
|
protected final List<Item> picList = new ArrayList<>();
|
||
|
|
||
|
|
||
|
@Setter
|
||
|
@Getter
|
||
|
@NoArgsConstructor
|
||
|
@ToString
|
||
|
@XStreamAlias("item")
|
||
|
public static class Item {
|
||
|
@XStreamAlias("PicMd5Sum")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String PicMd5Sum;
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Setter
|
||
|
@Getter
|
||
|
@NoArgsConstructor
|
||
|
@ToString
|
||
|
@XStreamAlias("ScanCodeInfo")
|
||
|
public static class ScanCodeInfo {
|
||
|
@XStreamAlias("ScanType")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String scanType;
|
||
|
@XStreamAlias("ScanResult")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String scanResult;
|
||
|
|
||
|
}
|
||
|
|
||
|
@Setter
|
||
|
@Getter
|
||
|
@NoArgsConstructor
|
||
|
@ToString
|
||
|
public static class WxKf {
|
||
|
@XStreamAlias("KfAccount")
|
||
|
@XStreamConverter(XStreamCDataConverter.class)
|
||
|
private String kfAccount;
|
||
|
}
|
||
|
}
|