Skip to content

Commit a16e0f4

Browse files
thomas2050binarywang
authored andcommitted
#1025 会员卡模块新增跳转型会员卡用户提交资料的信息参数解析
1 parent e5b6324 commit a16e0f4

File tree

6 files changed

+154
-18
lines changed

6 files changed

+154
-18
lines changed

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

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,7 @@
66
import me.chanjar.weixin.mp.bean.card.MemberCardActivateUserFormResult;
77
import me.chanjar.weixin.mp.bean.card.MemberCardUpdateRequest;
88
import me.chanjar.weixin.mp.bean.card.WxMpCardCreateResult;
9-
import me.chanjar.weixin.mp.bean.membercard.ActivatePluginParam;
10-
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardActivatedMessage;
11-
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardCreateMessage;
12-
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUpdateMessage;
13-
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUpdateResult;
14-
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUserInfoResult;
9+
import me.chanjar.weixin.mp.bean.membercard.*;
1510

1611
/**
1712
* 会员卡相关接口.
@@ -41,27 +36,41 @@ public interface WxMpMemberCardService {
4136
*/
4237
String MEMBER_CARD_UPDATE = "https://api.weixin.qq.com/card/update";
4338

39+
/**
40+
* 跳转型会员卡开卡字段,获取用户提交资料(wx_activate=true情况调用),开发者根据activate_ticket获取到用户填写的信息
41+
*/
42+
String MEMBER_CARD_ACTIVATE_TEMP_INFO = "https://api.weixin.qq.com/card/membercard/activatetempinfo/get";
4443

4544
/**
4645
* 得到WxMpService.
46+
*
47+
* @return WxMpService
4748
*/
4849
WxMpService getWxMpService();
4950

5051
/**
5152
* 会员卡创建接口.
53+
*
54+
* @param createJson 会员卡json字符串
55+
* @return 返回json字符串
56+
* @throws WxErrorException 接口调用失败抛出的异常
5257
*/
5358
WxMpCardCreateResult createMemberCard(String createJson) throws WxErrorException;
5459

5560
/**
56-
* 会员卡创建接口.
61+
* 会员卡创建接口
62+
*
63+
* @param createMessageMessage 会员卡创建对象
64+
* @return 会员卡信息的结果对象
65+
* @throws WxErrorException 接口调用失败抛出的异常
5766
*/
5867
WxMpCardCreateResult createMemberCard(WxMpMemberCardCreateMessage createMessageMessage) throws WxErrorException;
5968

6069
/**
6170
* 会员卡激活接口.
6271
*
6372
* @param activatedMessage 激活所需参数
64-
* @return 返回json字符串
73+
* @return 会员卡激活后的json字符串
6574
* @throws WxErrorException 接口调用失败抛出的异常
6675
*/
6776
String activateMemberCard(WxMpMemberCardActivatedMessage activatedMessage) throws WxErrorException;
@@ -91,16 +100,40 @@ public interface WxMpMemberCardService {
91100

92101
/**
93102
* 设置会员卡激活的字段(会员卡设置:wx_activate=true 时需要).
103+
*
104+
* @param userFormRequest 会员卡激活字段对象
105+
* @return 会员卡激活后结果对象
106+
* @throws WxErrorException 接口调用失败抛出的异常
94107
*/
95108
MemberCardActivateUserFormResult setActivateUserForm(MemberCardActivateUserFormRequest userFormRequest) throws WxErrorException;
96109

97110
/**
98111
* 获取会员卡开卡插件参数(跳转型开卡组件需要参数).
112+
*
113+
* @param cardId 会员卡的CardId,微信分配
114+
* @param outStr 会员卡设置商户的渠道
115+
* @return 会员卡开卡插件参数结果对象
116+
* @throws WxErrorException 接口调用失败抛出的异常
99117
*/
100118
ActivatePluginParam getActivatePluginParam(String cardId, String outStr) throws WxErrorException;
101119

102120
/**
103121
* 更新会员卡信息.
122+
*
123+
* @param memberCardUpdateRequest 会员卡更新对象
124+
* @return 会员卡更新后结果对象
125+
* @throws WxErrorException 接口调用失败抛出的异常
104126
*/
105127
CardUpdateResult updateCardInfo(MemberCardUpdateRequest memberCardUpdateRequest) throws WxErrorException;
128+
129+
/**
130+
* 解析跳转型开卡字段用户提交的资料
131+
* 开发者在URL上截取ticket后须先进行urldecode
132+
*
133+
* @param activateTicket 用户提交的资料
134+
* @return 开卡字段的会员信息对象
135+
* @throws WxErrorException 接口调用失败抛出的异常
136+
*/
137+
WxMpMemberCardActivateTempInfoResult getActivateTempInfo(String activateTicket) throws WxErrorException;
138+
106139
}

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

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.HashMap;
66
import java.util.Map;
77

8+
import me.chanjar.weixin.mp.bean.membercard.*;
89
import org.apache.commons.lang3.StringUtils;
910

1011
import com.google.gson.Gson;
@@ -30,13 +31,6 @@
3031
import me.chanjar.weixin.mp.bean.card.enums.BusinessServiceType;
3132
import me.chanjar.weixin.mp.bean.card.enums.CardColor;
3233
import me.chanjar.weixin.mp.bean.card.enums.DateInfoType;
33-
import me.chanjar.weixin.mp.bean.membercard.ActivatePluginParam;
34-
import me.chanjar.weixin.mp.bean.membercard.ActivatePluginParamResult;
35-
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardActivatedMessage;
36-
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardCreateMessage;
37-
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUpdateMessage;
38-
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUpdateResult;
39-
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUserInfoResult;
4034
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
4135

4236
/**
@@ -284,6 +278,15 @@ public CardUpdateResult updateCardInfo(MemberCardUpdateRequest memberCardUpdateR
284278
return result;
285279
}
286280

281+
@Override
282+
public WxMpMemberCardActivateTempInfoResult getActivateTempInfo(String activateTicket) throws WxErrorException {
283+
JsonObject params = new JsonObject();
284+
params.addProperty("activate_ticket", activateTicket);
285+
String response = this.wxMpService.post(MEMBER_CARD_ACTIVATE_TEMP_INFO, GSON.toJson(params));
286+
WxMpMemberCardActivateTempInfoResult result = GSON.fromJson(response, WxMpMemberCardActivateTempInfoResult.class);
287+
return result;
288+
}
289+
287290
private static String truncateUrlPage(String strURL) {
288291
String strAllParam = null;
289292
String[] arrSplit;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package me.chanjar.weixin.mp.bean.membercard;
2+
3+
import lombok.Data;
4+
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
5+
6+
7+
/**
8+
* @author thomas
9+
* @date 2019/4/26
10+
*/
11+
@Data
12+
public class WxMpMemberCardActivateTempInfoResult {
13+
14+
private String errorCode;
15+
16+
private String errorMsg;
17+
18+
private MemberCardUserInfo userInfo;
19+
20+
public static WxMpMemberCardActivateTempInfoResult fromJson(String json) {
21+
return WxMpGsonBuilder.create().fromJson(json, WxMpMemberCardActivateTempInfoResult.class);
22+
}
23+
24+
}

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate;
99
import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary;
1010
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage;
11+
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardActivateTempInfoResult;
1112
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUpdateResult;
1213
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUserInfoResult;
1314
import me.chanjar.weixin.mp.bean.material.*;
@@ -58,6 +59,7 @@ public class WxMpGsonBuilder {
5859
INSTANCE.registerTypeAdapter(WxMpUserBlacklistGetResult.class, new WxUserBlacklistGetResultGsonAdapter());
5960
INSTANCE.registerTypeAdapter(WxMpMemberCardUserInfoResult.class, new WxMpMemberCardUserInfoResultGsonAdapter());
6061
INSTANCE.registerTypeAdapter(WxMpMemberCardUpdateResult.class, new WxMpMemberCardUpdateResultGsonAdapter());
62+
INSTANCE.registerTypeAdapter(WxMpMemberCardActivateTempInfoResult.class, new WxMpMemberCardActivateTempInfoResultGsonAdapter());
6163
}
6264

6365
public static Gson create() {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package me.chanjar.weixin.mp.util.json;
2+
3+
import com.google.gson.*;
4+
import me.chanjar.weixin.common.util.json.GsonHelper;
5+
import me.chanjar.weixin.mp.bean.membercard.MemberCardUserInfo;
6+
import me.chanjar.weixin.mp.bean.membercard.NameValues;
7+
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardActivateTempInfoResult;
8+
9+
import java.lang.reflect.Type;
10+
11+
/**
12+
* Json to WxMpMemberCardActivateTempInfoResultGsonAdapter 的转换适配器
13+
*
14+
* @author thomas(351402401 @ qq.com)
15+
* @version 2019/4/26
16+
*/
17+
public class WxMpMemberCardActivateTempInfoResultGsonAdapter implements JsonDeserializer<WxMpMemberCardActivateTempInfoResult> {
18+
19+
@Override
20+
public WxMpMemberCardActivateTempInfoResult deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
21+
WxMpMemberCardActivateTempInfoResult result = new WxMpMemberCardActivateTempInfoResult();
22+
23+
JsonObject jsonObject = jsonElement.getAsJsonObject();
24+
25+
result.setErrorCode(GsonHelper.getString(jsonObject, "errcode"));
26+
result.setErrorMsg(GsonHelper.getString(jsonObject, "errmsg"));
27+
28+
JsonObject userInfoJsonObject = jsonObject.getAsJsonObject("info");
29+
MemberCardUserInfo cardUserInfo = new MemberCardUserInfo();
30+
31+
JsonArray commonFieldListObj = userInfoJsonObject.getAsJsonArray("common_field_list");
32+
NameValues[] commonFieldListValues = new NameValues[commonFieldListObj.size()];
33+
for (int i = 0; i < commonFieldListObj.size(); i++) {
34+
JsonObject commonField = commonFieldListObj.get(i).getAsJsonObject();
35+
NameValues commonNameValues = new NameValues();
36+
commonNameValues.setName(GsonHelper.getString(commonField, "name"));
37+
commonNameValues.setValue(GsonHelper.getString(commonField, "value"));
38+
commonFieldListValues[i] = commonNameValues;
39+
}
40+
cardUserInfo.setCommonFieldList(commonFieldListValues);
41+
42+
JsonArray customFieldListObj = userInfoJsonObject.getAsJsonArray("custom_field_list");
43+
NameValues[] customFieldListValues = new NameValues[customFieldListObj.size()];
44+
for (int i = 0; i < customFieldListObj.size(); i++) {
45+
JsonObject customField = customFieldListObj.get(i).getAsJsonObject();
46+
NameValues customNameValues = new NameValues();
47+
customNameValues.setName(GsonHelper.getString(customField, "name"));
48+
customNameValues.setValue(GsonHelper.getString(customField, "value"));
49+
50+
JsonArray valueListArray = customField.getAsJsonArray("value_list");
51+
String[] valueList = new String[valueListArray.size()];
52+
for (int j = 0; j < valueListArray.size(); j++) {
53+
valueList[j] = valueListArray.get(j).getAsString();
54+
}
55+
customNameValues.setValueList(valueList);
56+
customFieldListValues[i] = customNameValues;
57+
}
58+
cardUserInfo.setCustomFieldList(customFieldListValues);
59+
60+
result.setUserInfo(cardUserInfo);
61+
62+
return result;
63+
}
64+
65+
}

weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpMemberCardServiceImplTest.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ public class WxMpMemberCardServiceImplTest {
2323

2424
@Inject
2525
protected WxMpService wxService;
26-
private String cardId = "p2iQk1uwOUYlzHm4s-UYdZnABW88";
27-
private String code = "435223630779";
28-
private String openId = "o2iQk1u5X-XIJkatmAK1Q8VVuS90";
26+
private String cardId = "p4p-v1bKn9tiQHxyO79aKmuTIZlQ";
27+
private String code = "224765120681";
28+
private String openId = "o4p-v1TIemEIpBSrSrTprkCaG6Xc";
2929

3030
@Test
3131
public void createMemberCard() throws Exception {
@@ -150,6 +150,15 @@ public void testGetActivateUrl() throws Exception {
150150
WxMpMemberCardService memberCardService = this.wxService.getMemberCardService();
151151
ActivatePluginParam response = memberCardService.getActivatePluginParam(cardId, "test");
152152
System.out.println(response);
153+
}
153154

155+
@Test
156+
public void testGetActivateTempInfo() throws Exception {
157+
String activateTicket = "fDZv9eMQAFfrNr3XBoqhb8eUX67DFb6h8yXDelGSMDLfg2OAIGQcU7mEKecnWZBK%2B%2Bvm%2FtZxZJrbRkdJB%2FUmpVoJkEsbeH%2BOefcntAsYDKA%3D";
158+
WxMpMemberCardService memberCardService = this.wxService.getMemberCardService();
159+
WxMpMemberCardActivateTempInfoResult result = memberCardService.getActivateTempInfo(activateTicket);
160+
assertNotNull(result);
161+
System.out.println(result);
154162
}
163+
155164
}

0 commit comments

Comments
 (0)