#642 公众号通知事件推送消息里增加对微信小店订单付款通知事件类型为merchant_order的支持

This commit is contained in:
Binary Wang 2018-06-26 21:43:29 +08:00
parent 4710354d96
commit 9e9e773dc3
2 changed files with 94 additions and 59 deletions

View File

@ -159,6 +159,10 @@ public class WxConsts {
public static final String LOCATION_SELECT = "location_select"; public static final String LOCATION_SELECT = "location_select";
public static final String TEMPLATE_SEND_JOB_FINISH = "TEMPLATESENDJOBFINISH"; public static final String TEMPLATE_SEND_JOB_FINISH = "TEMPLATESENDJOBFINISH";
public static final String ENTER_AGENT = "enter_agent"; public static final String ENTER_AGENT = "enter_agent";
/**
* 微信小店 订单付款通知.
*/
public static final String MERCHANT_ORDER = "merchant_order";
} }
/** /**

View File

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