mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-20 11:05:18 +08:00
一键登录接口兼容支付宝
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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<String, String> 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) {
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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); // 其他一级运营商,微信一键登录
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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); // 支付宝小程序一键登录
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -13,4 +13,9 @@ public class AlipayLoginDTO {
|
||||
* 小程序appId
|
||||
*/
|
||||
private String appId;
|
||||
|
||||
/**
|
||||
* 请求来源, 参见{@link com.jsowell.common.enums.adapay.AdapayPayChannelEnum}
|
||||
*/
|
||||
private String requestSource;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -21,4 +21,9 @@ public class WechatLoginDTO {
|
||||
* 用来获取openId的Code
|
||||
*/
|
||||
private String openIdCode;
|
||||
|
||||
/**
|
||||
* 请求来源, 参见{@link com.jsowell.common.enums.adapay.AdapayPayChannelEnum}
|
||||
*/
|
||||
private String requestSource;
|
||||
}
|
||||
|
||||
@@ -25,5 +25,8 @@ public class AgentWechatLoginDTO {
|
||||
*/
|
||||
private String openIdCode;
|
||||
|
||||
|
||||
/**
|
||||
* 请求来源, 参见{@link com.jsowell.common.enums.adapay.AdapayPayChannelEnum}
|
||||
*/
|
||||
private String requestSource;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user