diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java index 9704f037a..78d3a3fd6 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java @@ -159,6 +159,10 @@ public class WxConsts { public static final String LOCATION_SELECT = "location_select"; public static final String TEMPLATE_SEND_JOB_FINISH = "TEMPLATESENDJOBFINISH"; public static final String ENTER_AGENT = "enter_agent"; + /** + * 微信小店 订单付款通知. + */ + public static final String MERCHANT_ORDER = "merchant_order"; } /** diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessage.java index 8c67e0368..39de79e95 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessage.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessage.java @@ -1,5 +1,11 @@ package me.chanjar.weixin.mp.bean.message; +import java.io.IOException; +import java.io.InputStream; +import java.io.Serializable; + +import org.apache.commons.io.IOUtils; + import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamConverter; import lombok.Data; @@ -9,15 +15,10 @@ 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格式 + * 微信推送过来的消息,xml格式. * 部分未注释的字段的解释请查阅相关微信开发文档: * 接收普通消息 * 接收事件推送 @@ -129,28 +130,29 @@ public class WxMpXmlMessage implements Serializable { // 群发消息返回的结果 /////////////////////////////////////// /** - * 群发的结果 + * 群发的结果. */ @XStreamAlias("Status") @XStreamConverter(value = XStreamCDataConverter.class) private String status; /** - * group_id下粉丝数;或者openid_list中的粉丝数 + * group_id下粉丝数;或者openid_list中的粉丝数. */ @XStreamAlias("TotalCount") private Integer totalCount; /** - * 过滤(过滤是指特定地区、性别的过滤、用户设置拒收的过滤,用户接收已超4条的过滤)后,准备发送的粉丝数,原则上,filterCount = sentCount + errorCount + * 过滤(过滤是指特定地区、性别的过滤、用户设置拒收的过滤,用户接收已超4条的过滤)后,准备发送的粉丝数. + * 原则上,filterCount = sentCount + errorCount */ @XStreamAlias("FilterCount") private Integer filterCount; /** - * 发送成功的粉丝数 + * 发送成功的粉丝数. */ @XStreamAlias("SentCount") private Integer sentCount; /** - * 发送失败的粉丝数 + * 发送失败的粉丝数. */ @XStreamAlias("ErrorCount") private Integer errorCount; @@ -159,17 +161,17 @@ public class WxMpXmlMessage implements Serializable { // 客服会话管理相关事件推送 /////////////////////////////////////// /** - * 创建或关闭客服会话时的客服帐号 + * 创建或关闭客服会话时的客服帐号. */ @XStreamAlias("KfAccount") private String kfAccount; /** - * 转接客服会话时的转入客服帐号 + * 转接客服会话时的转入客服帐号. */ @XStreamAlias("ToKfAccount") private String toKfAccount; /** - * 转接客服会话时的转出客服帐号 + * 转接客服会话时的转出客服帐号. */ @XStreamAlias("FromKfAccount") private String fromKfAccount; @@ -177,6 +179,7 @@ public class WxMpXmlMessage implements Serializable { /////////////////////////////////////// // 卡券相关事件推送 /////////////////////////////////////// + @XStreamAlias("CardId") @XStreamConverter(value = XStreamCDataConverter.class) private String cardId; @@ -185,8 +188,11 @@ public class WxMpXmlMessage implements Serializable { @XStreamConverter(value = XStreamCDataConverter.class) private String friendUserName; + /** + * 是否为转赠,1代表是,0代表否. + */ @XStreamAlias("IsGiveByFriend") - private Integer isGiveByFriend; // 是否为转赠,1代表是,0代表否 + private Integer isGiveByFriend; @XStreamAlias("UserCardCode") @XStreamConverter(value = XStreamCDataConverter.class) @@ -200,14 +206,14 @@ public class WxMpXmlMessage implements Serializable { private Integer outerId; /** - * 用户删除会员卡后可重新找回,当用户本次操作为找回时,该值为1,否则为0 + * 用户删除会员卡后可重新找回,当用户本次操作为找回时,该值为1,否则为0. */ @XStreamAlias("IsRestoreMemberCard") private String isRestoreMemberCard; /** *- * 领取场景值,用于领取渠道数据统计。可在生成二维码接口及添加Addcard接口中自定义该字段的字符串值。 + * 领取场景值,用于领取渠道数据统计。可在生成二维码接口及添加Addcard接口中自定义该字段的字符串值. * 核销卡券时:开发者发起核销时传入的自定义参数,用于进行核销渠道统计 * 另外: * 官网文档中,微信卡券>>卡券事件推送>>2.7 进入会员卡事件推送 user_view_card @@ -218,43 +224,45 @@ public class WxMpXmlMessage implements Serializable { private String outerStr; /** - * 是否转赠退回,0代表不是,1代表是。 + * 是否转赠退回,0代表不是,1代表是. */ @XStreamAlias("IsReturnBack") private String isReturnBack; /** - * 是否是群转赠,0代表不是,1代表是。 + * 是否是群转赠,0代表不是,1代表是. */ @XStreamAlias("IsChatRoom") private String isChatRoom; /** - * 核销来源。支持开发者统计API核销(FROM_API)、公众平台核销(FROM_MP)、卡券商户助手核销(FROM_MOBILE_HELPER)(核销员微信号) + * 核销来源. + * 支持开发者统计API核销(FROM_API)、公众平台核销(FROM_MP)、卡券商户助手核销(FROM_MOBILE_HELPER)(核销员微信号) */ @XStreamAlias("ConsumeSource") private String consumeSource; /** - * 门店名称,当前卡券核销的门店名称(只有通过自助核销和买单核销时才会出现该字段) + * 门店名称. + * 当前卡券核销的门店名称(只有通过自助核销和买单核销时才会出现该字段) */ @XStreamAlias("LocationName") private String locationName; /** - * 核销该卡券核销员的openid(只有通过卡券商户助手核销时才会出现) + * 核销该卡券核销员的openid(只有通过卡券商户助手核销时才会出现). */ @XStreamAlias("StaffOpenId") private String staffOpenId; /** - * 自助核销时,用户输入的验证码 + * 自助核销时,用户输入的验证码. */ @XStreamAlias("VerifyCode") private String verifyCode; /** - * 自助核销时,用户输入的备注金额 + * 自助核销时,用户输入的备注金额. */ @XStreamAlias("RemarkAmount") private String remarkAmount; @@ -262,7 +270,7 @@ public class WxMpXmlMessage implements Serializable { /** *- * */ public void setMsgType(String msgType) { this.msgType = msgType;* 官网文档中,微信卡券>>卡券事件推送>>2.10 库存报警事件card_sku_remind - * Detail:报警详细信息 + * Detail:报警详细信息. **/ @XStreamAlias("Detail") @@ -271,7 +279,7 @@ public class WxMpXmlMessage implements Serializable { /** ** 官网文档中,微信卡券>>卡券事件推送>>2.9 会员卡内容更新事件 update_member_card - * ModifyBonus:变动的积分值 + * ModifyBonus:变动的积分值. **/ @XStreamAlias("ModifyBonus") @@ -280,7 +288,7 @@ public class WxMpXmlMessage implements Serializable { /** ** 官网文档中,微信卡券>>卡券事件推送>>2.9 会员卡内容更新事件 update_member_card - * ModifyBalance:变动的余额值 + * ModifyBalance:变动的余额值. **/ @XStreamAlias("ModifyBalance") @@ -289,7 +297,7 @@ public class WxMpXmlMessage implements Serializable { /** ** 官网文档中,微信卡券>>卡券事件推送>>2.6 买单事件推送 User_pay_from_pay_cell - * TransId:微信支付交易订单号(只有使用买单功能核销的卡券才会出现) + * TransId:微信支付交易订单号(只有使用买单功能核销的卡券才会出现). **/ @XStreamAlias("TransId") @@ -335,29 +343,25 @@ public class WxMpXmlMessage implements Serializable { // 门店审核事件推送 /////////////////////////////////////// /** - * UniqId - * 商户自己内部ID,即字段中的sid + * 商户自己内部ID,即字段中的sid. */ @XStreamAlias("UniqId") private String storeUniqId; /** - * PoiId - * 微信的门店ID,微信内门店唯一标示ID + * 微信的门店ID,微信内门店唯一标示ID. */ @XStreamAlias("PoiId") private String poiId; /** - * Result - * 审核结果,成功succ 或失败fail + * 审核结果,成功succ 或失败fail. */ @XStreamAlias("Result") private String result; /** - * msg - * 成功的通知信息,或审核失败的驳回理由 + * 成功的通知信息,或审核失败的驳回理由. */ @XStreamAlias("msg") private String msg; @@ -366,46 +370,74 @@ public class WxMpXmlMessage implements Serializable { // 微信认证事件推送 /////////////////////////////////////// /** - * ExpiredTime - * 资质认证成功/名称认证成功: 有效期 (整形),指的是时间戳,将于该时间戳认证过期 + * 资质认证成功/名称认证成功: 有效期 (整形),指的是时间戳,将于该时间戳认证过期. * 年审通知: 有效期 (整形),指的是时间戳,将于该时间戳认证过期,需尽快年审 * 认证过期失效通知: 有效期 (整形),指的是时间戳,表示已于该时间戳认证过期,需要重新发起微信认证 */ @XStreamAlias("ExpiredTime") private Long expiredTime; /** - * FailTime - * 失败发生时间 (整形),时间戳 + * 失败发生时间 (整形),时间戳. */ @XStreamAlias("FailTime") private Long failTime; /** - * FailReason - * 认证失败的原因 + * 认证失败的原因. */ @XStreamAlias("FailReason") private String failReason; + /////////////////////////////////////// + // 微信小店 6.1订单付款通知 + /////////////////////////////////////// + /** + * 订单ID. + */ + @XStreamAlias("OrderId") + @XStreamConverter(value = XStreamCDataConverter.class) + private String orderId; + + /** + * 订单状态. + */ + @XStreamAlias("OrderStatus") + private String orderStatus; + + /** + * 商品ID. + */ + @XStreamAlias("ProductId") + @XStreamConverter(value = XStreamCDataConverter.class) + private String productId; + + /** + * 商品SKU信息. + */ + @XStreamAlias("SkuInfo") + @XStreamConverter(value = XStreamCDataConverter.class) + private String skuInfo; /////////////////////////////////////// // 微信硬件平台相关事件推送 /////////////////////////////////////// /** - * 设备类型,目前为"公众账号原始ID" + * 设备类型. + * 目前为"公众账号原始ID" */ @XStreamAlias("DeviceType") @XStreamConverter(value = XStreamCDataConverter.class) private String deviceType; /** - * 设备ID,第三方提供 + * 设备ID. + * 第三方提供 */ @XStreamAlias("DeviceID") @XStreamConverter(value = XStreamCDataConverter.class) private String deviceId; /** - * 微信用户账号的OpenID + * 微信用户账号的OpenID. */ @XStreamAlias("OpenID") @XStreamConverter(value = XStreamCDataConverter.class) @@ -415,13 +447,17 @@ public class WxMpXmlMessage implements Serializable { private HardWare hardWare = new HardWare(); /** - * 请求类型:0:退订设备状态;1:心跳;(心跳的处理方式跟订阅一样)2:订阅设备状态 + * 请求类型. + * 0:退订设备状态; + * 1:心跳;(心跳的处理方式跟订阅一样) + * 2:订阅设备状态 */ @XStreamAlias("OpType") private Integer opType; /** - * 设备状态:0:未连接;1:已连接 + * 设备状态. + * 0:未连接;1:已连接 */ @XStreamAlias("DeviceStatus") private Integer deviceStatus; @@ -437,7 +473,7 @@ public class WxMpXmlMessage implements Serializable { } /** - * 从加密字符串转换 + * 从加密字符串转换. * * @param encryptedXml 密文 * @param wxMpConfigStorage 配置存储器对象 @@ -445,21 +481,17 @@ public class WxMpXmlMessage implements Serializable { * @param nonce 随机串 * @param msgSignature 签名串 */ - public static WxMpXmlMessage fromEncryptedXml(String encryptedXml, - WxMpConfigStorage wxMpConfigStorage, String timestamp, String nonce, - String 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); + 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) { + 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); + return fromEncryptedXml(IOUtils.toString(is, "UTF-8"), wxMpConfigStorage, timestamp, nonce, msgSignature); } catch (IOException e) { throw new RuntimeException(e); } @@ -491,7 +523,6 @@ public class WxMpXmlMessage implements Serializable { * {@link WxConsts.XmlMsgType#NEWS} * {@link WxConsts.XmlMsgType#MUSIC} *