Skip to content

增加类型为微信激活会员卡时,需设置微信开卡字段接口 #739

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 22 commits into from
Aug 31, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ public static class KefuMsgType {
/**
* 小程序卡片(要求小程序与公众号已关联)
*/
public static final String MINIPROGRAMPAGE="miniprogrampage";
public static final String MINIPROGRAMPAGE = "miniprogrampage";
}

/**
Expand Down Expand Up @@ -181,6 +181,76 @@ public static class EventType {
* 微信小店 订单付款通知.
*/
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";


}

/**
Expand Down Expand Up @@ -280,4 +350,5 @@ public static class MaterialType {
public static final String IMAGE = "image";
public static final String VIDEO = "video";
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,15 @@ void markCardCode(String code, String cardId, String openId, boolean isMark) thr
*/
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 货架创建参数
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -20,6 +31,7 @@ public interface WxMpMemberCardService {

/**
* 会员卡创建接口
*
* @param createJson
* @return
* @throws WxErrorException
Expand All @@ -28,6 +40,7 @@ public interface WxMpMemberCardService {

/**
* 会员卡创建接口
*
* @param createMessageMessage
* @return WxMpCardCreateResult
* @throws WxErrorException
Expand All @@ -47,15 +60,15 @@ public interface WxMpMemberCardService {
* 拉取会员信息接口
*
* @param cardId 会员卡的CardId,微信分配
* @param code 领取会员的会员卡Code
* @param code 领取会员的会员卡Code
* @return 会员信息的结果对象
* @throws WxErrorException 接口调用失败抛出的异常
*/
WxMpMemberCardUserInfoResult getUserInfo(String cardId, String code) throws WxErrorException;

/**
* 当会员持卡消费后,支持开发者调用该接口更新会员信息。会员卡交易后的每次信息变更需通过该接口通知微信,便于后续消息通知及其他扩展功能。
*
* <p>
* 1.开发者可以同时传入add_bonus和bonus解决由于同步失败带来的幂等性问题。同时传入add_bonus和bonus时
* add_bonus作为积分变动消息中的变量值,而bonus作为卡面上的总积分额度显示。余额变动同理。
* 2.开发者可以传入is_notify_bonus控制特殊的积分对账变动不发送消息,余额变动同理。
Expand All @@ -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;

}
Original file line number Diff line number Diff line change
Expand Up @@ -256,14 +256,29 @@ public String addTestWhiteList(String openid) throws WxErrorException {

/**
* 创建卡券二维码
*
* @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);
Expand All @@ -276,13 +291,14 @@ public WxMpCardQrcodeCreateResult createQrcodeCard(String cardId, String outerSt

/**
* 创建卡券货架接口
*
* @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);
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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();
Expand Down Expand Up @@ -265,4 +266,17 @@ public WxMpMemberCardUpdateResult updateUserMemberCard(WxMpMemberCardUpdateMessa
}.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);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

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;

Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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);
}

}

Loading