Skip to content

新增会员卡相关接口 #280

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 2 commits into from
Jul 15, 2017
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
@@ -0,0 +1,38 @@
package me.chanjar.weixin.mp.api;

import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardActivatedMessage;
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUserInfoResult;

/**
* 会员卡相关接口
*
* @author YuJian(mgcnrx11@gmail.com)
* @version 2017/7/8
*/
public interface WxMpMemberCardService {

/**
* 得到WxMpService
*/
WxMpService getWxMpService();

/**
* 会员卡激活接口
*
* @param activatedMessage 激活所需参数
* @return 调用返回的JSON字符串。
* @throws WxErrorException 接口调用失败抛出的异常
*/
String activateMemberCard(WxMpMemberCardActivatedMessage activatedMessage) throws WxErrorException;

/**
* 拉取会员信息接口
*
* @param cardId 会员卡的CardId,微信分配
* @param code 领取会员的会员卡Code
* @return 会员信息的结果对象
* @throws WxErrorException 接口调用失败抛出的异常
*/
WxMpMemberCardUserInfoResult getUserInfo(String cardId, String code) throws WxErrorException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,13 @@ public interface WxMpService {
*/
WxMpShakeService getShakeService();

/**
* 返回会员卡相关接口方法的实现类对象,以方便调用其各个接口
*
* @return WxMpMemberCardService
*/
WxMpMemberCardService getMemberCardService();

/**
* 初始化http请求对象
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public abstract class AbstractWxMpServiceImpl<H, P> implements WxMpService, Requ
private WxMpTemplateMsgService templateMsgService = new WxMpTemplateMsgServiceImpl(this);
private WxMpDeviceService deviceService = new WxMpDeviceServiceImpl(this);
private WxMpShakeService shakeService = new WxMpShakeServiceImpl(this);
private WxMpMemberCardService memberCardService = new WxMpMemberCardServiceImpl(this);

private int retrySleepMillis = 1000;
private int maxRetryTimes = 5;
Expand Down Expand Up @@ -406,6 +407,11 @@ public WxMpShakeService getShakeService() {
return this.shakeService;
}

@Override
public WxMpMemberCardService getMemberCardService() {
return this.memberCardService;
}

@Override
public RequestHttp getRequestHttp() {
return this;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package me.chanjar.weixin.mp.api.impl;

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.exception.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpMemberCardService;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardActivatedMessage;
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUserInfoResult;
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* 会员卡相关接口的实现类
*
* @author YuJian(mgcnrx11@gmail.com)
* @version 2017/7/8
*/
public class WxMpMemberCardServiceImpl implements WxMpMemberCardService {

private final Logger log = LoggerFactory.getLogger(WxMpMemberCardServiceImpl.class);

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 WxMpService wxMpService;

private static final Gson GSON = new Gson();

WxMpMemberCardServiceImpl(WxMpService wxMpService) {
this.wxMpService = wxMpService;
}

/**
* 得到WxMpService
*/
@Override
public WxMpService getWxMpService() {
return this.wxMpService;
}

/**
* 会员卡激活接口
*
* @param activatedMessage 激活所需参数
* @return 调用返回的JSON字符串。
* @throws WxErrorException 接口调用失败抛出的异常
*/
@Override
public String activateMemberCard(WxMpMemberCardActivatedMessage activatedMessage) throws WxErrorException {
return this.wxMpService.post(MEMBER_CARD_ACTIVATE, GSON.toJson(activatedMessage));
}

/**
* 拉取会员信息接口
*
* @param cardId 会员卡的CardId,微信分配
* @param code 领取会员的会员卡Code
* @return 会员信息的结果对象
* @throws WxErrorException 接口调用失败抛出的异常
*/
@Override
public WxMpMemberCardUserInfoResult getUserInfo(String cardId, String code) throws WxErrorException {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("card_id", cardId);
jsonObject.addProperty("code",code);

String responseContent = this.getWxMpService().post(MEMBER_CARD_USER_INFO_GET, jsonObject.toString());
JsonElement tmpJsonElement = new JsonParser().parse(responseContent);
return WxMpGsonBuilder.INSTANCE.create().fromJson(tmpJsonElement,
new TypeToken<WxMpMemberCardUserInfoResult>() {
}.getType());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package me.chanjar.weixin.mp.bean.membercard;

/**
* Created by YuJian on 2017/7/11.
*/
public class MemberCardUserInfo {

private NameValues[] commonFieldList;

private NameValues[] customFieldList;

public NameValues[] getCommonFieldList() {
return commonFieldList;
}

public void setCommonFieldList(NameValues[] commonFieldList) {
this.commonFieldList = commonFieldList;
}

public NameValues[] getCustomFieldList() {
return customFieldList;
}

public void setCustomFieldList(NameValues[] customFieldList) {
this.customFieldList = customFieldList;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package me.chanjar.weixin.mp.bean.membercard;

/**
* Created by YuJian on 2017/7/11.
*/
public class NameValues {
private String name;

private String value;

private String[] valueList;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}

public String[] getValueList() {
return valueList;
}

public void setValueList(String[] valueList) {
this.valueList = valueList;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
package me.chanjar.weixin.mp.bean.membercard;

import com.google.gson.annotations.SerializedName;

/**
* 会员卡激活接口的参数
*
* @author YuJian(mgcnrx11@hotmail.com)
* @version 2017/7/8
*/
public class WxMpMemberCardActivatedMessage {

// 会员卡编号,由开发者填入,作为序列号显示在用户的卡包里。可与Code码保持等值。
@SerializedName("membership_number")
private String membershipNumber;
// 领取会员卡用户获得的code
private String code;
// 卡券ID,自定义code卡券必填
@SerializedName("card_id")
private String cardId;
// 商家自定义会员卡背景图,须先调用上传图片接口将背景图上传至CDN,否则报错。卡面设计请遵循微信会员卡自定义背景设计规范
@SerializedName("background_pic_url")
private String backgroundPicUrl;
// 激活后的有效起始时间。若不填写默认以创建时的 data_info 为准。Unix时间戳格式。
@SerializedName("activate_begin_time")
private Integer activateBeginTime;
// 激活后的有效截至时间。若不填写默认以创建时的 data_info 为准。Unix时间戳格式。
@SerializedName("activate_end_time")
private Integer activateEndTime;
// 初始积分,不填为0。
@SerializedName("init_bonus")
private Integer initBonus;
// 积分同步说明。
@SerializedName("init_bonus_record")
private String initBonusRecord;
// 初始余额,不填为0。
@SerializedName("init_balance")
private Integer initBalance;
// 创建时字段custom_field1定义类型的初始值,限制为4个汉字,12字节。
@SerializedName("init_custom_field_value1")
private String initCustomFieldValue1;
// 创建时字段custom_field2定义类型的初始值,限制为4个汉字,12字节。
@SerializedName("init_custom_field_value2")
private String initCustomFieldValue2;
// 创建时字段custom_field3定义类型的初始值,限制为4个汉字,12字节。
@SerializedName("init_custom_field_value3")
private String initCustomFieldValue3;

public String getMembershipNumber() {
return membershipNumber;
}

public void setMembershipNumber(String membershipNumber) {
this.membershipNumber = membershipNumber;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public String getCardId() {
return cardId;
}

public void setCardId(String cardId) {
this.cardId = cardId;
}

public String getBackgroundPicUrl() {
return backgroundPicUrl;
}

public void setBackgroundPicUrl(String backgroundPicUrl) {
this.backgroundPicUrl = backgroundPicUrl;
}

public Integer getActivateBeginTime() {
return activateBeginTime;
}

public void setActivateBeginTime(Integer activateBeginTime) {
this.activateBeginTime = activateBeginTime;
}

public Integer getActivateEndTime() {
return activateEndTime;
}

public void setActivateEndTime(Integer activateEndTime) {
this.activateEndTime = activateEndTime;
}

public Integer getInitBonus() {
return initBonus;
}

public void setInitBonus(Integer initBonus) {
this.initBonus = initBonus;
}

public String getInitBonusRecord() {
return initBonusRecord;
}

public void setInitBonusRecord(String initBonusRecord) {
this.initBonusRecord = initBonusRecord;
}

public Integer getInitBalance() {
return initBalance;
}

public void setInitBalance(Integer initBalance) {
this.initBalance = initBalance;
}

public String getInitCustomFieldValue1() {
return initCustomFieldValue1;
}

public void setInitCustomFieldValue1(String initCustomFieldValue1) {
this.initCustomFieldValue1 = initCustomFieldValue1;
}

public String getInitCustomFieldValue2() {
return initCustomFieldValue2;
}

public void setInitCustomFieldValue2(String initCustomFieldValue2) {
this.initCustomFieldValue2 = initCustomFieldValue2;
}

public String getInitCustomFieldValue3() {
return initCustomFieldValue3;
}

public void setInitCustomFieldValue3(String initCustomFieldValue3) {
this.initCustomFieldValue3 = initCustomFieldValue3;
}
}
Loading