* 增加微信激活会员卡,设置用户资料字段接口实现。 * 增加创建卡券二维码的失效时间参数接口。 * 设置对象返回类型。 * 增加卡券相关事件及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 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 IMAGE = "image"; | ||||
public static final String VIDEO = "video"; | public static final String VIDEO = "video"; | ||||
} | } | ||||
} | } |
@@ -145,6 +145,15 @@ public interface WxMpCardService { | |||||
*/ | */ | ||||
WxMpCardQrcodeCreateResult createQrcodeCard(String cardId, String outerStr) throws WxErrorException; | 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 货架创建参数 | * @param createRequest 货架创建参数 | ||||
@@ -1,17 +1,28 @@ | |||||
package me.chanjar.weixin.mp.api; | package me.chanjar.weixin.mp.api; | ||||
import me.chanjar.weixin.common.error.WxErrorException; | 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.WxMpCardCreateResult; | ||||
import me.chanjar.weixin.mp.bean.card.WxMpCardQrcodeCreateResult; | |||||
import me.chanjar.weixin.mp.bean.membercard.*; | import me.chanjar.weixin.mp.bean.membercard.*; | ||||
/** | /** | ||||
* 会员卡相关接口 | * 会员卡相关接口 | ||||
* | * | ||||
* @author YuJian(mgcnrx11@gmail.com) | |||||
* @author YuJian(mgcnrx11 @ gmail.com) | |||||
* @author yuanqixun | |||||
* @version 2017/7/8 | * @version 2017/7/8 | ||||
* @date 2018-08-30 | |||||
*/ | */ | ||||
public interface WxMpMemberCardService { | 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 | * 得到WxMpService | ||||
@@ -20,6 +31,7 @@ public interface WxMpMemberCardService { | |||||
/** | /** | ||||
* 会员卡创建接口 | * 会员卡创建接口 | ||||
* | |||||
* @param createJson | * @param createJson | ||||
* @return | * @return | ||||
* @throws WxErrorException | * @throws WxErrorException | ||||
@@ -28,6 +40,7 @@ public interface WxMpMemberCardService { | |||||
/** | /** | ||||
* 会员卡创建接口 | * 会员卡创建接口 | ||||
* | |||||
* @param createMessageMessage | * @param createMessageMessage | ||||
* @return WxMpCardCreateResult | * @return WxMpCardCreateResult | ||||
* @throws WxErrorException | * @throws WxErrorException | ||||
@@ -47,7 +60,7 @@ public interface WxMpMemberCardService { | |||||
* 拉取会员信息接口 | * 拉取会员信息接口 | ||||
* | * | ||||
* @param cardId 会员卡的CardId,微信分配 | * @param cardId 会员卡的CardId,微信分配 | ||||
* @param code 领取会员的会员卡Code | |||||
* @param code 领取会员的会员卡Code | |||||
* @return 会员信息的结果对象 | * @return 会员信息的结果对象 | ||||
* @throws WxErrorException 接口调用失败抛出的异常 | * @throws WxErrorException 接口调用失败抛出的异常 | ||||
*/ | */ | ||||
@@ -55,7 +68,7 @@ public interface WxMpMemberCardService { | |||||
/** | /** | ||||
* 当会员持卡消费后,支持开发者调用该接口更新会员信息。会员卡交易后的每次信息变更需通过该接口通知微信,便于后续消息通知及其他扩展功能。 | * 当会员持卡消费后,支持开发者调用该接口更新会员信息。会员卡交易后的每次信息变更需通过该接口通知微信,便于后续消息通知及其他扩展功能。 | ||||
* | |||||
* <p> | |||||
* 1.开发者可以同时传入add_bonus和bonus解决由于同步失败带来的幂等性问题。同时传入add_bonus和bonus时 | * 1.开发者可以同时传入add_bonus和bonus解决由于同步失败带来的幂等性问题。同时传入add_bonus和bonus时 | ||||
* add_bonus作为积分变动消息中的变量值,而bonus作为卡面上的总积分额度显示。余额变动同理。 | * add_bonus作为积分变动消息中的变量值,而bonus作为卡面上的总积分额度显示。余额变动同理。 | ||||
* 2.开发者可以传入is_notify_bonus控制特殊的积分对账变动不发送消息,余额变动同理。 | * 2.开发者可以传入is_notify_bonus控制特殊的积分对账变动不发送消息,余额变动同理。 | ||||
@@ -66,4 +79,13 @@ public interface WxMpMemberCardService { | |||||
*/ | */ | ||||
WxMpMemberCardUpdateResult updateUserMemberCard(WxMpMemberCardUpdateMessage updateUserMessage) throws WxErrorException; | 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 cardId | ||||
* @param outerStr | * @param outerStr | ||||
* @return | * @return | ||||
*/ | */ | ||||
public WxMpCardQrcodeCreateResult createQrcodeCard(String cardId, String outerStr) throws WxErrorException { | 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 jsonObject = new JsonObject(); | ||||
jsonObject.addProperty("action_name", "QR_CARD"); | jsonObject.addProperty("action_name", "QR_CARD"); | ||||
jsonObject.addProperty("expire_seconds", 1800); | |||||
if (expiresIn > 0) { | |||||
jsonObject.addProperty("expire_seconds", expiresIn); | |||||
} | |||||
JsonObject actionInfoJson = new JsonObject(); | JsonObject actionInfoJson = new JsonObject(); | ||||
JsonObject cardJson = new JsonObject(); | JsonObject cardJson = new JsonObject(); | ||||
cardJson.addProperty("card_id", cardId); | cardJson.addProperty("card_id", cardId); | ||||
@@ -276,13 +291,14 @@ public class WxMpCardServiceImpl implements WxMpCardService { | |||||
/** | /** | ||||
* 创建卡券货架接口 | * 创建卡券货架接口 | ||||
* | |||||
* @param request | * @param request | ||||
* @return | * @return | ||||
* @throws WxErrorException | * @throws WxErrorException | ||||
*/ | */ | ||||
@Override | @Override | ||||
public WxMpCardLandingPageCreateResult createLandingPage(WxMpCardLandingPageCreateRequest request) throws WxErrorException { | 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); | return WxMpCardLandingPageCreateResult.fromJson(response); | ||||
} | } | ||||
} | } |
@@ -1,12 +1,18 @@ | |||||
package me.chanjar.weixin.mp.api.impl; | 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 com.google.gson.reflect.TypeToken; | ||||
import me.chanjar.weixin.common.error.WxErrorException; | import me.chanjar.weixin.common.error.WxErrorException; | ||||
import me.chanjar.weixin.common.util.json.WxGsonBuilder; | import me.chanjar.weixin.common.util.json.WxGsonBuilder; | ||||
import me.chanjar.weixin.mp.api.WxMpMemberCardService; | import me.chanjar.weixin.mp.api.WxMpMemberCardService; | ||||
import me.chanjar.weixin.mp.api.WxMpService; | import me.chanjar.weixin.mp.api.WxMpService; | ||||
import me.chanjar.weixin.mp.bean.card.*; | 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.bean.membercard.*; | ||||
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | ||||
import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
@@ -23,11 +29,6 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { | |||||
private final Logger log = LoggerFactory.getLogger(WxMpMemberCardServiceImpl.class); | 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 WxMpService wxMpService; | ||||
private static final Gson GSON = new Gson(); | private static final Gson GSON = new Gson(); | ||||
@@ -265,4 +266,17 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { | |||||
}.getType()); | }.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 com.google.gson.annotations.SerializedName; | ||||
import lombok.Data; | 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.ToStringBuilder; | ||||
import org.apache.commons.lang3.builder.ToStringStyle; | 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 { | public enum CardSceneType { | ||||
SCENE_NEAR_BY("附近"), | 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 { | public enum DateInfoType { | ||||
DATE_TYPE_PERMANENT("永久有效类型"), | DATE_TYPE_PERMANENT("永久有效类型"), |
@@ -342,6 +342,82 @@ public class WxMpXmlMessage implements Serializable { | |||||
@XStreamAlias("SendLocationInfo") | @XStreamAlias("SendLocationInfo") | ||||
private SendLocationInfo sendLocationInfo = new 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.WxMpService; | ||||
import me.chanjar.weixin.mp.api.test.ApiTestModule; | import me.chanjar.weixin.mp.api.test.ApiTestModule; | ||||
import me.chanjar.weixin.mp.bean.card.*; | import me.chanjar.weixin.mp.bean.card.*; | ||||
import me.chanjar.weixin.mp.bean.card.enums.CardSceneType; | |||||
import me.chanjar.weixin.mp.bean.membercard.*; | import me.chanjar.weixin.mp.bean.membercard.*; | ||||
import org.testng.annotations.Guice; | import org.testng.annotations.Guice; | ||||
import org.testng.annotations.Test; | import org.testng.annotations.Test; | ||||