|  |  | @@ -5,20 +5,28 @@ import java.net.URLDecoder; | 
		
	
		
			
			|  |  |  | import java.util.HashMap; | 
		
	
		
			
			|  |  |  | import java.util.Map; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | import me.chanjar.weixin.mp.bean.card.*; | 
		
	
		
			
			|  |  |  | import org.apache.commons.lang3.StringUtils; | 
		
	
		
			
			|  |  |  | import org.slf4j.Logger; | 
		
	
		
			
			|  |  |  | import org.slf4j.LoggerFactory; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | import com.google.gson.Gson; | 
		
	
		
			
			|  |  |  | import com.google.gson.JsonElement; | 
		
	
		
			
			|  |  |  | import com.google.gson.JsonObject; | 
		
	
		
			
			|  |  |  | import com.google.gson.JsonParser; | 
		
	
		
			
			|  |  |  | import com.google.gson.reflect.TypeToken; | 
		
	
		
			
			|  |  |  | import lombok.extern.slf4j.Slf4j; | 
		
	
		
			
			|  |  |  | import me.chanjar.weixin.common.error.WxErrorException; | 
		
	
		
			
			|  |  |  | import me.chanjar.weixin.common.util.json.WxGsonBuilder; | 
		
	
		
			
			|  |  |  | import me.chanjar.weixin.mp.api.WxMpMemberCardService; | 
		
	
		
			
			|  |  |  | import me.chanjar.weixin.mp.api.WxMpService; | 
		
	
		
			
			|  |  |  | import me.chanjar.weixin.mp.bean.card.AdvancedInfo; | 
		
	
		
			
			|  |  |  | import me.chanjar.weixin.mp.bean.card.BaseInfo; | 
		
	
		
			
			|  |  |  | import me.chanjar.weixin.mp.bean.card.CardUpdateResult; | 
		
	
		
			
			|  |  |  | import me.chanjar.weixin.mp.bean.card.DateInfo; | 
		
	
		
			
			|  |  |  | import me.chanjar.weixin.mp.bean.card.MemberCard; | 
		
	
		
			
			|  |  |  | import me.chanjar.weixin.mp.bean.card.MemberCardActivateUserFormRequest; | 
		
	
		
			
			|  |  |  | import me.chanjar.weixin.mp.bean.card.MemberCardActivateUserFormResult; | 
		
	
		
			
			|  |  |  | import me.chanjar.weixin.mp.bean.card.MemberCardCreateRequest; | 
		
	
		
			
			|  |  |  | import me.chanjar.weixin.mp.bean.card.MemberCardUpdateRequest; | 
		
	
		
			
			|  |  |  | 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.CardColor; | 
		
	
		
			
			|  |  |  | import me.chanjar.weixin.mp.bean.card.enums.DateInfoType; | 
		
	
	
		
			
				|  |  | @@ -37,10 +45,8 @@ import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | 
		
	
		
			
			|  |  |  | * @author YuJian(mgcnrx11 @ gmail.com) | 
		
	
		
			
			|  |  |  | * @version 2017/7/8 | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | @Slf4j | 
		
	
		
			
			|  |  |  | public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | private final Logger log = LoggerFactory.getLogger(WxMpMemberCardServiceImpl.class); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | private WxMpService wxMpService; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | private static final Gson GSON = WxMpGsonBuilder.create(); | 
		
	
	
		
			
				|  |  | @@ -49,50 +55,37 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { | 
		
	
		
			
			|  |  |  | this.wxMpService = wxMpService; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 得到WxMpService | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public WxMpService getWxMpService() { | 
		
	
		
			
			|  |  |  | return this.wxMpService; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 会员卡创建接口 | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param createJson 创建json | 
		
	
		
			
			|  |  |  | * @return 调用返回的JSON字符串。 | 
		
	
		
			
			|  |  |  | * @throws WxErrorException 接口调用失败抛出的异常 | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public WxMpCardCreateResult createMemberCard(String createJson) throws WxErrorException { | 
		
	
		
			
			|  |  |  | WxMpMemberCardCreateMessage createMessage = WxGsonBuilder.create().fromJson(createJson, WxMpMemberCardCreateMessage.class); | 
		
	
		
			
			|  |  |  | WxMpMemberCardCreateMessage createMessage = WxGsonBuilder.create() | 
		
	
		
			
			|  |  |  | .fromJson(createJson, WxMpMemberCardCreateMessage.class); | 
		
	
		
			
			|  |  |  | return createMemberCard(createMessage); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 会员卡创建接口 | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param createMessageMessage 创建所需参数 | 
		
	
		
			
			|  |  |  | * @return WxMpCardCreateResult。 | 
		
	
		
			
			|  |  |  | * @throws WxErrorException 接口调用失败抛出的异常 | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public WxMpCardCreateResult createMemberCard(WxMpMemberCardCreateMessage createMessageMessage) throws WxErrorException { | 
		
	
		
			
			|  |  |  | public WxMpCardCreateResult createMemberCard(WxMpMemberCardCreateMessage createMessageMessage) | 
		
	
		
			
			|  |  |  | throws WxErrorException { | 
		
	
		
			
			|  |  |  | //校验请求对象合法性 | 
		
	
		
			
			|  |  |  | WxMpCardCreateResult validResult = validCheck(createMessageMessage); | 
		
	
		
			
			|  |  |  | if (!validResult.isSuccess()) | 
		
	
		
			
			|  |  |  | if (!validResult.isSuccess()) { | 
		
	
		
			
			|  |  |  | return validResult; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String response = this.wxMpService.post(MEMBER_CARD_CREAET, GSON.toJson(createMessageMessage)); | 
		
	
		
			
			|  |  |  | return WxMpCardCreateResult.fromJson(response); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | private WxMpCardCreateResult validCheck(WxMpMemberCardCreateMessage createMessageMessage) throws WxErrorException { | 
		
	
		
			
			|  |  |  | private WxMpCardCreateResult validCheck(WxMpMemberCardCreateMessage createMessageMessage) { | 
		
	
		
			
			|  |  |  | if (createMessageMessage == null) { | 
		
	
		
			
			|  |  |  | return WxMpCardCreateResult.failure("对象不能为空"); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | MemberCardCreateRequest cardCreateRequest = createMessageMessage.getCardCreateRequest(); | 
		
	
		
			
			|  |  |  | if (createMessageMessage == null) { | 
		
	
		
			
			|  |  |  | if (cardCreateRequest == null) { | 
		
	
		
			
			|  |  |  | return WxMpCardCreateResult.failure("会员卡对象不能为空"); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | String cardType = cardCreateRequest.getCardType(); | 
		
	
	
		
			
				|  |  | @@ -105,17 +98,11 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { | 
		
	
		
			
			|  |  |  | return WxMpCardCreateResult.failure("会员卡特权说明不能为空:prerogative"); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | //卡片激活规则 | 
		
	
		
			
			|  |  |  | if (!memberCard.isAutoActivate() && !memberCard.isWxActivate() && StringUtils.isEmpty(memberCard.getActivateUrl())) { | 
		
	
		
			
			|  |  |  | if (!memberCard.isAutoActivate() && !memberCard.isWxActivate() | 
		
	
		
			
			|  |  |  | && StringUtils.isEmpty(memberCard.getActivateUrl())) { | 
		
	
		
			
			|  |  |  | return WxMpCardCreateResult.failure("会员卡激活方式为接口激活,activate_url不能为空"); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | //积分支持 | 
		
	
		
			
			|  |  |  | //    if(memberCard.isSupplyBonus() && StringUtils.isEmpty(memberCard.getBonusUrl())){ | 
		
	
		
			
			|  |  |  | //      return WxMpCardCreateResult.failure("会员卡支持积分,bonus_url不能为空"); | 
		
	
		
			
			|  |  |  | //    } | 
		
	
		
			
			|  |  |  | //    if(memberCard.isSupplyBonus() && memberCard.getBonusRule() == null){ | 
		
	
		
			
			|  |  |  | //      return WxMpCardCreateResult.failure("会员卡支持积分,bonus_rule不能为空"); | 
		
	
		
			
			|  |  |  | //    } | 
		
	
		
			
			|  |  |  | BaseInfo baseInfo = memberCard.getBaseInfo(); | 
		
	
		
			
			|  |  |  | if (baseInfo == null) { | 
		
	
		
			
			|  |  |  | return WxMpCardCreateResult.failure("会员卡基本信息对象base_info不能为空"); | 
		
	
	
		
			
				|  |  | @@ -188,16 +175,24 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | //固定时长 | 
		
	
		
			
			|  |  |  | if (dateInfoType == DateInfoType.DATE_TYPE_FIX_TERM && (dateInfo.getFixedTerm() == null || dateInfo.getFixedBeginTerm() == null)) { | 
		
	
		
			
			|  |  |  | return WxMpCardCreateResult.failure("会员卡基本信息的使用日期为:" + dateInfoType.getDescription() + ",fixedTerm和fixedBeginTerm不能为空"); | 
		
	
		
			
			|  |  |  | if (dateInfoType == DateInfoType.DATE_TYPE_FIX_TERM | 
		
	
		
			
			|  |  |  | && (dateInfo.getFixedTerm() == null || dateInfo.getFixedBeginTerm() == null)) { | 
		
	
		
			
			|  |  |  | return WxMpCardCreateResult.failure(String.format("会员卡基本信息的使用日期为:%s,fixedTerm和fixedBeginTerm不能为空", | 
		
	
		
			
			|  |  |  | dateInfoType.getDescription())); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | //固定期限 | 
		
	
		
			
			|  |  |  | if (dateInfoType == DateInfoType.DATE_TYPE_FIX_TIME_RANGE && (dateInfo.getBeginTimestamp() == null || dateInfo.getEndTimestamp() == null)) { | 
		
	
		
			
			|  |  |  | return WxMpCardCreateResult.failure("会员卡基本信息的使用日期为:" + dateInfoType.getDescription() + ",beginTimestamp 和 endTimestamp 不能为空"); | 
		
	
		
			
			|  |  |  | if (dateInfoType == DateInfoType.DATE_TYPE_FIX_TIME_RANGE | 
		
	
		
			
			|  |  |  | && (dateInfo.getBeginTimestamp() == null || dateInfo.getEndTimestamp() == null)) { | 
		
	
		
			
			|  |  |  | return WxMpCardCreateResult.failure(String.format("会员卡基本信息的使用日期为:%s,beginTimestamp 和 endTimestamp 不能为空", | 
		
	
		
			
			|  |  |  | dateInfoType.getDescription())); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | if (dateInfoType == DateInfoType.DATE_TYPE_FIX_TIME_RANGE && (dateInfo.getBeginTimestamp() < System.currentTimeMillis() || dateInfo.getEndTimestamp() < System.currentTimeMillis() || dateInfo.getBeginTimestamp() > dateInfo.getEndTimestamp())) { | 
		
	
		
			
			|  |  |  | return WxMpCardCreateResult.failure("会员卡基本信息的使用日期为:" + dateInfoType.getDescription() + ",beginTimestamp和endTimestamp的值不合法,请检查"); | 
		
	
		
			
			|  |  |  | if (dateInfoType == DateInfoType.DATE_TYPE_FIX_TIME_RANGE | 
		
	
		
			
			|  |  |  | && (dateInfo.getBeginTimestamp() * 1000 < System.currentTimeMillis() | 
		
	
		
			
			|  |  |  | || dateInfo.getEndTimestamp() * 1000 < System.currentTimeMillis() | 
		
	
		
			
			|  |  |  | || dateInfo.getBeginTimestamp() > dateInfo.getEndTimestamp())) { | 
		
	
		
			
			|  |  |  | return WxMpCardCreateResult.failure(String.format("会员卡基本信息的使用日期为:%s,beginTimestamp和endTimestamp的值不合法,请检查", | 
		
	
		
			
			|  |  |  | dateInfoType.getDescription())); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (!baseInfo.isUseAllLocations() && StringUtils.isBlank(baseInfo.getLocationIdList())) { | 
		
	
	
		
			
				|  |  | @@ -209,9 +204,8 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { | 
		
	
		
			
			|  |  |  | if (advancedInfo != null) { | 
		
	
		
			
			|  |  |  | if (advancedInfo.getBusinessServiceList() != null) { | 
		
	
		
			
			|  |  |  | for (String bs : advancedInfo.getBusinessServiceList()) { | 
		
	
		
			
			|  |  |  | BusinessServiceType businessServiceType = null; | 
		
	
		
			
			|  |  |  | try { | 
		
	
		
			
			|  |  |  | businessServiceType = BusinessServiceType.valueOf(bs); | 
		
	
		
			
			|  |  |  | BusinessServiceType.valueOf(bs); | 
		
	
		
			
			|  |  |  | } catch (IllegalArgumentException ex) { | 
		
	
		
			
			|  |  |  | return WxMpCardCreateResult.failure("会员卡高级信息的商户服务:" + bs + " 不合法"); | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | @@ -222,26 +216,11 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { | 
		
	
		
			
			|  |  |  | return WxMpCardCreateResult.success(); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 会员卡激活接口 | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param activatedMessage 激活所需参数 | 
		
	
		
			
			|  |  |  | * @return WxMpCardCreateResult。 | 
		
	
		
			
			|  |  |  | * @throws WxErrorException 接口调用失败抛出的异常 | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public String activateMemberCard(WxMpMemberCardActivatedMessage activatedMessage) throws WxErrorException { | 
		
	
		
			
			|  |  |  | return this.wxMpService.post(MEMBER_CARD_ACTIVATE, GSON.toJson(activatedMessage)); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 拉取会员信息接口 | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param cardId 会员卡的CardId,微信分配 | 
		
	
		
			
			|  |  |  | * @param code   领取会员的会员卡Code | 
		
	
		
			
			|  |  |  | * @return 会员信息的结果对象 | 
		
	
		
			
			|  |  |  | * @throws WxErrorException 接口调用失败抛出的异常 | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public WxMpMemberCardUserInfoResult getUserInfo(String cardId, String code) throws WxErrorException { | 
		
	
		
			
			|  |  |  | JsonObject jsonObject = new JsonObject(); | 
		
	
	
		
			
				|  |  | @@ -256,17 +235,6 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { | 
		
	
		
			
			|  |  |  | }.getType()); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 当会员持卡消费后,支持开发者调用该接口更新会员信息。会员卡交易后的每次信息变更需通过该接口通知微信,便于后续消息通知及其他扩展功能。 | 
		
	
		
			
			|  |  |  | * <p> | 
		
	
		
			
			|  |  |  | * 1.开发者可以同时传入add_bonus和bonus解决由于同步失败带来的幂等性问题。同时传入add_bonus和bonus时 | 
		
	
		
			
			|  |  |  | * add_bonus作为积分变动消息中的变量值,而bonus作为卡面上的总积分额度显示。余额变动同理。 | 
		
	
		
			
			|  |  |  | * 2.开发者可以传入is_notify_bonus控制特殊的积分对账变动不发送消息,余额变动同理。 | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param updateUserMessage 更新会员信息所需字段消息 | 
		
	
		
			
			|  |  |  | * @return 调用返回的JSON字符串。 | 
		
	
		
			
			|  |  |  | * @throws WxErrorException 接口调用失败抛出的异常 | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public WxMpMemberCardUpdateResult updateUserMemberCard(WxMpMemberCardUpdateMessage updateUserMessage) | 
		
	
		
			
			|  |  |  | throws WxErrorException { | 
		
	
	
		
			
				|  |  | @@ -279,26 +247,13 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { | 
		
	
		
			
			|  |  |  | }.getType()); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 设置会员卡激活的字段(会员卡设置:wx_activate=true 时需要) | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param userFormRequest | 
		
	
		
			
			|  |  |  | * @return | 
		
	
		
			
			|  |  |  | * @throws WxErrorException | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public MemberCardActivateUserFormResult setActivateUserForm(MemberCardActivateUserFormRequest userFormRequest) throws WxErrorException { | 
		
	
		
			
			|  |  |  | String responseContent = this.getWxMpService().post(MEMBER_CARD_ACTIVATEUSERFORM, GSON.toJson(userFormRequest)); | 
		
	
		
			
			|  |  |  | return MemberCardActivateUserFormResult.fromJson(responseContent); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 获取会员卡开卡插件参数(跳转型开卡组件需要参数) | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param outStr | 
		
	
		
			
			|  |  |  | * @return | 
		
	
		
			
			|  |  |  | * @throws WxErrorException | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public ActivatePluginParam getActivatePluginParam(String cardId, String outStr) throws WxErrorException { | 
		
	
		
			
			|  |  |  | JsonObject params = new JsonObject(); | 
		
	
		
			
			|  |  |  | params.addProperty("card_id", cardId); | 
		
	
	
		
			
				|  |  | @@ -313,7 +268,7 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { | 
		
	
		
			
			|  |  |  | ActivatePluginParam activatePluginParam = new ActivatePluginParam(); | 
		
	
		
			
			|  |  |  | activatePluginParam.setEncryptCardId(resultMap.get("encrypt_card_id")); | 
		
	
		
			
			|  |  |  | activatePluginParam.setOuterStr(resultMap.get("outer_str")); | 
		
	
		
			
			|  |  |  | activatePluginParam.setBiz(resultMap.get("biz")+"=="); | 
		
	
		
			
			|  |  |  | activatePluginParam.setBiz(resultMap.get("biz") + "=="); | 
		
	
		
			
			|  |  |  | return activatePluginParam; | 
		
	
		
			
			|  |  |  | } catch (UnsupportedEncodingException e) { | 
		
	
		
			
			|  |  |  | e.printStackTrace(); | 
		
	
	
		
			
				|  |  | @@ -322,13 +277,6 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { | 
		
	
		
			
			|  |  |  | return null; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 更新会员卡信息 | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param memberCardUpdateRequest | 
		
	
		
			
			|  |  |  | * @return | 
		
	
		
			
			|  |  |  | * @throws WxErrorException | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | @Override | 
		
	
		
			
			|  |  |  | public CardUpdateResult updateCardInfo(MemberCardUpdateRequest memberCardUpdateRequest) throws WxErrorException { | 
		
	
		
			
			|  |  |  | String response = this.wxMpService.post(MEMBER_CARD_UPDATE, GSON.toJson(memberCardUpdateRequest)); | 
		
	
	
		
			
				|  |  | @@ -336,15 +284,9 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { | 
		
	
		
			
			|  |  |  | return result; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 去掉url中的路径,留下请求参数部分 | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param strURL url地址 | 
		
	
		
			
			|  |  |  | * @return url请求参数部分 | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | private static String truncateUrlPage(String strURL) { | 
		
	
		
			
			|  |  |  | String strAllParam = null; | 
		
	
		
			
			|  |  |  | String[] arrSplit = null; | 
		
	
		
			
			|  |  |  | String[] arrSplit; | 
		
	
		
			
			|  |  |  | arrSplit = strURL.split("[?]"); | 
		
	
		
			
			|  |  |  | if (strURL.length() > 1) { | 
		
	
		
			
			|  |  |  | if (arrSplit.length > 1) { | 
		
	
	
		
			
				|  |  | @@ -357,25 +299,18 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { | 
		
	
		
			
			|  |  |  | return strAllParam; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | /** | 
		
	
		
			
			|  |  |  | * 解析出url参数中的键值对 | 
		
	
		
			
			|  |  |  | * 如 "index.jsp?Action=del&id=123",解析出Action:del,id:123存入map中 | 
		
	
		
			
			|  |  |  | * | 
		
	
		
			
			|  |  |  | * @param URL url地址 | 
		
	
		
			
			|  |  |  | * @return url请求参数部分 | 
		
	
		
			
			|  |  |  | */ | 
		
	
		
			
			|  |  |  | public static Map<String, String> parseRequestUrl(String URL) { | 
		
	
		
			
			|  |  |  | Map<String, String> mapRequest = new HashMap<String, String>(); | 
		
	
		
			
			|  |  |  | public static Map<String, String> parseRequestUrl(String url) { | 
		
	
		
			
			|  |  |  | Map<String, String> mapRequest = new HashMap<>(16); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String[] arrSplit = null; | 
		
	
		
			
			|  |  |  | String[] arrSplit; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | String strUrlParam = truncateUrlPage(URL); | 
		
	
		
			
			|  |  |  | String strUrlParam = truncateUrlPage(url); | 
		
	
		
			
			|  |  |  | if (strUrlParam == null) { | 
		
	
		
			
			|  |  |  | return mapRequest; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | arrSplit = strUrlParam.split("[&]"); | 
		
	
		
			
			|  |  |  | for (String strSplit : arrSplit) { | 
		
	
		
			
			|  |  |  | String[] arrSplitEqual = null; | 
		
	
		
			
			|  |  |  | String[] arrSplitEqual; | 
		
	
		
			
			|  |  |  | arrSplitEqual = strSplit.split("[=]"); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | //解析出键值 | 
		
	
	
		
			
				|  |  | @@ -384,7 +319,7 @@ public class WxMpMemberCardServiceImpl implements WxMpMemberCardService { | 
		
	
		
			
			|  |  |  | mapRequest.put(arrSplitEqual[0], arrSplitEqual[1]); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | } else { | 
		
	
		
			
			|  |  |  | if (arrSplitEqual[0] != "") { | 
		
	
		
			
			|  |  |  | if (!"".equals(arrSplitEqual[0])) { | 
		
	
		
			
			|  |  |  | //只有参数没有值,不加入 | 
		
	
		
			
			|  |  |  | mapRequest.put(arrSplitEqual[0], ""); | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | 
 |