All Downloads are FREE. Search and download functionalities are using the official Maven repository.

me.chanjar.weixin.mp.bean.message.WxMpXmlMessage Maven / Gradle / Ivy

There is a newer version: 4.7.1.B
Show newest version
package me.chanjar.weixin.mp.bean.message;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import me.chanjar.weixin.common.util.ToStringUtils;
import me.chanjar.weixin.common.util.xml.XStreamCDataConverter;
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.util.crypto.WxMpCryptUtil;
import me.chanjar.weixin.mp.util.xml.XStreamTransformer;
import org.apache.commons.io.IOUtils;

import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;

/**
 * 
 * 微信推送过来的消息,xml格式
 * 部分未注释的字段的解释请查阅相关微信开发文档:
 * 接收普通消息
 * 接收事件推送
 * 
* * @author chanjarster */ @XStreamAlias("xml") public class WxMpXmlMessage implements Serializable { private static final long serialVersionUID = -3586245291677274914L; /////////////////////// // 以下都是微信推送过来的消息的xml的element所对应的属性 /////////////////////// @XStreamAlias("ToUserName") @XStreamConverter(value = XStreamCDataConverter.class) private String toUser; @XStreamAlias("FromUserName") @XStreamConverter(value = XStreamCDataConverter.class) private String fromUser; @XStreamAlias("CreateTime") private Long createTime; @XStreamAlias("MsgType") @XStreamConverter(value = XStreamCDataConverter.class) private String msgType; @XStreamAlias("Content") @XStreamConverter(value = XStreamCDataConverter.class) private String content; @XStreamAlias("MenuId") private Long menuId; @XStreamAlias("MsgId") private Long msgId; @XStreamAlias("PicUrl") @XStreamConverter(value = XStreamCDataConverter.class) private String picUrl; @XStreamAlias("MediaId") @XStreamConverter(value = XStreamCDataConverter.class) private String mediaId; @XStreamAlias("Format") @XStreamConverter(value = XStreamCDataConverter.class) private String format; @XStreamAlias("ThumbMediaId") @XStreamConverter(value = 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(value = XStreamCDataConverter.class) private String label; @XStreamAlias("Title") @XStreamConverter(value = XStreamCDataConverter.class) private String title; @XStreamAlias("Description") @XStreamConverter(value = XStreamCDataConverter.class) private String description; @XStreamAlias("Url") @XStreamConverter(value = XStreamCDataConverter.class) private String url; @XStreamAlias("Event") @XStreamConverter(value = XStreamCDataConverter.class) private String event; @XStreamAlias("EventKey") @XStreamConverter(value = XStreamCDataConverter.class) private String eventKey; @XStreamAlias("Ticket") @XStreamConverter(value = XStreamCDataConverter.class) private String ticket; @XStreamAlias("Latitude") private Double latitude; @XStreamAlias("Longitude") private Double longitude; @XStreamAlias("Precision") private Double precision; @XStreamAlias("Recognition") @XStreamConverter(value = XStreamCDataConverter.class) private String recognition; /////////////////////////////////////// // 群发消息返回的结果 /////////////////////////////////////// /** * 群发的结果 */ @XStreamAlias("Status") @XStreamConverter(value = XStreamCDataConverter.class) private String status; /** * group_id下粉丝数;或者openid_list中的粉丝数 */ @XStreamAlias("TotalCount") private Integer totalCount; /** * 过滤(过滤是指特定地区、性别的过滤、用户设置拒收的过滤,用户接收已超4条的过滤)后,准备发送的粉丝数,原则上,filterCount = sentCount + errorCount */ @XStreamAlias("FilterCount") private Integer filterCount; /** * 发送成功的粉丝数 */ @XStreamAlias("SentCount") private Integer sentCount; /** * 发送失败的粉丝数 */ @XStreamAlias("ErrorCount") private Integer errorCount; /////////////////////////////////////// // 客服会话管理相关事件推送 /////////////////////////////////////// /** * 创建或关闭客服会话时的客服帐号 */ @XStreamAlias("KfAccount") private String kfAccount; /** * 转接客服会话时的转入客服帐号 */ @XStreamAlias("ToKfAccount") private String toKfAccount; /** * 转接客服会话时的转出客服帐号 */ @XStreamAlias("FromKfAccount") private String fromKfAccount; /////////////////////////////////////// // 卡券相关事件推送 /////////////////////////////////////// @XStreamAlias("CardId") @XStreamConverter(value = XStreamCDataConverter.class) private String cardId; @XStreamAlias("FriendUserName") @XStreamConverter(value = XStreamCDataConverter.class) private String friendUserName; @XStreamAlias("IsGiveByFriend") private Integer isGiveByFriend; // 是否为转赠,1代表是,0代表否 @XStreamAlias("UserCardCode") @XStreamConverter(value = XStreamCDataConverter.class) private String userCardCode; @XStreamAlias("OldUserCardCode") @XStreamConverter(value = XStreamCDataConverter.class) private String oldUserCardCode; @XStreamAlias("OuterId") private Integer outerId; /** * 用户删除会员卡后可重新找回,当用户本次操作为找回时,该值为1,否则为0 */ @XStreamAlias("IsRestoreMemberCard") private String isRestoreMemberCard; /** *
   * 领取场景值,用于领取渠道数据统计。可在生成二维码接口及添加Addcard接口中自定义该字段的字符串值。
   * 核销卡券时:开发者发起核销时传入的自定义参数,用于进行核销渠道统计
   * 另外:
   * 官网文档中,微信卡券>>卡券事件推送>>2.7 进入会员卡事件推送 user_view_card
   * OuterStr:商户自定义二维码渠道参数,用于标识本次扫码打开会员卡来源来自于某个渠道值的二维码
   * 
*/ @XStreamAlias("OuterStr") private String outerStr; /** * 是否转赠退回,0代表不是,1代表是。 */ @XStreamAlias("IsReturnBack") private String isReturnBack; /** * 是否是群转赠,0代表不是,1代表是。 */ @XStreamAlias("IsChatRoom") private String isChatRoom; /** * 核销来源。支持开发者统计API核销(FROM_API)、公众平台核销(FROM_MP)、卡券商户助手核销(FROM_MOBILE_HELPER)(核销员微信号) */ @XStreamAlias("ConsumeSource") private String consumeSource; /** * 门店名称,当前卡券核销的门店名称(只有通过自助核销和买单核销时才会出现该字段) */ @XStreamAlias("LocationName") private String locationName; /** * 核销该卡券核销员的openid(只有通过卡券商户助手核销时才会出现) */ @XStreamAlias("StaffOpenId") private String staffOpenId; /** * 自助核销时,用户输入的验证码 */ @XStreamAlias("VerifyCode") private String verifyCode; /** * 自助核销时,用户输入的备注金额 */ @XStreamAlias("RemarkAmount") private String remarkAmount; /** *
   * 官网文档中,微信卡券>>卡券事件推送>>2.10 库存报警事件card_sku_remind
   * Detail:报警详细信息
   * 
*/ @XStreamAlias("Detail") private String detail; /** *
   * 官网文档中,微信卡券>>卡券事件推送>>2.9 会员卡内容更新事件 update_member_card
   * ModifyBonus:变动的积分值
   * 
*/ @XStreamAlias("ModifyBonus") private String modifyBonus; /** *
   * 官网文档中,微信卡券>>卡券事件推送>>2.9 会员卡内容更新事件 update_member_card
   * ModifyBalance:变动的余额值
   * 
*/ @XStreamAlias("ModifyBalance") private String modifyBalance; /** *
   * 官网文档中,微信卡券>>卡券事件推送>>2.6 买单事件推送 User_pay_from_pay_cell
   * TransId:微信支付交易订单号(只有使用买单功能核销的卡券才会出现)
   * 
*/ @XStreamAlias("TransId") private String transId; /** *
   * 官网文档中,微信卡券>>卡券事件推送>>2.6 买单事件推送 User_pay_from_pay_cell
   * LocationId:门店ID,当前卡券核销的门店ID(只有通过卡券商户助手和买单核销时才会出现)
   * 
*/ @XStreamAlias("LocationId") private String locationId; /** *
   * 官网文档中,微信卡券>>卡券事件推送>>2.6 买单事件推送 User_pay_from_pay_cell
   * Fee:实付金额,单位为分
   * 
*/ @XStreamAlias("Fee") private String fee; /** *
   * 官网文档中,微信卡券>>卡券事件推送>>2.6 买单事件推送 User_pay_from_pay_cell
   * OriginalFee:应付金额,单位为分
   * 
*/ @XStreamAlias("OriginalFee") private String originalFee; @XStreamAlias("ScanCodeInfo") private ScanCodeInfo scanCodeInfo = new ScanCodeInfo(); @XStreamAlias("SendPicsInfo") private SendPicsInfo sendPicsInfo = new SendPicsInfo(); @XStreamAlias("SendLocationInfo") private SendLocationInfo sendLocationInfo = new SendLocationInfo(); /////////////////////////////////////// // 门店审核事件推送 /////////////////////////////////////// /** * UniqId * 商户自己内部ID,即字段中的sid */ @XStreamAlias("UniqId") private String storeUniqId; /** * PoiId * 微信的门店ID,微信内门店唯一标示ID */ @XStreamAlias("PoiId") private String poiId; /** * Result * 审核结果,成功succ 或失败fail */ @XStreamAlias("Result") private String result; /** * msg * 成功的通知信息,或审核失败的驳回理由 */ @XStreamAlias("msg") private String msg; /////////////////////////////////////// // 微信认证事件推送 /////////////////////////////////////// /** * ExpiredTime * 资质认证成功/名称认证成功: 有效期 (整形),指的是时间戳,将于该时间戳认证过期 * 年审通知: 有效期 (整形),指的是时间戳,将于该时间戳认证过期,需尽快年审 * 认证过期失效通知: 有效期 (整形),指的是时间戳,表示已于该时间戳认证过期,需要重新发起微信认证 */ @XStreamAlias("ExpiredTime") private Long expiredTime; /** * FailTime * 失败发生时间 (整形),时间戳 */ @XStreamAlias("FailTime") private Long failTime; /** * FailReason * 认证失败的原因 */ @XStreamAlias("FailReason") private String failReason; /////////////////////////////////////// // 微信硬件平台相关事件推送 /////////////////////////////////////// /** * 设备类型,目前为"公众账号原始ID" */ @XStreamAlias("DeviceType") @XStreamConverter(value = XStreamCDataConverter.class) private String deviceType; /** * 设备ID,第三方提供 */ @XStreamAlias("DeviceID") @XStreamConverter(value = XStreamCDataConverter.class) private String deviceId; /** * 微信用户账号的OpenID */ @XStreamAlias("OpenID") @XStreamConverter(value = XStreamCDataConverter.class) private String openId; @XStreamAlias("HardWare") private HardWare hardWare = new HardWare(); /** * 请求类型:0:退订设备状态;1:心跳;(心跳的处理方式跟订阅一样)2:订阅设备状态 */ @XStreamAlias("OpType") private Integer opType; /** * 设备状态:0:未连接;1:已连接 */ @XStreamAlias("DeviceStatus") private Integer deviceStatus; public static WxMpXmlMessage fromXml(String xml) { return XStreamTransformer.fromXml(WxMpXmlMessage.class, xml); } public static WxMpXmlMessage fromXml(InputStream is) { return XStreamTransformer.fromXml(WxMpXmlMessage.class, is); } /** * 从加密字符串转换 * * @param encryptedXml 密文 * @param wxMpConfigStorage 配置存储器对象 * @param timestamp 时间戳 * @param nonce 随机串 * @param msgSignature 签名串 */ public static WxMpXmlMessage fromEncryptedXml(String encryptedXml, WxMpConfigStorage wxMpConfigStorage, String timestamp, String nonce, String msgSignature) { WxMpCryptUtil cryptUtil = new WxMpCryptUtil(wxMpConfigStorage); String plainText = cryptUtil.decrypt(msgSignature, timestamp, nonce, encryptedXml); return fromXml(plainText); } public static WxMpXmlMessage fromEncryptedXml(InputStream is, WxMpConfigStorage wxMpConfigStorage, String timestamp, String nonce, String msgSignature) { try { return fromEncryptedXml(IOUtils.toString(is, "UTF-8"), wxMpConfigStorage, timestamp, nonce, msgSignature); } catch (IOException e) { throw new RuntimeException(e); } } public Integer getOpType() { return opType; } public void setOpType(Integer opType) { this.opType = opType; } public Integer getDeviceStatus() { return deviceStatus; } public void setDeviceStatus(Integer deviceStatus) { this.deviceStatus = deviceStatus; } public HardWare getHardWare() { return hardWare; } public void setHardWare(HardWare hardWare) { this.hardWare = hardWare; } public String getDeviceType() { return deviceType; } public void setDeviceType(String deviceType) { this.deviceType = deviceType; } public String getDeviceId() { return deviceId; } public void setDeviceId(String deviceId) { this.deviceId = deviceId; } public String getOpenId() { return openId; } public void setOpenId(String openId) { this.openId = openId; } public Long getExpiredTime() { return this.expiredTime; } public void setExpiredTime(Long expiredTime) { this.expiredTime = expiredTime; } public Long getFailTime() { return this.failTime; } public void setFailTime(Long failTime) { this.failTime = failTime; } public String getFailReason() { return this.failReason; } public void setFailReason(String failReason) { this.failReason = failReason; } public String getDetail() { return detail; } public void setDetail(String detail) { this.detail = detail; } public String getModifyBonus() { return modifyBonus; } public void setModifyBonus(String modifyBonus) { this.modifyBonus = modifyBonus; } public String getModifyBalance() { return modifyBalance; } public void setModifyBalance(String modifyBalance) { this.modifyBalance = modifyBalance; } public String getTransId() { return transId; } public void setTransId(String transId) { this.transId = transId; } public String getLocationId() { return locationId; } public void setLocationId(String locationId) { this.locationId = locationId; } public String getFee() { return fee; } public void setFee(String fee) { this.fee = fee; } public String getOriginalFee() { return originalFee; } public void setOriginalFee(String originalFee) { this.originalFee = originalFee; } public String getStoreUniqId() { return this.storeUniqId; } public void setStoreUniqId(String storeUniqId) { this.storeUniqId = storeUniqId; } public String getPoiId() { return this.poiId; } public void setPoiId(String poiId) { this.poiId = poiId; } public String getResult() { return this.result; } public void setResult(String result) { this.result = result; } public String getMsg() { return this.msg; } public void setMsg(String msg) { this.msg = msg; } public String getToUser() { return this.toUser; } public void setToUser(String toUser) { this.toUser = toUser; } public Long getCreateTime() { return this.createTime; } public void setCreateTime(Long createTime) { this.createTime = createTime; } /** *
   * 当接受用户消息时,可能会获得以下值:
   * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_TEXT}
   * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_IMAGE}
   * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_VOICE}
   * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_VIDEO}
   * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_LOCATION}
   * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_LINK}
   * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_EVENT}
   * 
*/ public String getMsgType() { return this.msgType; } /** *
   * 当发送消息的时候使用:
   * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_TEXT}
   * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_IMAGE}
   * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_VOICE}
   * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_VIDEO}
   * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_NEWS}
   * {@link me.chanjar.weixin.common.api.WxConsts#XML_MSG_MUSIC}
   * 
* * @param msgType */ public void setMsgType(String msgType) { this.msgType = msgType; } public String getContent() { return this.content; } public void setContent(String content) { this.content = content; } public Long getMsgId() { return this.msgId; } public void setMsgId(Long msgId) { this.msgId = msgId; } public String getPicUrl() { return this.picUrl; } public void setPicUrl(String picUrl) { this.picUrl = picUrl; } public String getMediaId() { return this.mediaId; } public void setMediaId(String mediaId) { this.mediaId = mediaId; } public String getFormat() { return this.format; } public void setFormat(String format) { this.format = format; } public String getThumbMediaId() { return this.thumbMediaId; } public void setThumbMediaId(String thumbMediaId) { this.thumbMediaId = thumbMediaId; } public Double getLocationX() { return this.locationX; } public void setLocationX(Double locationX) { this.locationX = locationX; } public Double getLocationY() { return this.locationY; } public void setLocationY(Double locationY) { this.locationY = locationY; } public Double getScale() { return this.scale; } public void setScale(Double scale) { this.scale = scale; } public String getLabel() { return this.label; } public void setLabel(String label) { this.label = label; } public String getTitle() { return this.title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return this.description; } public void setDescription(String description) { this.description = description; } public String getUrl() { return this.url; } public void setUrl(String url) { this.url = url; } public String getEvent() { return this.event; } public void setEvent(String event) { this.event = event; } public String getEventKey() { return this.eventKey; } public void setEventKey(String eventKey) { this.eventKey = eventKey; } public String getTicket() { return this.ticket; } public void setTicket(String ticket) { this.ticket = ticket; } public Double getLatitude() { return this.latitude; } public void setLatitude(Double latitude) { this.latitude = latitude; } public Double getLongitude() { return this.longitude; } public void setLongitude(Double longitude) { this.longitude = longitude; } public Double getPrecision() { return this.precision; } public void setPrecision(Double precision) { this.precision = precision; } public String getRecognition() { return this.recognition; } public void setRecognition(String recognition) { this.recognition = recognition; } public String getFromUser() { return this.fromUser; } public void setFromUser(String fromUser) { this.fromUser = fromUser; } public String getStatus() { return this.status; } public void setStatus(String status) { this.status = status; } public Integer getTotalCount() { return this.totalCount; } public void setTotalCount(Integer totalCount) { this.totalCount = totalCount; } public Integer getFilterCount() { return this.filterCount; } public void setFilterCount(Integer filterCount) { this.filterCount = filterCount; } public Integer getSentCount() { return this.sentCount; } public void setSentCount(Integer sentCount) { this.sentCount = sentCount; } public Integer getErrorCount() { return this.errorCount; } public void setErrorCount(Integer errorCount) { this.errorCount = errorCount; } public String getCardId() { return this.cardId; } public void setCardId(String cardId) { this.cardId = cardId; } public String getFriendUserName() { return this.friendUserName; } public void setFriendUserName(String friendUserName) { this.friendUserName = friendUserName; } public Integer getIsGiveByFriend() { return this.isGiveByFriend; } public void setIsGiveByFriend(Integer isGiveByFriend) { this.isGiveByFriend = isGiveByFriend; } public String getUserCardCode() { return this.userCardCode; } public void setUserCardCode(String userCardCode) { this.userCardCode = userCardCode; } public String getOldUserCardCode() { return this.oldUserCardCode; } public void setOldUserCardCode(String oldUserCardCode) { this.oldUserCardCode = oldUserCardCode; } public Integer getOuterId() { return this.outerId; } public void setOuterId(Integer outerId) { this.outerId = outerId; } public ScanCodeInfo getScanCodeInfo() { return this.scanCodeInfo; } public void setScanCodeInfo(ScanCodeInfo scanCodeInfo) { this.scanCodeInfo = scanCodeInfo; } public SendPicsInfo getSendPicsInfo() { return this.sendPicsInfo; } public void setSendPicsInfo(SendPicsInfo sendPicsInfo) { this.sendPicsInfo = sendPicsInfo; } public SendLocationInfo getSendLocationInfo() { return this.sendLocationInfo; } public void setSendLocationInfo( SendLocationInfo sendLocationInfo) { this.sendLocationInfo = sendLocationInfo; } public Long getMenuId() { return this.menuId; } public void setMenuId(Long menuId) { this.menuId = menuId; } public String getKfAccount() { return this.kfAccount; } public void setKfAccount(String kfAccount) { this.kfAccount = kfAccount; } public String getToKfAccount() { return this.toKfAccount; } public void setToKfAccount(String toKfAccount) { this.toKfAccount = toKfAccount; } public String getFromKfAccount() { return this.fromKfAccount; } public void setFromKfAccount(String fromKfAccount) { this.fromKfAccount = fromKfAccount; } public String getIsRestoreMemberCard() { return isRestoreMemberCard; } public void setIsRestoreMemberCard(String isRestoreMemberCard) { this.isRestoreMemberCard = isRestoreMemberCard; } public String getOuterStr() { return outerStr; } public void setOuterStr(String outerStr) { this.outerStr = outerStr; } public String getIsReturnBack() { return isReturnBack; } public void setIsReturnBack(String isReturnBack) { this.isReturnBack = isReturnBack; } public String getIsChatRoom() { return isChatRoom; } public void setIsChatRoom(String isChatRoom) { this.isChatRoom = isChatRoom; } public String getConsumeSource() { return this.consumeSource; } public void setConsumeSource(String consumeSource) { this.consumeSource = consumeSource; } public String getLocationName() { return this.locationName; } public void setLocationName(String locationName) { this.locationName = locationName; } public String getStaffOpenId() { return this.staffOpenId; } public void setStaffOpenId(String staffOpenId) { this.staffOpenId = staffOpenId; } public String getVerifyCode() { return this.verifyCode; } public void setVerifyCode(String verifyCode) { this.verifyCode = verifyCode; } public String getRemarkAmount() { return this.remarkAmount; } public void setRemarkAmount(String remarkAmount) { this.remarkAmount = remarkAmount; } @Override public String toString() { return ToStringUtils.toSimpleString(this); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy