Skip to content

Commit 3a2efdd

Browse files
mgcnrx11binarywang
authored andcommitted
新增会员卡相关接口 (binarywang#280)
* 新增会员卡相关接口 1. 激活会员卡接口 2. 拉取会员信息接口
1 parent 687093f commit 3a2efdd

File tree

10 files changed

+547
-0
lines changed

10 files changed

+547
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package me.chanjar.weixin.mp.api;
2+
3+
import me.chanjar.weixin.common.exception.WxErrorException;
4+
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardActivatedMessage;
5+
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUserInfoResult;
6+
7+
/**
8+
* 会员卡相关接口
9+
*
10+
* @author YuJian(mgcnrx11@gmail.com)
11+
* @version 2017/7/8
12+
*/
13+
public interface WxMpMemberCardService {
14+
15+
/**
16+
* 得到WxMpService
17+
*/
18+
WxMpService getWxMpService();
19+
20+
/**
21+
* 会员卡激活接口
22+
*
23+
* @param activatedMessage 激活所需参数
24+
* @return 调用返回的JSON字符串。
25+
* @throws WxErrorException 接口调用失败抛出的异常
26+
*/
27+
String activateMemberCard(WxMpMemberCardActivatedMessage activatedMessage) throws WxErrorException;
28+
29+
/**
30+
* 拉取会员信息接口
31+
*
32+
* @param cardId 会员卡的CardId,微信分配
33+
* @param code 领取会员的会员卡Code
34+
* @return 会员信息的结果对象
35+
* @throws WxErrorException 接口调用失败抛出的异常
36+
*/
37+
WxMpMemberCardUserInfoResult getUserInfo(String cardId, String code) throws WxErrorException;
38+
}

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,13 @@ public interface WxMpService {
434434
*/
435435
WxMpShakeService getShakeService();
436436

437+
/**
438+
* 返回会员卡相关接口方法的实现类对象,以方便调用其各个接口
439+
*
440+
* @return WxMpMemberCardService
441+
*/
442+
WxMpMemberCardService getMemberCardService();
443+
437444
/**
438445
* 初始化http请求对象
439446
*/

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/AbstractWxMpServiceImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public abstract class AbstractWxMpServiceImpl<H, P> implements WxMpService, Requ
4242
private WxMpTemplateMsgService templateMsgService = new WxMpTemplateMsgServiceImpl(this);
4343
private WxMpDeviceService deviceService = new WxMpDeviceServiceImpl(this);
4444
private WxMpShakeService shakeService = new WxMpShakeServiceImpl(this);
45+
private WxMpMemberCardService memberCardService = new WxMpMemberCardServiceImpl(this);
4546

4647
private int retrySleepMillis = 1000;
4748
private int maxRetryTimes = 5;
@@ -406,6 +407,11 @@ public WxMpShakeService getShakeService() {
406407
return this.shakeService;
407408
}
408409

410+
@Override
411+
public WxMpMemberCardService getMemberCardService() {
412+
return this.memberCardService;
413+
}
414+
409415
@Override
410416
public RequestHttp getRequestHttp() {
411417
return this;
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package me.chanjar.weixin.mp.api.impl;
2+
3+
import com.google.gson.Gson;
4+
import com.google.gson.JsonElement;
5+
import com.google.gson.JsonObject;
6+
import com.google.gson.JsonParser;
7+
import com.google.gson.reflect.TypeToken;
8+
import me.chanjar.weixin.common.exception.WxErrorException;
9+
import me.chanjar.weixin.mp.api.WxMpMemberCardService;
10+
import me.chanjar.weixin.mp.api.WxMpService;
11+
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardActivatedMessage;
12+
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUserInfoResult;
13+
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
14+
import org.slf4j.Logger;
15+
import org.slf4j.LoggerFactory;
16+
17+
/**
18+
* 会员卡相关接口的实现类
19+
*
20+
* @author YuJian(mgcnrx11@gmail.com)
21+
* @version 2017/7/8
22+
*/
23+
public class WxMpMemberCardServiceImpl implements WxMpMemberCardService {
24+
25+
private final Logger log = LoggerFactory.getLogger(WxMpMemberCardServiceImpl.class);
26+
27+
private static final String MEMBER_CARD_ACTIVATE = "https://api.weixin.qq.com/card/membercard/activate";
28+
private static final String MEMBER_CARD_USER_INFO_GET = "https://api.weixin.qq.com/card/membercard/userinfo/get";
29+
30+
private WxMpService wxMpService;
31+
32+
private static final Gson GSON = new Gson();
33+
34+
WxMpMemberCardServiceImpl(WxMpService wxMpService) {
35+
this.wxMpService = wxMpService;
36+
}
37+
38+
/**
39+
* 得到WxMpService
40+
*/
41+
@Override
42+
public WxMpService getWxMpService() {
43+
return this.wxMpService;
44+
}
45+
46+
/**
47+
* 会员卡激活接口
48+
*
49+
* @param activatedMessage 激活所需参数
50+
* @return 调用返回的JSON字符串。
51+
* @throws WxErrorException 接口调用失败抛出的异常
52+
*/
53+
@Override
54+
public String activateMemberCard(WxMpMemberCardActivatedMessage activatedMessage) throws WxErrorException {
55+
return this.wxMpService.post(MEMBER_CARD_ACTIVATE, GSON.toJson(activatedMessage));
56+
}
57+
58+
/**
59+
* 拉取会员信息接口
60+
*
61+
* @param cardId 会员卡的CardId,微信分配
62+
* @param code 领取会员的会员卡Code
63+
* @return 会员信息的结果对象
64+
* @throws WxErrorException 接口调用失败抛出的异常
65+
*/
66+
@Override
67+
public WxMpMemberCardUserInfoResult getUserInfo(String cardId, String code) throws WxErrorException {
68+
JsonObject jsonObject = new JsonObject();
69+
jsonObject.addProperty("card_id", cardId);
70+
jsonObject.addProperty("code",code);
71+
72+
String responseContent = this.getWxMpService().post(MEMBER_CARD_USER_INFO_GET, jsonObject.toString());
73+
JsonElement tmpJsonElement = new JsonParser().parse(responseContent);
74+
return WxMpGsonBuilder.INSTANCE.create().fromJson(tmpJsonElement,
75+
new TypeToken<WxMpMemberCardUserInfoResult>() {
76+
}.getType());
77+
}
78+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package me.chanjar.weixin.mp.bean.membercard;
2+
3+
/**
4+
* Created by YuJian on 2017/7/11.
5+
*/
6+
public class MemberCardUserInfo {
7+
8+
private NameValues[] commonFieldList;
9+
10+
private NameValues[] customFieldList;
11+
12+
public NameValues[] getCommonFieldList() {
13+
return commonFieldList;
14+
}
15+
16+
public void setCommonFieldList(NameValues[] commonFieldList) {
17+
this.commonFieldList = commonFieldList;
18+
}
19+
20+
public NameValues[] getCustomFieldList() {
21+
return customFieldList;
22+
}
23+
24+
public void setCustomFieldList(NameValues[] customFieldList) {
25+
this.customFieldList = customFieldList;
26+
}
27+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package me.chanjar.weixin.mp.bean.membercard;
2+
3+
/**
4+
* Created by YuJian on 2017/7/11.
5+
*/
6+
public class NameValues {
7+
private String name;
8+
9+
private String value;
10+
11+
private String[] valueList;
12+
13+
public String getName() {
14+
return name;
15+
}
16+
17+
public void setName(String name) {
18+
this.name = name;
19+
}
20+
21+
public String getValue() {
22+
return value;
23+
}
24+
25+
public void setValue(String value) {
26+
this.value = value;
27+
}
28+
29+
public String[] getValueList() {
30+
return valueList;
31+
}
32+
33+
public void setValueList(String[] valueList) {
34+
this.valueList = valueList;
35+
}
36+
}
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
package me.chanjar.weixin.mp.bean.membercard;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
5+
/**
6+
* 会员卡激活接口的参数
7+
*
8+
* @author YuJian(mgcnrx11@hotmail.com)
9+
* @version 2017/7/8
10+
*/
11+
public class WxMpMemberCardActivatedMessage {
12+
13+
// 会员卡编号,由开发者填入,作为序列号显示在用户的卡包里。可与Code码保持等值。
14+
@SerializedName("membership_number")
15+
private String membershipNumber;
16+
// 领取会员卡用户获得的code
17+
private String code;
18+
// 卡券ID,自定义code卡券必填
19+
@SerializedName("card_id")
20+
private String cardId;
21+
// 商家自定义会员卡背景图,须先调用上传图片接口将背景图上传至CDN,否则报错。卡面设计请遵循微信会员卡自定义背景设计规范
22+
@SerializedName("background_pic_url")
23+
private String backgroundPicUrl;
24+
// 激活后的有效起始时间。若不填写默认以创建时的 data_info 为准。Unix时间戳格式。
25+
@SerializedName("activate_begin_time")
26+
private Integer activateBeginTime;
27+
// 激活后的有效截至时间。若不填写默认以创建时的 data_info 为准。Unix时间戳格式。
28+
@SerializedName("activate_end_time")
29+
private Integer activateEndTime;
30+
// 初始积分,不填为0。
31+
@SerializedName("init_bonus")
32+
private Integer initBonus;
33+
// 积分同步说明。
34+
@SerializedName("init_bonus_record")
35+
private String initBonusRecord;
36+
// 初始余额,不填为0。
37+
@SerializedName("init_balance")
38+
private Integer initBalance;
39+
// 创建时字段custom_field1定义类型的初始值,限制为4个汉字,12字节。
40+
@SerializedName("init_custom_field_value1")
41+
private String initCustomFieldValue1;
42+
// 创建时字段custom_field2定义类型的初始值,限制为4个汉字,12字节。
43+
@SerializedName("init_custom_field_value2")
44+
private String initCustomFieldValue2;
45+
// 创建时字段custom_field3定义类型的初始值,限制为4个汉字,12字节。
46+
@SerializedName("init_custom_field_value3")
47+
private String initCustomFieldValue3;
48+
49+
public String getMembershipNumber() {
50+
return membershipNumber;
51+
}
52+
53+
public void setMembershipNumber(String membershipNumber) {
54+
this.membershipNumber = membershipNumber;
55+
}
56+
57+
public String getCode() {
58+
return code;
59+
}
60+
61+
public void setCode(String code) {
62+
this.code = code;
63+
}
64+
65+
public String getCardId() {
66+
return cardId;
67+
}
68+
69+
public void setCardId(String cardId) {
70+
this.cardId = cardId;
71+
}
72+
73+
public String getBackgroundPicUrl() {
74+
return backgroundPicUrl;
75+
}
76+
77+
public void setBackgroundPicUrl(String backgroundPicUrl) {
78+
this.backgroundPicUrl = backgroundPicUrl;
79+
}
80+
81+
public Integer getActivateBeginTime() {
82+
return activateBeginTime;
83+
}
84+
85+
public void setActivateBeginTime(Integer activateBeginTime) {
86+
this.activateBeginTime = activateBeginTime;
87+
}
88+
89+
public Integer getActivateEndTime() {
90+
return activateEndTime;
91+
}
92+
93+
public void setActivateEndTime(Integer activateEndTime) {
94+
this.activateEndTime = activateEndTime;
95+
}
96+
97+
public Integer getInitBonus() {
98+
return initBonus;
99+
}
100+
101+
public void setInitBonus(Integer initBonus) {
102+
this.initBonus = initBonus;
103+
}
104+
105+
public String getInitBonusRecord() {
106+
return initBonusRecord;
107+
}
108+
109+
public void setInitBonusRecord(String initBonusRecord) {
110+
this.initBonusRecord = initBonusRecord;
111+
}
112+
113+
public Integer getInitBalance() {
114+
return initBalance;
115+
}
116+
117+
public void setInitBalance(Integer initBalance) {
118+
this.initBalance = initBalance;
119+
}
120+
121+
public String getInitCustomFieldValue1() {
122+
return initCustomFieldValue1;
123+
}
124+
125+
public void setInitCustomFieldValue1(String initCustomFieldValue1) {
126+
this.initCustomFieldValue1 = initCustomFieldValue1;
127+
}
128+
129+
public String getInitCustomFieldValue2() {
130+
return initCustomFieldValue2;
131+
}
132+
133+
public void setInitCustomFieldValue2(String initCustomFieldValue2) {
134+
this.initCustomFieldValue2 = initCustomFieldValue2;
135+
}
136+
137+
public String getInitCustomFieldValue3() {
138+
return initCustomFieldValue3;
139+
}
140+
141+
public void setInitCustomFieldValue3(String initCustomFieldValue3) {
142+
this.initCustomFieldValue3 = initCustomFieldValue3;
143+
}
144+
}

0 commit comments

Comments
 (0)