ali idcard verify

This commit is contained in:
ran.shang
2025-06-17 18:39:28 +08:00
parent f4a4fb9c76
commit 94a5f85c65
14 changed files with 413 additions and 26 deletions

View File

@@ -8,7 +8,9 @@ public enum FactorVerificationSourceTypeEnum {
FXQ("放心签", 1),
CL("创蓝", 2),
SYS("系统", 3);
SYS("系统", 3),
ALI("阿里", 4),
;
private final String desc;

View File

@@ -40,8 +40,6 @@ import lombok.extern.slf4j.Slf4j;
@SuppressWarnings("rawtypes,unchecked")
public abstract class AbstractVerify<T extends FactorVerificationDTO> implements IVerify<T>, ITopicMqHandler<T>{
private static final Integer DEFAULT_TYPE = FactorVerificationSourceTypeEnum.CL.getType();
static final Map<Integer, FactorVerificationSourceService> SOURCE_SERVICE_MAP = Maps.newConcurrentMap();
/**
@@ -97,14 +95,9 @@ public abstract class AbstractVerify<T extends FactorVerificationDTO> implements
protected T syncBeforeVerify(T t) {
// 认证源根据配置文件不同调用不同SDK 1放心签、2创蓝
String source = EnvironmentUtils.getProperty("alita.authenticationSource");
int authenticationSource = DEFAULT_TYPE;
int authenticationSource = FactorVerificationSourceTypeEnum.CL.getType();
try {
authenticationSource = Integer.parseInt(source);
//如果不是这两种认证源,用默认的源
if (!(FactorVerificationSourceTypeEnum.CL.getType().equals(authenticationSource)
|| FactorVerificationSourceTypeEnum.FXQ.getType().equals(authenticationSource))) {
authenticationSource = DEFAULT_TYPE;
}
} catch (NumberFormatException e) {
//doNothing
}

View File

@@ -0,0 +1,67 @@
package com.newyetai.alitaforward.verification.source.ali;
import cn.hutool.json.JSONUtil;
import com.newyetai.alitaforward.verification.constants.FactorVerificationSourceTypeEnum;
import com.newyetai.alitaforward.verification.dto.FactorVerificationDTO;
import com.newyetai.alitaforward.verification.dto.RealNameTwoFactorVerificationDTO;
import com.newyetai.alitaforward.verification.source.FactorVerificationSourceService;
import com.newyetai.alitaforward.verification.source.ali.mapstruct.AliVerifyMapMapper;
import com.newyetai.common.AlitaResult;
import com.newyetai.common.constant.AuthStatusEnum;
import com.newyetai.common.util.JsonUtils;
import com.newyetai.sdk.ali.dto.IdCardReq;
import com.newyetai.sdk.ali.dto.IdCardRes;
import com.newyetai.sdk.ali.service.AliVerifyService;
import com.newyetai.sdk.common.constant.SdkConstants;
import java.util.Objects;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Slf4j
@Service
@SuppressWarnings("unchecked")
public class ALiVerifySourceServiceImpl implements FactorVerificationSourceService {
@Resource(name = AliVerifyService.BEAN_ID)
private AliVerifyService aliVerifyService;
@Override
public RealNameTwoFactorVerificationDTO twoVerify(RealNameTwoFactorVerificationDTO verificationDTO) {
IdCardReq requestDTO = AliVerifyMapMapper.INSTANCE.toDTO(verificationDTO);
log.info("二要素认证:{}", JSONUtil.toJsonStr(requestDTO));
AlitaResult<IdCardRes> result = aliVerifyService.verify(requestDTO);
handlerResult(result, verificationDTO);
return verificationDTO;
}
private void handlerResult(AlitaResult<?> result, FactorVerificationDTO verificationDTO) {
verificationDTO.setInvokeData(JsonUtils.toJsonString(result));
AuthStatusEnum targetStatus = null;
if (SdkConstants.SDK_INVOKE_NOT_REACH_CODE.equals(result.getCode())) {
// 接口调起失败,未拿到返回结果,视为未调起
verificationDTO.setFailReason("调用异常,未调起第三方");
} else {
if (Boolean.TRUE.equals(result.getSuccess())) {
targetStatus = AuthStatusEnum.AUTH_SUCCESS;
} else {
targetStatus = AuthStatusEnum.AUTH_FAIL;
verificationDTO.setFailReason(result.getMsg());
}
}
if (Objects.nonNull(targetStatus)) {
verificationDTO.setStatus(targetStatus.getType());
}
}
@Override
public FactorVerificationSourceTypeEnum getSourceType() {
return FactorVerificationSourceTypeEnum.ALI;
}
}

View File

@@ -0,0 +1,24 @@
package com.newyetai.alitaforward.verification.source.ali.mapstruct;
import com.newyetai.alitaforward.verification.dto.RealNameTwoFactorVerificationDTO;
import com.newyetai.sdk.ali.dto.IdCardReq;
import com.newyetai.sdk.chuanglan.dto.RealNameTwoBaseRequestDTO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
@Mapper
public interface AliVerifyMapMapper {
AliVerifyMapMapper INSTANCE = Mappers.getMapper(AliVerifyMapMapper.class);
@Mappings(value = {
@Mapping(target = "name", source = "dto.realName"),
@Mapping(target = "idcard", source = "dto.cardNo")
})
IdCardReq toDTO(RealNameTwoFactorVerificationDTO dto);
}