微信后端代码
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.

223 lines
7.2 KiB

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;
}
}