diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/AppUserServiceImpl.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/AppUserServiceImpl.java index 09ccfd015..c1b39f271 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/AppUserServiceImpl.java +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/service/impl/AppUserServiceImpl.java @@ -793,20 +793,7 @@ public class AppUserServiceImpl implements AppUserService { return new Result().error(verifyResult.getMsg()); } String userState = verifyResult.getData(); - /** - * 代码说明: - * 小程序端用户完善信息界面,提交数据前会调用{@link com.elink.esua.epdc.controller.ApiAppUserController#checkWxUnionId(TokenDto)} - * 获取用户是否已绑定了微信unionId - * 如果用户保存过unionId,前端不会再上送encryptedData,wxCode,iv这三个参数。 - */ - if (StringUtils.isNotBlank(infoDto.getWxCode())) { - String sessionKey = this.getUserSessionKey(infoDto.getWxCode()); - WxMaUserInfo wxMaUserInfo = wxMaServiceUtils.normalWxMaService().getUserService().getUserInfo(sessionKey, infoDto.getEncryptedData(), infoDto.getIv()); - if (StringUtils.isBlank(wxMaUserInfo.getUnionId())) { - return new Result().error("解析微信开放平台ID失败"); - } - userDto.setWxUnionId(wxMaUserInfo.getUnionId()); - } + userDto.setWxUnionId(getWxUnionId(infoDto.getWxCode(), infoDto.getIv(), infoDto.getEncryptedData())); UserGridRelationDTO userGrid = this.packageUserGridRelationInfo(infoDto.getGridId()); EpdcCompleteAppUserDTO completeAppUserDto = ConvertUtils.sourceToTarget(userDto, EpdcCompleteAppUserDTO.class); @@ -851,6 +838,32 @@ public class AppUserServiceImpl implements AppUserService { return new Result().ok(authorizationDto); } + /** + * 解析微信用户unionid + *

代码说明: + * 小程序端用户完善信息界面,提交数据前会调用{@link com.elink.esua.epdc.controller.ApiAppUserController#checkWxUnionId(TokenDto)} + * 获取用户是否已绑定了微信unionId + * 如果用户保存过unionId,前端不会再上送encryptedData,wxCode,iv这三个参数。

+ * + * @param wxCode + * @param iv + * @param encryptedData + * @return java.lang.String + * @author work@yujt.net.cn + * @date 2020/2/28 14:51 + */ + private String getWxUnionId(String wxCode, String iv, String encryptedData) { + if (StringUtils.isBlank(wxCode) || StringUtils.isBlank(iv) || StringUtils.isBlank(encryptedData)) { + return null; + } + String sessionKey = this.getUserSessionKey(wxCode); + WxMaUserInfo wxMaUserInfo = wxMaServiceUtils.normalWxMaService().getUserService().getUserInfo(sessionKey, encryptedData, iv); + if (null == wxMaUserInfo || StringUtils.isBlank(wxMaUserInfo.getUnionId())) { + throw new RenException("解析微信数据失败,请刷新后重试"); + } + return wxMaUserInfo.getUnionId(); + } + @Override public Result prepareCompleteUserInfo(TokenDto tokenDto) { @@ -1013,7 +1026,10 @@ public class AppUserServiceImpl implements AppUserService { } } catch (WxErrorException e) { e.printStackTrace(); - throw new RenException("微信编码异常,请刷新页面后重试"); + if (e.getError().getErrorCode() == 40163) { + throw new RenException("禁止重复提交,请刷新页面后重试"); + } + throw new RenException(e.getError().getErrorMsg()); } return null; }