| @@ -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.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.bean.membercard.*; | |||||
| /** | /** | ||||
| * 会员卡相关接口. | * 会员卡相关接口. | ||||
| @@ -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 code = "435223630779"; | |||||
| private String openId = "o2iQk1u5X-XIJkatmAK1Q8VVuS90"; | |||||
| private String cardId = "p4p-v1bKn9tiQHxyO79aKmuTIZlQ"; | |||||
| private String code = "224765120681"; | |||||
| 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); | |||||
| } | } | ||||
| } | } | ||||