1.增加账号实名认证接口

2.去除自动提现
This commit is contained in:
张松
2025-01-02 14:09:55 +08:00
parent f7a63cdea7
commit 6e4942e18a
10 changed files with 179 additions and 8 deletions

20
pom.xml
View File

@@ -53,6 +53,26 @@
</properties>
<dependencies>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dytnsapi20200217</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-openapi</artifactId>
<version>0.3.6</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-console</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-util</artifactId>
<version>0.2.23</version>
</dependency>
<dependency>
<groupId>com.volcengine</groupId>

View File

@@ -5,6 +5,8 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.sqx.common.annotation.Debounce;
import com.sqx.common.utils.Result;
import com.sqx.modules.app.annotation.Login;
import com.sqx.modules.app.dao.AuthCertNoDTO;
import com.sqx.modules.app.entity.UserEntity;
import com.sqx.modules.app.service.IAppleService;
import com.sqx.modules.app.service.UserService;
@@ -19,6 +21,7 @@ import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import weixin.popular.api.SnsAPI;
import weixin.popular.bean.sns.SnsToken;
@@ -163,6 +166,13 @@ public class AppLoginController {
return userService.sendMsg(phone, state,null);
}
@Login
@Debounce(value = "#authCertNoDTO.idNum")
@PostMapping("/authCertNo")
public Result authCertNo(@RequestBody @Validated AuthCertNoDTO authCertNoDTO, @RequestAttribute("userId") long userId) {
return Result.success().put("data", userService.authCertNo(userId, authCertNoDTO));
}
@ApiOperation("解密手机号")
@RequestMapping(value = "/selectPhone",method = RequestMethod.POST)
public Result getPhoneNumberBeanS5(@RequestBody WxPhone wxPhone) {

View File

@@ -0,0 +1,13 @@
package com.sqx.modules.app.dao;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
public class AuthCertNoDTO {
@NotBlank
private String name;
@NotBlank
private String idNum;
}

View File

@@ -199,5 +199,8 @@ public class UserEntity implements Serializable {
@TableField(exist = false)
private Integer vipType;
private String certName;
private String certNo;
}

View File

@@ -0,0 +1,6 @@
package com.sqx.modules.app.service;
public interface AliService {
void authCertNo(String name, String idCard);
}

View File

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sqx.common.utils.PageUtils;
import com.sqx.common.utils.Result;
import com.sqx.modules.app.dao.AuthCertNoDTO;
import com.sqx.modules.app.entity.UserEntity;
import javax.servlet.http.HttpServletRequest;
@@ -229,4 +230,8 @@ public interface UserService extends IService<UserEntity> {
void firstBindAwardsMoney(UserEntity entity);
/**
* 二要素身份证认证
*/
Object authCertNo(long userId, AuthCertNoDTO authCertNoDTO);
}

View File

@@ -0,0 +1,67 @@
package com.sqx.modules.app.service.impl;
import com.aliyun.dytnsapi20200217.Client;
import com.aliyun.dytnsapi20200217.models.CertNoTwoElementVerificationRequest;
import com.aliyun.dytnsapi20200217.models.CertNoTwoElementVerificationResponse;
import com.aliyun.teautil.models.RuntimeOptions;
import com.sqx.common.exception.SqxException;
import com.sqx.modules.app.service.AliService;
import com.sqx.modules.common.entity.CommonInfo;
import com.sqx.modules.common.service.CommonInfoService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
@Service
@Slf4j
public class AliServiceImpl implements AliService {
private final CommonInfoService commonInfoService;
private Client client;
public AliServiceImpl(CommonInfoService commonInfoService) {
this.commonInfoService = commonInfoService;
}
@PostConstruct
public void init() throws Exception {
CommonInfo keyIdInfo = commonInfoService.findOne(85);
CommonInfo securityInfo = commonInfoService.findOne(86);
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
.setAccessKeyId(keyIdInfo.getValue())
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
.setAccessKeySecret(securityInfo.getValue());
config.endpoint = "dytnsapi.aliyuncs.com";
this.client = new Client(config);
}
@Override
public void authCertNo(String name, String idCard) {
log.info("阿里云二要素认证请求参数: {} {}", name, idCard);
CertNoTwoElementVerificationRequest certNoTwoElementVerificationRequest = new com.aliyun.dytnsapi20200217.models.CertNoTwoElementVerificationRequest()
.setAuthCode("t92K8i9ae6")
.setCertName(name)
.setCertNo(idCard);
RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
CertNoTwoElementVerificationResponse resp = client.certNoTwoElementVerificationWithOptions(certNoTwoElementVerificationRequest, runtime);
log.info("阿里云二要素认证响应参数: {}", resp);
if (resp.getStatusCode() != 200) {
throw new SqxException("请求失败");
}
if (!"OK".equals(resp.getBody().getCode())) {
throw new SqxException(resp.getBody().getMessage());
}
if (!"1".equals(resp.getBody().getData().getIsConsistent())) {
throw new SqxException("身份证信息不匹配,认证失败");
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}

View File

@@ -4,6 +4,8 @@ package com.sqx.modules.app.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.IdcardUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
@@ -15,6 +17,7 @@ import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -32,16 +35,15 @@ import com.getui.push.v2.sdk.dto.req.message.ios.Alert;
import com.getui.push.v2.sdk.dto.req.message.ios.Aps;
import com.getui.push.v2.sdk.dto.req.message.ios.IosDTO;
import com.github.qcloudsms.SmsSingleSenderResult;
import com.sqx.common.exception.SqxException;
import com.sqx.common.utils.DateUtils;
import com.sqx.common.utils.PageUtils;
import com.sqx.common.utils.Result;
import com.sqx.modules.app.dao.AuthCertNoDTO;
import com.sqx.modules.app.dao.MsgDao;
import com.sqx.modules.app.dao.UserDao;
import com.sqx.modules.app.entity.*;
import com.sqx.modules.app.service.UserMoneyDetailsService;
import com.sqx.modules.app.service.UserMoneyService;
import com.sqx.modules.app.service.UserService;
import com.sqx.modules.app.service.UserVipService;
import com.sqx.modules.app.service.*;
import com.sqx.modules.app.utils.JwtUtils;
import com.sqx.modules.app.utils.UserConstantInterface;
import com.sqx.modules.common.entity.CommonInfo;
@@ -69,6 +71,7 @@ import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import weixin.popular.api.SnsAPI;
@@ -117,12 +120,17 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
private DiscSpinningService discSpinningService;
@Autowired
private SysUserService sysUserService;
private final AliService aliService;
@Value("${spring.profiles.active}")
private String profiles;
private ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(true);
public UserServiceImpl(@Lazy AliService aliService) {
this.aliService = aliService;
}
@Override
public Result authenticationRegister(JSONObject jsonObject, HttpServletRequest request) {
reentrantReadWriteLock.writeLock().lock();
@@ -1535,4 +1543,35 @@ public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements
}
}
@Override
public Object authCertNo(long userId, AuthCertNoDTO authCertNoDTO) {
authCertNoDTO.setName(StrUtil.trim(authCertNoDTO.getName()));
authCertNoDTO.setIdNum(StrUtil.trim(authCertNoDTO.getIdNum()));
if (!IdcardUtil.isValidCard(authCertNoDTO.getIdNum())) {
throw new SqxException("身份证号码有误");
}
UserEntity userEntity = baseMapper.selectById(userId);
if (userEntity == null) {
throw new SqxException("用户信息不存在");
}
if (userEntity.getCertName() != null) {
throw new SqxException("此账号已认证");
}
Integer count = baseMapper.selectCount(new LambdaQueryWrapper<UserEntity>()
.eq(UserEntity::getCertName, authCertNoDTO.getName())
.eq(UserEntity::getCertNo, authCertNoDTO.getIdNum()));
if (count > 1) {
throw new SqxException("此实名信息已存在");
}
aliService.authCertNo(authCertNoDTO.getName(), authCertNoDTO.getIdNum());
userEntity.setCertName(authCertNoDTO.getName());
userEntity.setCertNo(authCertNoDTO.getIdNum());
return updateById(userEntity);
}
}

View File

@@ -101,10 +101,11 @@ public class DiscSpinningServiceImpl extends ServiceImpl<DiscSpinningDao, DiscSp
userMoneyService.updateAmount(1, receive.getUserId(), receive.getNumber().doubleValue());
if (receive.getNumber().compareTo(new BigDecimal("0.1")) > 0 && StringUtils.isNotBlank(userInfo.getZhiFuBao()) && StringUtils.isNotBlank(userInfo.getZhiFuBaoName())) {
//提现
withdraw(userInfo, receive.getNumber().doubleValue());
}
// 去除自动提现
// if (receive.getNumber().compareTo(new BigDecimal("0.1")) > 0 && StringUtils.isNotBlank(userInfo.getZhiFuBao()) && StringUtils.isNotBlank(userInfo.getZhiFuBaoName())) {
// //提现
// withdraw(userInfo, receive.getNumber().doubleValue());
// }
}
@Override

View File

@@ -455,6 +455,13 @@ public class CashOutServiceImpl extends ServiceImpl<CashOutDao, CashOut> impleme
if (StringUtils.isBlank(userInfo.getZhiFuBao()) || StringUtils.isBlank(userInfo.getZhiFuBaoName())) {
return Result.error(9999, "请先绑定支付宝账号!");
}
if (StrUtil.isBlank(userInfo.getCertName())) {
return Result.error(9999, "请先实名认证!");
}
if (!userInfo.getZhiFuBaoName().equals(userInfo.getCertName())) {
return Result.error(9999, "支付宝和实名姓名不太无法提现!");
}
alipayAccount = userInfo.getZhiFuBao();
alipayName = userInfo.getZhiFuBaoName();
}