From a8bac131fa39931254ba42187dc9e6f192c4d926 Mon Sep 17 00:00:00 2001 From: yuanqixun Date: Fri, 31 Aug 2018 10:41:41 +0800 Subject: [PATCH] =?UTF-8?q?#739=20=E5=A2=9E=E5=8A=A0=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=BF=80=E6=B4=BB=E4=BC=9A=E5=91=98=E5=8D=A1=E6=97=B6=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E7=94=A8=E7=9A=84=E8=AE=BE=E7=BD=AE=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E8=B5=84=E6=96=99=E7=9A=84=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 增加微信激活会员卡,设置用户资料字段接口实现。 * 增加创建卡券二维码的失效时间参数接口。 * 设置对象返回类型。 * 增加卡券相关事件及xml消息解析 --- .../chanjar/weixin/common/api/WxConsts.java | 73 ++++++++++++++- .../weixin/mp/api/WxMpCardService.java | 9 ++ .../weixin/mp/api/WxMpMemberCardService.java | 30 +++++- .../mp/api/impl/WxMpCardServiceImpl.java | 20 +++- .../api/impl/WxMpMemberCardServiceImpl.java | 26 ++++-- .../weixin/mp/bean/card/AdvancedInfo.java | 1 + .../MemberCardActivateUserFormRequest.java | 70 ++++++++++++++ .../MemberCardActivateUserFormResult.java | 29 ++++++ .../mp/bean/card/MemberCardUserForm.java | 92 +++++++++++++++++++ .../card/MemberCardUserFormRichField.java | 42 +++++++++ .../card/{ => enums}/BusinessServiceType.java | 2 +- .../mp/bean/card/{ => enums}/CardColor.java | 2 +- .../mp/bean/card/enums/CardFieldType.java | 23 +++++ .../mp/bean/card/enums/CardRichFieldType.java | 23 +++++ .../bean/card/{ => enums}/CardSceneType.java | 2 +- .../bean/card/enums/CardWechatFieldType.java | 31 +++++++ .../bean/card/{ => enums}/DateInfoType.java | 2 +- .../mp/bean/message/WxMpXmlMessage.java | 76 +++++++++++++++ .../impl/WxMpMemberCardServiceImplTest.java | 1 + 19 files changed, 537 insertions(+), 17 deletions(-) create mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/MemberCardActivateUserFormRequest.java create mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/MemberCardActivateUserFormResult.java create mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/MemberCardUserForm.java create mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/MemberCardUserFormRichField.java rename weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/{ => enums}/BusinessServiceType.java (89%) rename weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/{ => enums}/CardColor.java (92%) create mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/CardFieldType.java create mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/CardRichFieldType.java rename weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/{ => enums}/CardSceneType.java (90%) create mode 100644 weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/CardWechatFieldType.java rename weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/{ => enums}/DateInfoType.java (87%) 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 35a1a26e..a1e3c073 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 @@ -82,7 +82,7 @@ public class WxConsts { /** * 小程序卡片(要求小程序与公众号已关联) */ - public static final String MINIPROGRAMPAGE="miniprogrampage"; + public static final String MINIPROGRAMPAGE = "miniprogrampage"; } /** @@ -181,6 +181,76 @@ public class WxConsts { * 微信小店 订单付款通知. */ public static final String MERCHANT_ORDER = "merchant_order"; + + /** + * 卡券事件:卡券通过审核 + */ + public static final String CARD_PASS_CHECK = "card_pass_check"; + + /** + * 卡券事件:卡券未通过审核 + */ + public static final String CARD_NOT_PASS_CHECK = "card_not_pass_check"; + + /** + * 卡券事件:用户领取卡券 + */ + public static final String CARD_USER_GET_CARD = "user_get_card"; + + /** + * 卡券事件:用户转赠卡券 + */ + public static final String CARD_USER_GIFTING_CARD = "user_gifting_card"; + + + /** + * 卡券事件:用户核销卡券 + */ + public static final String CARD_USER_CONSUME_CARD = "user_consume_card"; + + + /** + * 卡券事件:用户通过卡券的微信买单完成时推送 + */ + public static final String CARD_USER_PAY_FROM_PAY_CELL = "user_pay_from_pay_cell"; + + + /** + * 卡券事件:用户提交会员卡开卡信息 + */ + public static final String CARD_SUBMIT_MEMBERCARD_USER_INFO = "submit_membercard_user_info"; + + /** + * 卡券事件:用户打开查看卡券 + */ + public static final String CARD_USER_VIEW_CARD = "user_view_card"; + + /** + * 卡券事件:用户删除卡券 + */ + public static final String CARD_USER_DEL_CARD = "user_del_card"; + + /** + * 卡券事件:用户在卡券里点击查看公众号进入会话时(需要用户已经关注公众号) + */ + public static final String CARD_USER_ENTER_SESSION_FROM_CARD = "user_enter_session_from_card"; + + /** + * 卡券事件:当用户的会员卡积分余额发生变动时 + */ + public static final String CARD_UPDATE_MEMBER_CARD = "update_member_card"; + + /** + * 卡券事件:当某个card_id的初始库存数大于200且当前库存小于等于100时,用户尝试领券会触发发送事件给商户,事件每隔12h发送一次 + */ + public static final String CARD_SKU_REMIND = "card_sku_remind"; + + /** + * 卡券事件:当商户朋友的券券点发生变动时 + */ + public static final String CARD_PAY_ORDER = "card_pay_order"; + + } /** @@ -280,4 +350,5 @@ public class WxConsts { public static final String IMAGE = "image"; public static final String VIDEO = "video"; } + } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpCardService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpCardService.java index 8089f03b..4cb755f4 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpCardService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpCardService.java @@ -145,6 +145,15 @@ public interface WxMpCardService { */ WxMpCardQrcodeCreateResult createQrcodeCard(String cardId, String outerStr) throws WxErrorException; + /** + * 创建卡券二维码 + * @param cardId 卡券编号 + * @param outerStr 二维码标识 + * @param expiresIn 失效时间,单位秒,不填默认365天 + * @return WxMpCardQrcodeCreateResult + */ + WxMpCardQrcodeCreateResult createQrcodeCard(String cardId, String outerStr,int expiresIn) throws WxErrorException; + /** * 创建卡券货架 * @param createRequest 货架创建参数 diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMemberCardService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMemberCardService.java index 15e5bd49..d9bbdfbc 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMemberCardService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMemberCardService.java @@ -1,17 +1,28 @@ package me.chanjar.weixin.mp.api; import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.mp.bean.card.MemberCardActivateUserFormRequest; +import me.chanjar.weixin.mp.bean.card.MemberCardActivateUserFormResult; import me.chanjar.weixin.mp.bean.card.WxMpCardCreateResult; -import me.chanjar.weixin.mp.bean.card.WxMpCardQrcodeCreateResult; import me.chanjar.weixin.mp.bean.membercard.*; /** * 会员卡相关接口 * - * @author YuJian(mgcnrx11@gmail.com) + * @author YuJian(mgcnrx11 @ gmail.com) + * @author yuanqixun * @version 2017/7/8 + * @date 2018-08-30 */ public interface WxMpMemberCardService { + String MEMBER_CARD_CREAET = "https://api.weixin.qq.com/card/create"; + String MEMBER_CARD_ACTIVATE = "https://api.weixin.qq.com/card/membercard/activate"; + String MEMBER_CARD_USER_INFO_GET = "https://api.weixin.qq.com/card/membercard/userinfo/get"; + String MEMBER_CARD_UPDATE_USER = "https://api.weixin.qq.com/card/membercard/updateuser"; + /** + * 会员卡激活之微信开卡接口(wx_activate=true情况调用) + */ + String MEMBER_CARD_ACTIVATEUSERFORM = "https://api.weixin.qq.com/card/membercard/activateuserform/set"; /** * 得到WxMpService @@ -20,6 +31,7 @@ public interface WxMpMemberCardService { /** * 会员卡创建接口 + * * @param createJson * @return * @throws WxErrorException @@ -28,6 +40,7 @@ public interface WxMpMemberCardService { /** * 会员卡创建接口 + * * @param createMessageMessage * @return WxMpCardCreateResult * @throws WxErrorException @@ -47,7 +60,7 @@ public interface WxMpMemberCardService { * 拉取会员信息接口 * * @param cardId 会员卡的CardId,微信分配 - * @param code 领取会员的会员卡Code + * @param code 领取会员的会员卡Code * @return 会员信息的结果对象 * @throws WxErrorException 接口调用失败抛出的异常 */ @@ -55,7 +68,7 @@ public interface WxMpMemberCardService { /** * 当会员持卡消费后,支持开发者调用该接口更新会员信息。会员卡交易后的每次信息变更需通过该接口通知微信,便于后续消息通知及其他扩展功能。 - * + *

* 1.开发者可以同时传入add_bonus和bonus解决由于同步失败带来的幂等性问题。同时传入add_bonus和bonus时 * add_bonus作为积分变动消息中的变量值,而bonus作为卡面上的总积分额度显示。余额变动同理。 * 2.开发者可以传入is_notify_bonus控制特殊的积分对账变动不发送消息,余额变动同理。 @@ -66,4 +79,13 @@ public interface WxMpMemberCardService { */ WxMpMemberCardUpdateResult updateUserMemberCard(WxMpMemberCardUpdateMessage updateUserMessage) throws WxErrorException; + /** + * 设置会员卡激活的字段(会员卡设置:wx_activate=true 时需要) + * + * @param userFormRequest + * @return + * @throws WxErrorException + */ + MemberCardActivateUserFormResult setActivateUserForm(MemberCardActivateUserFormRequest userFormRequest) throws WxErrorException; + } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImpl.java index 5895a680..28a7d5cc 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImpl.java @@ -256,14 +256,29 @@ public class WxMpCardServiceImpl implements WxMpCardService { /** * 创建卡券二维码 + * * @param cardId * @param outerStr * @return */ public WxMpCardQrcodeCreateResult createQrcodeCard(String cardId, String outerStr) throws WxErrorException { + return createQrcodeCard(cardId, outerStr, 0); + } + + /** + * 创建卡券二维码 + * @param cardId 卡券编号 + * @param outerStr 二维码标识 + * @param expiresIn 失效时间,单位秒,不填默认365天 + * @return + * @throws WxErrorException + */ + public WxMpCardQrcodeCreateResult createQrcodeCard(String cardId, String outerStr, int expiresIn) throws WxErrorException { JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("action_name", "QR_CARD"); - jsonObject.addProperty("expire_seconds", 1800); + if (expiresIn > 0) { + jsonObject.addProperty("expire_seconds", expiresIn); + } JsonObject actionInfoJson = new JsonObject(); JsonObject cardJson = new JsonObject(); cardJson.addProperty("card_id", cardId); @@ -276,13 +291,14 @@ public class WxMpCardServiceImpl implements WxMpCardService { /** * 创建卡券货架接口 + * * @param request * @return * @throws WxErrorException */ @Override public WxMpCardLandingPageCreateResult createLandingPage(WxMpCardLandingPageCreateRequest request) throws WxErrorException { - String response = this.wxMpService.post(CARD_LANDING_PAGE_CREAET,GSON.toJson(request)); + String response = this.wxMpService.post(CARD_LANDING_PAGE_CREAET, GSON.toJson(request)); return WxMpCardLandingPageCreateResult.fromJson(response); } } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMemberCardServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMemberCardServiceImpl.java index 7b4e3778..800f4a17 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMemberCardServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMemberCardServiceImpl.java @@ -1,12 +1,18 @@ package me.chanjar.weixin.mp.api.impl; -import com.google.gson.*; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.util.json.WxGsonBuilder; import me.chanjar.weixin.mp.api.WxMpMemberCardService; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.bean.card.*; +import me.chanjar.weixin.mp.bean.card.enums.BusinessServiceType; +import me.chanjar.weixin.mp.bean.card.enums.CardColor; +import me.chanjar.weixin.mp.bean.card.enums.DateInfoType; import me.chanjar.weixin.mp.bean.membercard.*; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; import org.apache.commons.lang3.StringUtils; @@ -23,11 +29,6 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { private final Logger log = LoggerFactory.getLogger(WxMpMemberCardServiceImpl.class); - private static final String MEMBER_CARD_CREAET = "https://api.weixin.qq.com/card/create"; - private static final String MEMBER_CARD_ACTIVATE = "https://api.weixin.qq.com/card/membercard/activate"; - private static final String MEMBER_CARD_USER_INFO_GET = "https://api.weixin.qq.com/card/membercard/userinfo/get"; - private static final String MEMBER_CARD_UPDATE_USER = "https://api.weixin.qq.com/card/membercard/updateuser"; - private WxMpService wxMpService; private static final Gson GSON = new Gson(); @@ -265,4 +266,17 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { }.getType()); } + /** + * 设置会员卡激活的字段(会员卡设置:wx_activate=true 时需要) + * + * @param userFormRequest + * @return + * @throws WxErrorException + */ + @Override + public MemberCardActivateUserFormResult setActivateUserForm(MemberCardActivateUserFormRequest userFormRequest) throws WxErrorException { + String responseContent = this.getWxMpService().post(MEMBER_CARD_ACTIVATEUSERFORM, GSON.toJson(userFormRequest)); + return MemberCardActivateUserFormResult.fromJson(responseContent); + } + } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/AdvancedInfo.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/AdvancedInfo.java index d27d0bab..0e01e50d 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/AdvancedInfo.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/AdvancedInfo.java @@ -2,6 +2,7 @@ package me.chanjar.weixin.mp.bean.card; import com.google.gson.annotations.SerializedName; import lombok.Data; +import me.chanjar.weixin.mp.bean.card.enums.BusinessServiceType; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/MemberCardActivateUserFormRequest.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/MemberCardActivateUserFormRequest.java new file mode 100644 index 00000000..3d9a9687 --- /dev/null +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/MemberCardActivateUserFormRequest.java @@ -0,0 +1,70 @@ +package me.chanjar.weixin.mp.bean.card; + +import com.google.gson.JsonObject; +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +import java.io.Serializable; + +/** + * 会员卡激活,用户字段提交请求 + * + * @author yuanqixun + * @date 2018-08-30 + */ +@Data +public class MemberCardActivateUserFormRequest implements Serializable { + @SerializedName("card_id") + private String cardId; + + @SerializedName("service_statement") + private JsonObject serviceStatement; + + @SerializedName("bind_old_card") + private JsonObject bindOldCard; + + /** + * 必填项 + */ + @SerializedName("required_form") + private MemberCardUserForm requiredForm; + + /** + * 可选项 + */ + @SerializedName("optional_form") + private MemberCardUserForm optionalForm; + + /** + * 绑定老会员卡信息 + * + * @param name + * @param url + */ + public void setBindOldCard(String name, String url) { + if (StringUtils.isAnyEmpty(name, url)) { + return; + } + if (bindOldCard == null) + bindOldCard = new JsonObject(); + bindOldCard.addProperty("name", name); + bindOldCard.addProperty("url", url); + } + + /** + * 设置服务声明,用于放置商户会员卡守则 + * + * @param name + * @param url + */ + public void setServiceStatement(String name, String url) { + if (StringUtils.isAnyEmpty(name, url)) { + return; + } + if (serviceStatement == null) + serviceStatement = new JsonObject(); + serviceStatement.addProperty("name", name); + serviceStatement.addProperty("url", url); + } +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/MemberCardActivateUserFormResult.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/MemberCardActivateUserFormResult.java new file mode 100644 index 00000000..c961676d --- /dev/null +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/MemberCardActivateUserFormResult.java @@ -0,0 +1,29 @@ +package me.chanjar.weixin.mp.bean.card; + +import lombok.Data; +import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.io.Serializable; + +@Data +public class MemberCardActivateUserFormResult implements Serializable { + private Integer errcode; + private String errmsg; + + public boolean isSuccess() { + return 0 == errcode; + } + + public static MemberCardActivateUserFormResult fromJson(String json) { + return WxMpGsonBuilder.create().fromJson(json, MemberCardActivateUserFormResult.class); + } + + @Override + public String toString() { + return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE); + } + +} + diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/MemberCardUserForm.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/MemberCardUserForm.java new file mode 100644 index 00000000..14ef9f37 --- /dev/null +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/MemberCardUserForm.java @@ -0,0 +1,92 @@ +package me.chanjar.weixin.mp.bean.card; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import me.chanjar.weixin.mp.bean.card.enums.CardWechatFieldType; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * 用户表单对象 + * + * @author yuanqixun + * @date 2018-08-30 + */ +@Data +public class MemberCardUserForm implements Serializable { + + /** + * 当前结构(required_form或者optional_form )内的字段是否允许用户激活后再次修改, + * 商户设置为true 时,需要接收相应事件通知处理修改事件 + */ + @SerializedName("can_modify") + private boolean canModify; + + /** + * 富文本类型字段列表 + */ + @SerializedName("rich_field_list") + List richFieldList; + + /** + * 文本选项类型列表 + */ + @SerializedName("custom_field_list") + private List customFieldList; + + + /** + * 微信格式化的选项类型 + */ + @SerializedName("common_field_id_list") + private List wechatFieldIdList; + + /** + * 添加富文本类型字段 + * + * @param fieldType + */ + public void addRichField(MemberCardUserFormRichField field) { + if (field == null) + return; + if (richFieldList == null) + richFieldList = new ArrayList<>(); + richFieldList.add(field); + } + + /** + * 添加微信选项类型字段 + * + * @param fieldType + */ + public void addWechatField(CardWechatFieldType fieldType) { + if (fieldType == null) + return; + if (wechatFieldIdList == null) + wechatFieldIdList = new ArrayList<>(); + wechatFieldIdList.add(fieldType.name()); + } + + /** + * 添加文本类型字段 + * + * @param fieldType + */ + public void addCustomField(String field) { + if (StringUtils.isBlank(field)) + return; + if (customFieldList == null) + customFieldList = new ArrayList<>(); + customFieldList.add(field); + } + + public String toString() { + return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE); + } + +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/MemberCardUserFormRichField.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/MemberCardUserFormRichField.java new file mode 100644 index 00000000..6605f9b6 --- /dev/null +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/MemberCardUserFormRichField.java @@ -0,0 +1,42 @@ +package me.chanjar.weixin.mp.bean.card; + +import com.google.gson.annotations.SerializedName; +import lombok.Data; +import me.chanjar.weixin.mp.bean.card.enums.CardRichFieldType; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import java.util.ArrayList; +import java.util.List; + +/** + * 富文本字段 + * + * @author yuanqixun + * @date 2018-08-30 + */ +@Data +public class MemberCardUserFormRichField { + + /** + * 富文本类型 + */ + @SerializedName("type") + private CardRichFieldType type; + + @SerializedName("name") + private String name; + + @SerializedName("values") + private List valueList; + + public void add(String value) { + if (valueList == null) + valueList = new ArrayList(); + valueList.add(value); + } + + public String toString() { + return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE); + } +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/BusinessServiceType.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/BusinessServiceType.java similarity index 89% rename from weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/BusinessServiceType.java rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/BusinessServiceType.java index 8fde3797..3ae9cf89 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/BusinessServiceType.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/BusinessServiceType.java @@ -1,4 +1,4 @@ -package me.chanjar.weixin.mp.bean.card; +package me.chanjar.weixin.mp.bean.card.enums; /** * 商户提供服务类型 diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/CardColor.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/CardColor.java similarity index 92% rename from weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/CardColor.java rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/CardColor.java index 154262e4..0977cc92 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/CardColor.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/CardColor.java @@ -1,4 +1,4 @@ -package me.chanjar.weixin.mp.bean.card; +package me.chanjar.weixin.mp.bean.card.enums; /** * 会员卡颜色 diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/CardFieldType.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/CardFieldType.java new file mode 100644 index 00000000..4134f3e5 --- /dev/null +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/CardFieldType.java @@ -0,0 +1,23 @@ +package me.chanjar.weixin.mp.bean.card.enums; + +/** + * 微信卡券激活字段类型 + * + * @author yuanqixun + * @date 2018-08-30 + */ +public enum CardFieldType { + COMMON_FIELD("微信选项"), + CUSTOM_FIELD("自定义选项"), + RICH_FIELD("自定义富文本类型"); + + private String description; + + CardFieldType(String description) { + this.description = description; + } + + public String getDescription() { + return description; + } +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/CardRichFieldType.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/CardRichFieldType.java new file mode 100644 index 00000000..40d4b79f --- /dev/null +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/CardRichFieldType.java @@ -0,0 +1,23 @@ +package me.chanjar.weixin.mp.bean.card.enums; + +/** + * 会员卡富文本字段类型 + * + * @author yuanqixun + * @date 2018-08-30 + */ +public enum CardRichFieldType { + FORM_FIELD_RADIO("自定义单选"), + FORM_FIELD_SELECT("自定义选择项"), + FORM_FIELD_CHECK_BOX("自定义多选"); + + private String description; + + CardRichFieldType(String description) { + this.description = description; + } + + public String getDescription() { + return description; + } +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/CardSceneType.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/CardSceneType.java similarity index 90% rename from weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/CardSceneType.java rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/CardSceneType.java index 40bb9e2f..ec5b9fcf 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/CardSceneType.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/CardSceneType.java @@ -1,4 +1,4 @@ -package me.chanjar.weixin.mp.bean.card; +package me.chanjar.weixin.mp.bean.card.enums; public enum CardSceneType { SCENE_NEAR_BY("附近"), diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/CardWechatFieldType.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/CardWechatFieldType.java new file mode 100644 index 00000000..3a62c6f4 --- /dev/null +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/CardWechatFieldType.java @@ -0,0 +1,31 @@ +package me.chanjar.weixin.mp.bean.card.enums; + +/** + * 微信卡券激活字段类型 + * + * @author yuanqixun + * @date 2018-08-30 + */ +public enum CardWechatFieldType { + USER_FORM_INFO_FLAG_MOBILE("手机号"), + USER_FORM_INFO_FLAG_SEX("性别"), + USER_FORM_INFO_FLAG_NAME("姓名"), + USER_FORM_INFO_FLAG_BIRTHDAY("生日"), + USER_FORM_INFO_FLAG_IDCARD("身份证"), + USER_FORM_INFO_FLAG_EMAIL("邮箱"), + USER_FORM_INFO_FLAG_LOCATION("详细地址"), + USER_FORM_INFO_FLAG_EDUCATION_BACKGRO("教育背景"), + USER_FORM_INFO_FLAG_INDUSTRY("行业"), + USER_FORM_INFO_FLAG_INCOME("收入"), + USER_FORM_INFO_FLAG_HABIT("兴趣爱好"); + + private String description; + + CardWechatFieldType(String description) { + this.description = description; + } + + public String getDescription() { + return description; + } +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/DateInfoType.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/DateInfoType.java similarity index 87% rename from weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/DateInfoType.java rename to weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/DateInfoType.java index 4c749f92..bd8a2355 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/DateInfoType.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/enums/DateInfoType.java @@ -1,4 +1,4 @@ -package me.chanjar.weixin.mp.bean.card; +package me.chanjar.weixin.mp.bean.card.enums; public enum DateInfoType { DATE_TYPE_PERMANENT("永久有效类型"), 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 e65a4d31..ae476331 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 @@ -342,6 +342,82 @@ public class WxMpXmlMessage implements Serializable { @XStreamAlias("SendLocationInfo") private SendLocationInfo sendLocationInfo = new SendLocationInfo(); + /** + * 审核不通过原因 + */ + @XStreamAlias("RefuseReason") + private String refuseReason; + + /** + * 是否为朋友推荐,0代表否,1代表是 + */ + @XStreamAlias("IsRecommendByFriend") + private String isRecommendByFriend; + + /** + * 购买券点时,实际支付成功的时间 + */ + @XStreamAlias("PayFinishTime") + private String payFinishTime; + + /** + * 购买券点时,支付二维码的生成时间 + */ + @XStreamAlias("CreateOrderTime") + private String createOrderTime; + + /** + * 购买券点时,支付二维码的生成时间 + */ + @XStreamAlias("Desc") + private String desc; + + /** + * 剩余免费券点数量 + */ + @XStreamAlias("FreeCoinCount") + private String freeCoinCount; + + /** + * 剩余付费券点数量 + */ + @XStreamAlias("PayCoinCount") + private String payCoinCount; + + /** + * 本次变动的免费券点数量 + */ + @XStreamAlias("RefundFreeCoinCount") + private String refundFreeCoinCount; + + /** + * 本次变动的付费券点数量 + */ + @XStreamAlias("RefundPayCoinCount") + private String refundPayCoinCount; + + /** + *

+   *    所要拉取的订单类型 ORDER_TYPE_SYS_ADD 平台赠送券点 ORDER_TYPE_WXPAY 充值券点 ORDER_TYPE_REFUND 库存未使用回退券点
+   *    ORDER_TYPE_REDUCE 券点兑换库存 ORDER_TYPE_SYS_REDUCE 平台扣减
+   * 
+ */ + @XStreamAlias("OrderType") + private String orderType; + + /** + * 系统备注,说明此次变动的缘由,如开通账户奖励、门店奖励、核销奖励以及充值、扣减。 + */ + @XStreamAlias("Memo") + private String memo; + + /** + * 所开发票的详情 + */ + @XStreamAlias("ReceiptInfo") + private String receiptInfo; + + /////////////////////////////////////// // 门店审核事件推送 /////////////////////////////////////// diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpMemberCardServiceImplTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpMemberCardServiceImplTest.java index 31cac098..0e1502f2 100644 --- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpMemberCardServiceImplTest.java +++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpMemberCardServiceImplTest.java @@ -5,6 +5,7 @@ import me.chanjar.weixin.mp.api.WxMpCardService; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.api.test.ApiTestModule; import me.chanjar.weixin.mp.bean.card.*; +import me.chanjar.weixin.mp.bean.card.enums.CardSceneType; import me.chanjar.weixin.mp.bean.membercard.*; import org.testng.annotations.Guice; import org.testng.annotations.Test;