* 增加微信激活会员卡,设置用户资料字段接口实现。 * 增加创建卡券二维码的失效时间参数接口。 * 设置对象返回类型。 * 增加卡券相关事件及xml消息解析master
| @@ -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"; | |||
| } | |||
| } | |||
| @@ -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 货架创建参数 | |||
| @@ -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 { | |||
| /** | |||
| * 当会员持卡消费后,支持开发者调用该接口更新会员信息。会员卡交易后的每次信息变更需通过该接口通知微信,便于后续消息通知及其他扩展功能。 | |||
| * | |||
| * <p> | |||
| * 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; | |||
| } | |||
| @@ -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); | |||
| } | |||
| } | |||
| @@ -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); | |||
| } | |||
| } | |||
| @@ -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; | |||
| @@ -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); | |||
| } | |||
| } | |||
| @@ -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); | |||
| } | |||
| } | |||
| @@ -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<MemberCardUserFormRichField> richFieldList; | |||
| /** | |||
| * 文本选项类型列表 | |||
| */ | |||
| @SerializedName("custom_field_list") | |||
| private List<String> customFieldList; | |||
| /** | |||
| * 微信格式化的选项类型 | |||
| */ | |||
| @SerializedName("common_field_id_list") | |||
| private List<String> 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); | |||
| } | |||
| } | |||
| @@ -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<String> valueList; | |||
| public void add(String value) { | |||
| if (valueList == null) | |||
| valueList = new ArrayList<String>(); | |||
| valueList.add(value); | |||
| } | |||
| public String toString() { | |||
| return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE); | |||
| } | |||
| } | |||
| @@ -1,4 +1,4 @@ | |||
| package me.chanjar.weixin.mp.bean.card; | |||
| package me.chanjar.weixin.mp.bean.card.enums; | |||
| /** | |||
| * 商户提供服务类型 | |||
| @@ -1,4 +1,4 @@ | |||
| package me.chanjar.weixin.mp.bean.card; | |||
| package me.chanjar.weixin.mp.bean.card.enums; | |||
| /** | |||
| * 会员卡颜色 | |||
| @@ -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; | |||
| } | |||
| } | |||
| @@ -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; | |||
| } | |||
| } | |||
| @@ -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("附近"), | |||
| @@ -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; | |||
| } | |||
| } | |||
| @@ -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("永久有效类型"), | |||
| @@ -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; | |||
| /** | |||
| * <pre> | |||
| * 所要拉取的订单类型 ORDER_TYPE_SYS_ADD 平台赠送券点 ORDER_TYPE_WXPAY 充值券点 ORDER_TYPE_REFUND 库存未使用回退券点 | |||
| * ORDER_TYPE_REDUCE 券点兑换库存 ORDER_TYPE_SYS_REDUCE 平台扣减 | |||
| * </pre> | |||
| */ | |||
| @XStreamAlias("OrderType") | |||
| private String orderType; | |||
| /** | |||
| * 系统备注,说明此次变动的缘由,如开通账户奖励、门店奖励、核销奖励以及充值、扣减。 | |||
| */ | |||
| @XStreamAlias("Memo") | |||
| private String memo; | |||
| /** | |||
| * 所开发票的详情 | |||
| */ | |||
| @XStreamAlias("ReceiptInfo") | |||
| private String receiptInfo; | |||
| /////////////////////////////////////// | |||
| // 门店审核事件推送 | |||
| /////////////////////////////////////// | |||
| @@ -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; | |||