mirror of
				https://gitee.com/binary/weixin-java-tools.git
				synced 2025-11-01 03:25:35 +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
	 thomas2050
					thomas2050