From 9e9e773dc3a954dea3619bf1a04b3273170c87e3 Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Tue, 26 Jun 2018 21:43:29 +0800 Subject: [PATCH] =?UTF-8?q?#642=20=E5=85=AC=E4=BC=97=E5=8F=B7=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E4=BA=8B=E4=BB=B6=E6=8E=A8=E9=80=81=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E9=87=8C=E5=A2=9E=E5=8A=A0=E5=AF=B9=E5=BE=AE=E4=BF=A1=E5=B0=8F?= =?UTF-8?q?=E5=BA=97=E8=AE=A2=E5=8D=95=E4=BB=98=E6=AC=BE=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E7=B1=BB=E5=9E=8B=E4=B8=BAmerchant=5Forder?= =?UTF-8?q?=E7=9A=84=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chanjar/weixin/common/api/WxConsts.java | 4 + .../mp/bean/message/WxMpXmlMessage.java | 149 +++++++++++------- 2 files changed, 94 insertions(+), 59 deletions(-) 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 9704f037..78d3a3fd 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 8c67e036..39de79e9 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 {
   /**
    * 
    * 官网文档中,微信卡券>>卡券事件推送>>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} *
- * */ public void setMsgType(String msgType) { this.msgType = msgType;