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

@@ -0,0 +1,45 @@
package com.newyetai.sdk.ali.config;
import com.newyetai.sdk.chuanglan.config.ChuangLanCommonProperties;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Builder.Default;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = AliProperties.PREFIX)
@Data
@Component
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class AliProperties {
/** 配置前缀 */
public static final String PREFIX = "ali";
public static final String IDCARD_PREFIX = PREFIX + ".idcard";
/** 二要素配置 */
private IdcardProperties idcard;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public static class IdcardProperties {
/** 是否启用 **/
@Default
private Boolean enable = Boolean.FALSE;
/** 次数限制 **/
private Long numLimit;
private String url;
/** */
private String appcode;
}
}

View File

@@ -0,0 +1,27 @@
package com.newyetai.sdk.ali.dto;
import com.newyetai.sdk.common.dto.ISdkRequest;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.core.ParameterizedTypeReference;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class IdCardReq implements ISdkRequest<VerifyRes<IdCardRes>> {
private static ParameterizedTypeReference<VerifyRes<IdCardRes>> type = new ParameterizedTypeReference<VerifyRes<IdCardRes>>() {
};
private String name;
private String idcard;
@Override
public ParameterizedTypeReference<VerifyRes<IdCardRes>> getResponseType() {
return type;
}
}

View File

@@ -0,0 +1,27 @@
package com.newyetai.sdk.ali.dto;
import java.io.Serializable;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class IdCardRes implements Serializable {
/** code为200 data才会有值,400参数格式错误 */
public static final Integer SUC_CODE = 200;
/** 1.不一致 0.一致 */
public static final Integer SUC_RESULT = 0;
private String birthday;
private Integer result;
private String address;
private String orderNo;
private String sex;
private String desc;
}

View File

@@ -0,0 +1,17 @@
package com.newyetai.sdk.ali.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class VerifyRes<T> {
private String msg;
private String success;
private Integer code;
private T data;
}

View File

@@ -0,0 +1,14 @@
package com.newyetai.sdk.ali.service;
import com.newyetai.common.AlitaResult;
import com.newyetai.sdk.ali.dto.IdCardReq;
import com.newyetai.sdk.ali.dto.IdCardRes;
public interface AliVerifyService {
String BEAN_ID = "sdk.aliVerifyService";
String MOCK_BEAN_ID = "mock.aliVerifyService";
AlitaResult<IdCardRes> verify(IdCardReq req);
}

View File

@@ -0,0 +1,78 @@
package com.newyetai.sdk.ali.service.impl;
import com.newyetai.common.AlitaResult;
import com.newyetai.common.annotation.CheckAndMock;
import com.newyetai.common.util.JsonUtils;
import com.newyetai.common.util.StrUtils;
import com.newyetai.sdk.ali.config.AliProperties;
import com.newyetai.sdk.ali.config.AliProperties.IdcardProperties;
import com.newyetai.sdk.ali.dto.IdCardReq;
import com.newyetai.sdk.ali.dto.IdCardRes;
import com.newyetai.sdk.ali.dto.VerifyRes;
import com.newyetai.sdk.ali.service.AliVerifyService;
import com.newyetai.sdk.common.constant.SdkConstants;
import com.newyetai.sdk.common.dto.DefaultSdkInvokeLogDTO;
import com.newyetai.sdk.common.util.HttpUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Slf4j
@Service(AliVerifyService.BEAN_ID)
public class AliVerifyServiceImpl implements AliVerifyService {
private static RestTemplate restTemplate = HttpUtils.restTemplate;
@Autowired
private AliProperties aliProperties;
@Override
@CheckAndMock(mockClass = MockAliVerifyServiceImpl.class,
propertyPrefix = AliProperties.IDCARD_PREFIX)
public AlitaResult<IdCardRes> verify(IdCardReq req){
return this.verify(req, aliProperties.getIdcard());
}
public static AlitaResult<IdCardRes> verify(IdCardReq req, IdcardProperties idcardProperties){
VerifyRes<IdCardRes> res = null;
try {
try {
// 构建请求头
HttpHeaders header = new HttpHeaders();
header.add("Authorization", "APPCODE " + idcardProperties.getAppcode());
header.add("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
// 发送请求
HttpEntity<?> requestEntity = new HttpEntity(StrUtils.buildQueryValue(req), header);
ResponseEntity<VerifyRes<IdCardRes>> result = restTemplate.exchange(idcardProperties.getUrl(),
HttpMethod.POST, requestEntity, req.getResponseType());
res = result.getBody();
} catch (Exception e) {
log.info("invoke error :{}", e);
return AlitaResult.error(SdkConstants.SDK_HTTP_INVOKE_ERROR_CODE, e.getMessage());
}
try {
if (IdCardRes.SUC_CODE.equals(res.getCode()) && IdCardRes.SUC_RESULT.equals(res.getData().getResult())) {
return AlitaResult.success(res.getData());
}
return AlitaResult.error(SdkConstants.SDK_HTTP_INVOKE_RESPONSE_FAIL_CODE,
res.getCode() + res.getData().getDesc());
} catch (Exception e) {
return AlitaResult.error(SdkConstants.SDK_RESPONSE_CONVERT_ERROR_CODE,
e.getMessage());
}
} finally {
log.info("invoke:{}",
JsonUtils
.toJsonString(
DefaultSdkInvokeLogDTO.builder().requestData(req).responseData(res)
.build()));
}
}
}

View File

@@ -0,0 +1,19 @@
package com.newyetai.sdk.ali.service.impl;
import com.newyetai.common.AlitaResult;
import com.newyetai.sdk.ali.dto.IdCardReq;
import com.newyetai.sdk.ali.dto.IdCardRes;
import com.newyetai.sdk.ali.service.AliVerifyService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Slf4j
@Service(AliVerifyService.MOCK_BEAN_ID)
public class MockAliVerifyServiceImpl implements AliVerifyService {
@Override
public AlitaResult<IdCardRes> verify(IdCardReq req) {
log.info("ali idcard mock...");
return AlitaResult.success(IdCardRes.builder().result(IdCardRes.SUC_RESULT).build());
}
}