diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/AgentDevController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/AgentDevController.java index 16a555ca2..09a69a051 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/AgentDevController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/AgentDevController.java @@ -2,6 +2,7 @@ package com.jsowell.api.uniapp; import com.alibaba.fastjson2.JSON; import com.google.common.collect.ImmutableMap; +import com.jsowell.common.UserAgentUtils; import com.jsowell.common.annotation.Anonymous; import com.jsowell.common.core.controller.BaseController; import com.jsowell.common.response.RestApiResponse; @@ -15,6 +16,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; import java.util.List; /** @@ -305,10 +307,12 @@ public class AgentDevController extends BaseController { * @return */ @PostMapping("/wechatLogin") - public RestApiResponse wechatLogin(@RequestBody AgentWechatLoginDTO dto) { + public RestApiResponse wechatLogin(HttpServletRequest request, @RequestBody AgentWechatLoginDTO dto) { logger.info("第三方平台微信一键登录 params:{}", JSON.toJSONString(dto)); RestApiResponse response = null; try { + // 设置请求来源 + dto.setRequestSource(UserAgentUtils.determineRequestSource(request)); String memberToken = agentDevService.wechatLogin(dto); response = new RestApiResponse<>(ImmutableMap.of("memberToken", memberToken)); } catch (Exception e) { diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/MemberController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/MemberController.java index 65bba0387..5942111f3 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/MemberController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/MemberController.java @@ -3,6 +3,7 @@ package com.jsowell.api.uniapp; import com.alibaba.fastjson2.JSON; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; +import com.jsowell.common.UserAgentUtils; import com.jsowell.common.annotation.Anonymous; import com.jsowell.common.core.controller.BaseController; import com.jsowell.common.core.page.PageResponse; @@ -87,12 +88,15 @@ public class MemberController extends BaseController { if (StringUtils.isNotBlank(appId)) { String firstLevelMerchantId = pileMerchantInfoService.getFirstLevelMerchantIdByWxAppId(appId); if (StringUtils.isNotBlank(firstLevelMerchantId)) { - dto.setMerchantId(firstLevelMerchantId); + dto.setFirstLevelMerchantId(firstLevelMerchantId); } } + // 设置请求来源 + dto.setRequestSource(UserAgentUtils.determineRequestSource(request)); + // 执行登录(查这个手机号在后台有没有数据,如果没有就静默注册) - String memberToken = memberService.memberRegisterAndLogin(dto); + String memberToken = memberService.memberRegisterAndLoginBySMS(dto); // 返回前端成功 Map map = Maps.newHashMap(); @@ -118,8 +122,11 @@ public class MemberController extends BaseController { RestApiResponse response = null; try { // 获取小程序appid - String appId = request.getHeader("appId"); - dto.setAppId(appId); + dto.setAppId(request.getHeader("appId")); + + // 设置请求来源 + dto.setRequestSource(UserAgentUtils.determineRequestSource(request)); + String memberToken = memberService.wechatLogin(dto); response = new RestApiResponse<>(ImmutableMap.of("memberToken", memberToken)); } catch (Exception e) { @@ -139,8 +146,11 @@ public class MemberController extends BaseController { RestApiResponse response = null; try { // 获取小程序appid - String appId = request.getHeader("appId"); - dto.setAppId(appId); + dto.setAppId(request.getHeader("appId")); + + // 设置请求来源 + dto.setRequestSource(UserAgentUtils.determineRequestSource(request)); + String memberToken = memberService.alipayLogin(dto); response = new RestApiResponse<>(ImmutableMap.of("memberToken", memberToken)); } catch (Exception e) { diff --git a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/OrderController.java b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/OrderController.java index 910f6422a..240c1a079 100644 --- a/jsowell-admin/src/main/java/com/jsowell/api/uniapp/OrderController.java +++ b/jsowell-admin/src/main/java/com/jsowell/api/uniapp/OrderController.java @@ -70,10 +70,10 @@ public class OrderController extends BaseController { String orderCode = orderService.generateOrderV2(dto); response = new RestApiResponse<>(ImmutableMap.of("orderCode", orderCode)); } catch (BusinessException e) { - logger.error("生成订单 warn", e); + logger.error("生成订单 warn, param:{}", JSON.toJSONString(dto), e); response = new RestApiResponse<>(e.getCode(), e.getMessage()); } catch (Exception e) { - logger.error("生成订单 error", e); + logger.error("生成订单 error, param:{}", JSON.toJSONString(dto), e); response = new RestApiResponse<>(ReturnCodeEnum.CODE_GENERATE_ORDER_ERROR); } logger.info("生成订单 result:{}", JSON.toJSONString(response)); diff --git a/jsowell-admin/src/main/java/com/jsowell/service/AgentDevService.java b/jsowell-admin/src/main/java/com/jsowell/service/AgentDevService.java index 8eeb7b5b9..8332b6b65 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/AgentDevService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/AgentDevService.java @@ -16,6 +16,7 @@ import com.jsowell.common.util.wxplatform.WXXmlToMapUtil; import com.jsowell.pile.domain.agentDev.AuditItem; import com.jsowell.pile.domain.agentDev.CategoryInfo; import com.jsowell.pile.domain.agentDev.UserInfoSetting; +import com.jsowell.pile.dto.MemberRegisterAndLoginDTO; import com.jsowell.pile.dto.agentDev.*; import com.jsowell.pile.service.PileMerchantInfoService; import com.jsowell.pile.vo.agentDev.AuthInfoVO; @@ -639,7 +640,13 @@ public class AgentDevService { String firstLevelMerchantId = pileMerchantInfoService.getFirstLevelMerchantIdByWxAppId(appId); logger.info("微信一键登录 获取merchantId:{}", firstLevelMerchantId); // 下面方法有判断 merchantId 是否为空,因此可直接传值 - return memberService.memberRegisterAndLogin(phoneNumber, firstLevelMerchantId, openId); + MemberRegisterAndLoginDTO loginDTO = MemberRegisterAndLoginDTO.builder() + .openId(openId) + .firstLevelMerchantId(firstLevelMerchantId) + .mobileNumber(phoneNumber) + .requestSource(dto.getRequestSource()) + .build(); + return memberService.memberRegisterAndLogin(loginDTO); // 其他一级运营商,微信一键登录 } /** diff --git a/jsowell-admin/src/main/java/com/jsowell/service/MemberService.java b/jsowell-admin/src/main/java/com/jsowell/service/MemberService.java index d352220a6..43c43b28c 100644 --- a/jsowell-admin/src/main/java/com/jsowell/service/MemberService.java +++ b/jsowell-admin/src/main/java/com/jsowell/service/MemberService.java @@ -21,6 +21,7 @@ import com.jsowell.common.constant.UserConstants; import com.jsowell.common.core.page.PageResponse; import com.jsowell.common.core.redis.RedisCache; import com.jsowell.common.enums.TitleTypeEnum; +import com.jsowell.common.enums.adapay.AdapayPayChannelEnum; import com.jsowell.common.enums.adapay.MerchantDelayModeEnum; import com.jsowell.common.enums.uniapp.BalanceChangesEnum; import com.jsowell.common.enums.ykc.ReturnCodeEnum; @@ -132,19 +133,21 @@ public class MemberService { * @param dto * @return */ - public String memberRegisterAndLogin(MemberRegisterAndLoginDTO dto) { + public String memberRegisterAndLoginBySMS(MemberRegisterAndLoginDTO dto) { // 校验短信验证码 两种情况不能通过校验,1-验证码错误;2-超时 验证码10分钟有效 checkVerificationCode(dto); - return memberRegisterAndLogin(dto.getMobileNumber(), dto.getMerchantId(), dto.getOpenId()); + return memberRegisterAndLogin(dto); // 短信验证码登录 } /** * 公共登录注册方法 - * @param phoneNumber 手机号 - * @param firstLevelMerchantId 商户id * @return token返给前端 */ - protected String memberRegisterAndLogin(String phoneNumber, String firstLevelMerchantId, String openId) { + protected String memberRegisterAndLogin(MemberRegisterAndLoginDTO dto) { + String phoneNumber = dto.getMobileNumber(); + String firstLevelMerchantId = dto.getFirstLevelMerchantId(); + String openId = dto.getOpenId(); + log.info("公共登录注册方法, phoneNumber:{}, firstLevelMerchantId:{}, openId:{}", phoneNumber, firstLevelMerchantId, openId); if (StringUtils.isBlank(phoneNumber)) { throw new BusinessException(ReturnCodeEnum.CODE_GET_MOBILE_NUMBER_BY_CODE_ERROR); @@ -154,9 +157,10 @@ public class MemberService { } // 2024年6月11日15点37分 支付宝没有openid,改为不校验openid - // if (StringUtils.isBlank(openId)) { - // throw new BusinessException(ReturnCodeEnum.CODE_OPEN_ID_IS_NULL_ERROR); - // } + // 2024年6月14日17点03分,请求来源为微信,校验openId + if (AdapayPayChannelEnum.WX_LITE.getValue().equals(dto.getRequestSource()) && StringUtils.isBlank(openId)) { + throw new BusinessException(ReturnCodeEnum.CODE_OPEN_ID_IS_NULL_ERROR); + } // 查询手机号码是否注册过 MemberBasicInfo memberBasicInfo = memberBasicInfoService.selectInfoByMobileNumber(phoneNumber, firstLevelMerchantId); @@ -169,7 +173,7 @@ public class MemberService { memberBasicInfo.setNickName("会员" + memberId); memberBasicInfo.setMobileNumber(phoneNumber); memberBasicInfo.setMerchantId(Long.valueOf(firstLevelMerchantId)); - if (StringUtils.isBlank(openId)) { + if (AdapayPayChannelEnum.WX_LITE.getValue().equals(dto.getRequestSource()) && StringUtils.isNotBlank(openId)) { memberBasicInfo.setOpenId(openId); } @@ -186,7 +190,7 @@ public class MemberService { } transactionService.createMember(memberTransactionDTO); } else { - if (!StringUtils.equals(memberBasicInfo.getOpenId(), openId)) { + if (AdapayPayChannelEnum.WX_LITE.getValue().equals(dto.getRequestSource()) && !StringUtils.equals(memberBasicInfo.getOpenId(), openId)) { // openId变化就更新 memberBasicInfo.setOpenId(openId); memberBasicInfoService.updateMemberBasicInfo(memberBasicInfo); @@ -229,7 +233,13 @@ public class MemberService { // 根据appid查询merchantId String firstLevelMerchantId = pileMerchantInfoService.getFirstLevelMerchantIdByWxAppId(dto.getAppId()); // 查询手机号码是否注册过 - return memberRegisterAndLogin(mobileNumber, firstLevelMerchantId, openId); + MemberRegisterAndLoginDTO loginDTO = MemberRegisterAndLoginDTO.builder() + .openId(openId) + .firstLevelMerchantId(firstLevelMerchantId) + .mobileNumber(mobileNumber) + .requestSource(dto.getRequestSource()) + .build(); + return memberRegisterAndLogin(loginDTO); // 微信小程序一键登录 } public String alipayLogin(AlipayLoginDTO dto) throws Exception { @@ -242,7 +252,12 @@ public class MemberService { firstLevelMerchantId = "1"; // 查询手机号码是否注册过 - return memberRegisterAndLogin(mobileNumber, firstLevelMerchantId, ""); + MemberRegisterAndLoginDTO loginDTO = MemberRegisterAndLoginDTO.builder() + .requestSource(dto.getRequestSource()) + .firstLevelMerchantId(firstLevelMerchantId) + .mobileNumber(mobileNumber) + .build(); + return memberRegisterAndLogin(loginDTO); // 支付宝小程序一键登录 } /** diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/AlipayLoginDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/AlipayLoginDTO.java index 825a91649..f44a01bc9 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/AlipayLoginDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/AlipayLoginDTO.java @@ -13,4 +13,9 @@ public class AlipayLoginDTO { * 小程序appId */ private String appId; + + /** + * 请求来源, 参见{@link com.jsowell.common.enums.adapay.AdapayPayChannelEnum} + */ + private String requestSource; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/MemberRegisterAndLoginDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/MemberRegisterAndLoginDTO.java index 4d3753d57..0855c2079 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/MemberRegisterAndLoginDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/MemberRegisterAndLoginDTO.java @@ -26,12 +26,17 @@ public class MemberRegisterAndLoginDTO { private String appId; /** - * 运营商id + * 一级运营商id */ - private String merchantId; + private String firstLevelMerchantId; /** * 微信用户openId */ private String openId; + + /** + * 请求来源, 参见{@link com.jsowell.common.enums.adapay.AdapayPayChannelEnum} + */ + private String requestSource; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/WechatLoginDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/WechatLoginDTO.java index fdce940d0..9a49c3241 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/WechatLoginDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/WechatLoginDTO.java @@ -21,4 +21,9 @@ public class WechatLoginDTO { * 用来获取openId的Code */ private String openIdCode; + + /** + * 请求来源, 参见{@link com.jsowell.common.enums.adapay.AdapayPayChannelEnum} + */ + private String requestSource; } diff --git a/jsowell-pile/src/main/java/com/jsowell/pile/dto/agentDev/AgentWechatLoginDTO.java b/jsowell-pile/src/main/java/com/jsowell/pile/dto/agentDev/AgentWechatLoginDTO.java index d79763823..cdfa31e53 100644 --- a/jsowell-pile/src/main/java/com/jsowell/pile/dto/agentDev/AgentWechatLoginDTO.java +++ b/jsowell-pile/src/main/java/com/jsowell/pile/dto/agentDev/AgentWechatLoginDTO.java @@ -25,5 +25,8 @@ public class AgentWechatLoginDTO { */ private String openIdCode; - + /** + * 请求来源, 参见{@link com.jsowell.common.enums.adapay.AdapayPayChannelEnum} + */ + private String requestSource; }