mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-10-30 01:58:23 +08:00
#1025 会员卡模块新增跳转型会员卡用户提交资料的信息参数解析
This commit is contained in:
@ -6,12 +6,7 @@ import me.chanjar.weixin.mp.bean.card.MemberCardActivateUserFormRequest;
|
|||||||
import me.chanjar.weixin.mp.bean.card.MemberCardActivateUserFormResult;
|
import me.chanjar.weixin.mp.bean.card.MemberCardActivateUserFormResult;
|
||||||
import me.chanjar.weixin.mp.bean.card.MemberCardUpdateRequest;
|
import me.chanjar.weixin.mp.bean.card.MemberCardUpdateRequest;
|
||||||
import me.chanjar.weixin.mp.bean.card.WxMpCardCreateResult;
|
import me.chanjar.weixin.mp.bean.card.WxMpCardCreateResult;
|
||||||
import me.chanjar.weixin.mp.bean.membercard.ActivatePluginParam;
|
import me.chanjar.weixin.mp.bean.membercard.*;
|
||||||
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardActivatedMessage;
|
|
||||||
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardCreateMessage;
|
|
||||||
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUpdateMessage;
|
|
||||||
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUpdateResult;
|
|
||||||
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUserInfoResult;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会员卡相关接口.
|
* 会员卡相关接口.
|
||||||
@ -41,19 +36,33 @@ public interface WxMpMemberCardService {
|
|||||||
*/
|
*/
|
||||||
String MEMBER_CARD_UPDATE = "https://api.weixin.qq.com/card/update";
|
String MEMBER_CARD_UPDATE = "https://api.weixin.qq.com/card/update";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 跳转型会员卡开卡字段,获取用户提交资料(wx_activate=true情况调用),开发者根据activate_ticket获取到用户填写的信息
|
||||||
|
*/
|
||||||
|
String MEMBER_CARD_ACTIVATE_TEMP_INFO = "https://api.weixin.qq.com/card/membercard/activatetempinfo/get";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到WxMpService.
|
* 得到WxMpService.
|
||||||
|
*
|
||||||
|
* @return WxMpService
|
||||||
*/
|
*/
|
||||||
WxMpService getWxMpService();
|
WxMpService getWxMpService();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会员卡创建接口.
|
* 会员卡创建接口.
|
||||||
|
*
|
||||||
|
* @param createJson 会员卡json字符串
|
||||||
|
* @return 返回json字符串
|
||||||
|
* @throws WxErrorException 接口调用失败抛出的异常
|
||||||
*/
|
*/
|
||||||
WxMpCardCreateResult createMemberCard(String createJson) throws WxErrorException;
|
WxMpCardCreateResult createMemberCard(String createJson) throws WxErrorException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 会员卡创建接口.
|
* 会员卡创建接口
|
||||||
|
*
|
||||||
|
* @param createMessageMessage 会员卡创建对象
|
||||||
|
* @return 会员卡信息的结果对象
|
||||||
|
* @throws WxErrorException 接口调用失败抛出的异常
|
||||||
*/
|
*/
|
||||||
WxMpCardCreateResult createMemberCard(WxMpMemberCardCreateMessage createMessageMessage) throws WxErrorException;
|
WxMpCardCreateResult createMemberCard(WxMpMemberCardCreateMessage createMessageMessage) throws WxErrorException;
|
||||||
|
|
||||||
@ -61,7 +70,7 @@ public interface WxMpMemberCardService {
|
|||||||
* 会员卡激活接口.
|
* 会员卡激活接口.
|
||||||
*
|
*
|
||||||
* @param activatedMessage 激活所需参数
|
* @param activatedMessage 激活所需参数
|
||||||
* @return 返回json字符串
|
* @return 会员卡激活后的json字符串
|
||||||
* @throws WxErrorException 接口调用失败抛出的异常
|
* @throws WxErrorException 接口调用失败抛出的异常
|
||||||
*/
|
*/
|
||||||
String activateMemberCard(WxMpMemberCardActivatedMessage activatedMessage) throws WxErrorException;
|
String activateMemberCard(WxMpMemberCardActivatedMessage activatedMessage) throws WxErrorException;
|
||||||
@ -91,16 +100,40 @@ public interface WxMpMemberCardService {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置会员卡激活的字段(会员卡设置:wx_activate=true 时需要).
|
* 设置会员卡激活的字段(会员卡设置:wx_activate=true 时需要).
|
||||||
|
*
|
||||||
|
* @param userFormRequest 会员卡激活字段对象
|
||||||
|
* @return 会员卡激活后结果对象
|
||||||
|
* @throws WxErrorException 接口调用失败抛出的异常
|
||||||
*/
|
*/
|
||||||
MemberCardActivateUserFormResult setActivateUserForm(MemberCardActivateUserFormRequest userFormRequest) throws WxErrorException;
|
MemberCardActivateUserFormResult setActivateUserForm(MemberCardActivateUserFormRequest userFormRequest) throws WxErrorException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取会员卡开卡插件参数(跳转型开卡组件需要参数).
|
* 获取会员卡开卡插件参数(跳转型开卡组件需要参数).
|
||||||
|
*
|
||||||
|
* @param cardId 会员卡的CardId,微信分配
|
||||||
|
* @param outStr 会员卡设置商户的渠道
|
||||||
|
* @return 会员卡开卡插件参数结果对象
|
||||||
|
* @throws WxErrorException 接口调用失败抛出的异常
|
||||||
*/
|
*/
|
||||||
ActivatePluginParam getActivatePluginParam(String cardId, String outStr) throws WxErrorException;
|
ActivatePluginParam getActivatePluginParam(String cardId, String outStr) throws WxErrorException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新会员卡信息.
|
* 更新会员卡信息.
|
||||||
|
*
|
||||||
|
* @param memberCardUpdateRequest 会员卡更新对象
|
||||||
|
* @return 会员卡更新后结果对象
|
||||||
|
* @throws WxErrorException 接口调用失败抛出的异常
|
||||||
*/
|
*/
|
||||||
CardUpdateResult updateCardInfo(MemberCardUpdateRequest memberCardUpdateRequest) throws WxErrorException;
|
CardUpdateResult updateCardInfo(MemberCardUpdateRequest memberCardUpdateRequest) throws WxErrorException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 解析跳转型开卡字段用户提交的资料
|
||||||
|
* 开发者在URL上截取ticket后须先进行urldecode
|
||||||
|
*
|
||||||
|
* @param activateTicket 用户提交的资料
|
||||||
|
* @return 开卡字段的会员信息对象
|
||||||
|
* @throws WxErrorException 接口调用失败抛出的异常
|
||||||
|
*/
|
||||||
|
WxMpMemberCardActivateTempInfoResult getActivateTempInfo(String activateTicket) throws WxErrorException;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import java.net.URLDecoder;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import me.chanjar.weixin.mp.bean.membercard.*;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
@ -30,13 +31,6 @@ import me.chanjar.weixin.mp.bean.card.WxMpCardCreateResult;
|
|||||||
import me.chanjar.weixin.mp.bean.card.enums.BusinessServiceType;
|
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.CardColor;
|
||||||
import me.chanjar.weixin.mp.bean.card.enums.DateInfoType;
|
import me.chanjar.weixin.mp.bean.card.enums.DateInfoType;
|
||||||
import me.chanjar.weixin.mp.bean.membercard.ActivatePluginParam;
|
|
||||||
import me.chanjar.weixin.mp.bean.membercard.ActivatePluginParamResult;
|
|
||||||
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardActivatedMessage;
|
|
||||||
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardCreateMessage;
|
|
||||||
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUpdateMessage;
|
|
||||||
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUpdateResult;
|
|
||||||
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUserInfoResult;
|
|
||||||
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
|
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -284,6 +278,15 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WxMpMemberCardActivateTempInfoResult getActivateTempInfo(String activateTicket) throws WxErrorException {
|
||||||
|
JsonObject params = new JsonObject();
|
||||||
|
params.addProperty("activate_ticket", activateTicket);
|
||||||
|
String response = this.wxMpService.post(MEMBER_CARD_ACTIVATE_TEMP_INFO, GSON.toJson(params));
|
||||||
|
WxMpMemberCardActivateTempInfoResult result = GSON.fromJson(response, WxMpMemberCardActivateTempInfoResult.class);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
private static String truncateUrlPage(String strURL) {
|
private static String truncateUrlPage(String strURL) {
|
||||||
String strAllParam = null;
|
String strAllParam = null;
|
||||||
String[] arrSplit;
|
String[] arrSplit;
|
||||||
|
|||||||
@ -0,0 +1,24 @@
|
|||||||
|
package me.chanjar.weixin.mp.bean.membercard;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author thomas
|
||||||
|
* @date 2019/4/26
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class WxMpMemberCardActivateTempInfoResult {
|
||||||
|
|
||||||
|
private String errorCode;
|
||||||
|
|
||||||
|
private String errorMsg;
|
||||||
|
|
||||||
|
private MemberCardUserInfo userInfo;
|
||||||
|
|
||||||
|
public static WxMpMemberCardActivateTempInfoResult fromJson(String json) {
|
||||||
|
return WxMpGsonBuilder.create().fromJson(json, WxMpMemberCardActivateTempInfoResult.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -8,6 +8,7 @@ import me.chanjar.weixin.mp.bean.card.WxMpCardResult;
|
|||||||
import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate;
|
import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate;
|
||||||
import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary;
|
import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary;
|
||||||
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage;
|
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage;
|
||||||
|
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardActivateTempInfoResult;
|
||||||
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUpdateResult;
|
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUpdateResult;
|
||||||
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUserInfoResult;
|
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardUserInfoResult;
|
||||||
import me.chanjar.weixin.mp.bean.material.*;
|
import me.chanjar.weixin.mp.bean.material.*;
|
||||||
@ -58,6 +59,7 @@ public class WxMpGsonBuilder {
|
|||||||
INSTANCE.registerTypeAdapter(WxMpUserBlacklistGetResult.class, new WxUserBlacklistGetResultGsonAdapter());
|
INSTANCE.registerTypeAdapter(WxMpUserBlacklistGetResult.class, new WxUserBlacklistGetResultGsonAdapter());
|
||||||
INSTANCE.registerTypeAdapter(WxMpMemberCardUserInfoResult.class, new WxMpMemberCardUserInfoResultGsonAdapter());
|
INSTANCE.registerTypeAdapter(WxMpMemberCardUserInfoResult.class, new WxMpMemberCardUserInfoResultGsonAdapter());
|
||||||
INSTANCE.registerTypeAdapter(WxMpMemberCardUpdateResult.class, new WxMpMemberCardUpdateResultGsonAdapter());
|
INSTANCE.registerTypeAdapter(WxMpMemberCardUpdateResult.class, new WxMpMemberCardUpdateResultGsonAdapter());
|
||||||
|
INSTANCE.registerTypeAdapter(WxMpMemberCardActivateTempInfoResult.class, new WxMpMemberCardActivateTempInfoResultGsonAdapter());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Gson create() {
|
public static Gson create() {
|
||||||
|
|||||||
@ -0,0 +1,65 @@
|
|||||||
|
package me.chanjar.weixin.mp.util.json;
|
||||||
|
|
||||||
|
import com.google.gson.*;
|
||||||
|
import me.chanjar.weixin.common.util.json.GsonHelper;
|
||||||
|
import me.chanjar.weixin.mp.bean.membercard.MemberCardUserInfo;
|
||||||
|
import me.chanjar.weixin.mp.bean.membercard.NameValues;
|
||||||
|
import me.chanjar.weixin.mp.bean.membercard.WxMpMemberCardActivateTempInfoResult;
|
||||||
|
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Json to WxMpMemberCardActivateTempInfoResultGsonAdapter 的转换适配器
|
||||||
|
*
|
||||||
|
* @author thomas(351402401 @ qq.com)
|
||||||
|
* @version 2019/4/26
|
||||||
|
*/
|
||||||
|
public class WxMpMemberCardActivateTempInfoResultGsonAdapter implements JsonDeserializer<WxMpMemberCardActivateTempInfoResult> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WxMpMemberCardActivateTempInfoResult deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
|
||||||
|
WxMpMemberCardActivateTempInfoResult result = new WxMpMemberCardActivateTempInfoResult();
|
||||||
|
|
||||||
|
JsonObject jsonObject = jsonElement.getAsJsonObject();
|
||||||
|
|
||||||
|
result.setErrorCode(GsonHelper.getString(jsonObject, "errcode"));
|
||||||
|
result.setErrorMsg(GsonHelper.getString(jsonObject, "errmsg"));
|
||||||
|
|
||||||
|
JsonObject userInfoJsonObject = jsonObject.getAsJsonObject("info");
|
||||||
|
MemberCardUserInfo cardUserInfo = new MemberCardUserInfo();
|
||||||
|
|
||||||
|
JsonArray commonFieldListObj = userInfoJsonObject.getAsJsonArray("common_field_list");
|
||||||
|
NameValues[] commonFieldListValues = new NameValues[commonFieldListObj.size()];
|
||||||
|
for (int i = 0; i < commonFieldListObj.size(); i++) {
|
||||||
|
JsonObject commonField = commonFieldListObj.get(i).getAsJsonObject();
|
||||||
|
NameValues commonNameValues = new NameValues();
|
||||||
|
commonNameValues.setName(GsonHelper.getString(commonField, "name"));
|
||||||
|
commonNameValues.setValue(GsonHelper.getString(commonField, "value"));
|
||||||
|
commonFieldListValues[i] = commonNameValues;
|
||||||
|
}
|
||||||
|
cardUserInfo.setCommonFieldList(commonFieldListValues);
|
||||||
|
|
||||||
|
JsonArray customFieldListObj = userInfoJsonObject.getAsJsonArray("custom_field_list");
|
||||||
|
NameValues[] customFieldListValues = new NameValues[customFieldListObj.size()];
|
||||||
|
for (int i = 0; i < customFieldListObj.size(); i++) {
|
||||||
|
JsonObject customField = customFieldListObj.get(i).getAsJsonObject();
|
||||||
|
NameValues customNameValues = new NameValues();
|
||||||
|
customNameValues.setName(GsonHelper.getString(customField, "name"));
|
||||||
|
customNameValues.setValue(GsonHelper.getString(customField, "value"));
|
||||||
|
|
||||||
|
JsonArray valueListArray = customField.getAsJsonArray("value_list");
|
||||||
|
String[] valueList = new String[valueListArray.size()];
|
||||||
|
for (int j = 0; j < valueListArray.size(); j++) {
|
||||||
|
valueList[j] = valueListArray.get(j).getAsString();
|
||||||
|
}
|
||||||
|
customNameValues.setValueList(valueList);
|
||||||
|
customFieldListValues[i] = customNameValues;
|
||||||
|
}
|
||||||
|
cardUserInfo.setCustomFieldList(customFieldListValues);
|
||||||
|
|
||||||
|
result.setUserInfo(cardUserInfo);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -23,9 +23,9 @@ public class WxMpMemberCardServiceImplTest {
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
protected WxMpService wxService;
|
protected WxMpService wxService;
|
||||||
private String cardId = "p2iQk1uwOUYlzHm4s-UYdZnABW88";
|
private String cardId = "p4p-v1bKn9tiQHxyO79aKmuTIZlQ";
|
||||||
private String code = "435223630779";
|
private String code = "224765120681";
|
||||||
private String openId = "o2iQk1u5X-XIJkatmAK1Q8VVuS90";
|
private String openId = "o4p-v1TIemEIpBSrSrTprkCaG6Xc";
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void createMemberCard() throws Exception {
|
public void createMemberCard() throws Exception {
|
||||||
@ -150,6 +150,15 @@ public class WxMpMemberCardServiceImplTest {
|
|||||||
WxMpMemberCardService memberCardService = this.wxService.getMemberCardService();
|
WxMpMemberCardService memberCardService = this.wxService.getMemberCardService();
|
||||||
ActivatePluginParam response = memberCardService.getActivatePluginParam(cardId, "test");
|
ActivatePluginParam response = memberCardService.getActivatePluginParam(cardId, "test");
|
||||||
System.out.println(response);
|
System.out.println(response);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetActivateTempInfo() throws Exception {
|
||||||
|
String activateTicket = "fDZv9eMQAFfrNr3XBoqhb8eUX67DFb6h8yXDelGSMDLfg2OAIGQcU7mEKecnWZBK%2B%2Bvm%2FtZxZJrbRkdJB%2FUmpVoJkEsbeH%2BOefcntAsYDKA%3D";
|
||||||
|
WxMpMemberCardService memberCardService = this.wxService.getMemberCardService();
|
||||||
|
WxMpMemberCardActivateTempInfoResult result = memberCardService.getActivateTempInfo(activateTicket);
|
||||||
|
assertNotNull(result);
|
||||||
|
System.out.println(result);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user