Commit c9e2d04c authored by tangtuo's avatar tangtuo

实名认证接口

parent 1b83ec13
<component name="InspectionProjectProfileManager"> <component name="InspectionProjectProfileManager">
<profile version="1.0"> <profile version="1.0">
<option name="myName" value="Project Default" /> <option name="myName" value="Project Default" />
<inspection_tool class="ArgNamesErrorsInspection" enabled="false" level="ERROR" enabled_by_default="false" />
<inspection_tool class="JavaDoc" enabled="true" level="WARNING" enabled_by_default="true"> <inspection_tool class="JavaDoc" enabled="true" level="WARNING" enabled_by_default="true">
<option name="TOP_LEVEL_CLASS_OPTIONS"> <option name="TOP_LEVEL_CLASS_OPTIONS">
<value> <value>
......
...@@ -2,14 +2,9 @@ ...@@ -2,14 +2,9 @@
<project version="4"> <project version="4">
<component name="RemoteRepositoriesConfiguration"> <component name="RemoteRepositoriesConfiguration">
<remote-repository> <remote-repository>
<option name="id" value="maven-nexus-group" /> <option name="id" value="central" />
<option name="name" value="maven-nexus-group" /> <option name="name" value="central" />
<option name="url" value="http://146.56.197.85:12100/repository/maven-central/" /> <option name="url" value="https://maven.aliyun.com/nexus/content/groups/public" />
</remote-repository>
<remote-repository>
<option name="id" value="fzm" />
<option name="name" value="fzm repositories" />
<option name="url" value="http://maven.citydo.com.cn/repository/maven-public/" />
</remote-repository> </remote-repository>
<remote-repository> <remote-repository>
<option name="id" value="central" /> <option name="id" value="central" />
...@@ -22,14 +17,44 @@ ...@@ -22,14 +17,44 @@
<option name="url" value="http://maven.aliyun.com/nexus/content/groups/public/" /> <option name="url" value="http://maven.aliyun.com/nexus/content/groups/public/" />
</remote-repository> </remote-repository>
<remote-repository> <remote-repository>
<option name="id" value="fzm" />
<option name="name" value="fzm repositories" />
<option name="url" value="http://146.56.197.85:12100/repository/maven-public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="nexus" /> <option name="id" value="nexus" />
<option name="name" value="Nexus Repository" /> <option name="name" value="local private nexus" />
<option name="url" value="http://maven.citydo.com.cn/repository/maven-public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="https://maven.aliyun.com/repository/public" />
</remote-repository>
<remote-repository>
<option name="id" value="maven-nexus-group" />
<option name="name" value="maven-nexus-group" />
<option name="url" value="http://146.56.197.85:12100/repository/maven-central/" /> <option name="url" value="http://146.56.197.85:12100/repository/maven-central/" />
</remote-repository> </remote-repository>
<remote-repository> <remote-repository>
<option name="id" value="fzm" /> <option name="id" value="fzm" />
<option name="name" value="fzm repositories" /> <option name="name" value="fzm repositories" />
<option name="url" value="http://146.56.197.85:12100/repository/maven-public/" /> <option name="url" value="http://maven.citydo.com.cn/repository/maven-public/" />
</remote-repository>
<remote-repository>
<option name="id" value="rdc-releases" />
<option name="name" value="rdc-releases" />
<option name="url" value="https://packages.aliyun.com/maven/repository/2114056-release-JzJ1Dj/" />
</remote-repository>
<remote-repository>
<option name="id" value="nexus" />
<option name="name" value="Nexus Repository" />
<option name="url" value="http://146.56.197.85:12100/repository/maven-central/" />
</remote-repository> </remote-repository>
<remote-repository> <remote-repository>
<option name="id" value="aliyun" /> <option name="id" value="aliyun" />
...@@ -37,11 +62,6 @@ ...@@ -37,11 +62,6 @@
<option name="url" value="http://146.56.197.85:12100/repository/maven-public/" /> <option name="url" value="http://146.56.197.85:12100/repository/maven-public/" />
</remote-repository> </remote-repository>
<remote-repository> <remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" /> <option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" /> <option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" /> <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
...@@ -52,14 +72,14 @@ ...@@ -52,14 +72,14 @@
<option name="url" value="http://146.56.197.85:12100/repository/maven-central/" /> <option name="url" value="http://146.56.197.85:12100/repository/maven-central/" />
</remote-repository> </remote-repository>
<remote-repository> <remote-repository>
<option name="id" value="nexus" /> <option name="id" value="rdc-snapshots" />
<option name="name" value="local private nexus" /> <option name="name" value="rdc-snapshots" />
<option name="url" value="http://maven.citydo.com.cn/repository/maven-public/" /> <option name="url" value="https://packages.aliyun.com/maven/repository/2114056-snapshot-ifYEGu/" />
</remote-repository> </remote-repository>
<remote-repository> <remote-repository>
<option name="id" value="central" /> <option name="id" value="snapshots" />
<option name="name" value="Central Repository" /> <option name="name" value="snapshots" />
<option name="url" value="https://maven.aliyun.com/repository/public" /> <option name="url" value="https://maven.aliyun.com/nexus/content/groups/public" />
</remote-repository> </remote-repository>
</component> </component>
</project> </project>
\ No newline at end of file
...@@ -27,7 +27,10 @@ ...@@ -27,7 +27,10 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId> <artifactId>spring-boot-starter-validation</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId> <artifactId>commons-pool2</artifactId>
...@@ -84,6 +87,11 @@ ...@@ -84,6 +87,11 @@
<artifactId>redisson</artifactId> <artifactId>redisson</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<version>3.1.322</version>
</dependency>
</dependencies> </dependencies>
<properties> <properties>
......
...@@ -14,7 +14,6 @@ public enum AuthStatusEnum { ...@@ -14,7 +14,6 @@ public enum AuthStatusEnum {
NOT(0, "未认证"), NOT(0, "未认证"),
SUCCESS(1, "认证成功"), SUCCESS(1, "认证成功"),
FAIL(2, "认证失败"), FAIL(2, "认证失败"),
ONGOING(3, "认证中"),
; ;
private Integer status; private Integer status;
......
package com.fzm.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
/**
* @author tangtuo
* @date 2021/9/13 15:20
*/
@Getter
@AllArgsConstructor
public enum IdCardVerificationResponse {
SUCCESS("0","姓名和身份证号一致"),
FAILED1("-1","姓名和身份证号不一致"),
FAILED2("-2","非法身份证号(长度、校验位等不正确)"),
FAILED3("-3","非法姓名(长度、格式等不正确)"),
FAILED4("-4","证件库服务异常"),
FAILED5("-5","证件库中无此身份证记录"),
;
private String code;
private String desc;
}
...@@ -16,6 +16,7 @@ public enum ResultCode implements IErrorCode { ...@@ -16,6 +16,7 @@ public enum ResultCode implements IErrorCode {
PUBLISH_ERROR(415, "nft发行失败"), PUBLISH_ERROR(415, "nft发行失败"),
RECEIVE_ERROR(416, "nft领取失败"), RECEIVE_ERROR(416, "nft领取失败"),
TRANSFER_ERROR(416, "nft转让失败"), TRANSFER_ERROR(416, "nft转让失败"),
ID_CARD_VERIFICATION_ERROR(417, "身份证验证失败"),
; ;
......
package com.fzm.common.service; package com.fzm.common.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.fzm.common.entity.AuthPerson;
import com.fzm.common.entity.User; import com.fzm.common.entity.User;
import com.fzm.common.entity.vo.UserListVo; import com.fzm.common.entity.vo.UserListVo;
import com.fzm.common.entity.vo.UserStatisticVo; import com.fzm.common.entity.vo.UserStatisticVo;
import com.fzm.common.params.LoginParam; import com.fzm.common.params.LoginParam;
import com.tencentcloudapi.faceid.v20180301.models.IdCardOCRVerificationResponse;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.List; import java.util.List;
/** /**
...@@ -39,13 +41,6 @@ public interface UserService extends IService<User> { ...@@ -39,13 +41,6 @@ public interface UserService extends IService<User> {
User getUserByToken(); User getUserByToken();
/** /**
* 个人实名认证
*
* @param authPerson
*/
Boolean personAuth(AuthPerson authPerson);
/**
* 修改头像 * 修改头像
* *
* @param avatar * @param avatar
...@@ -77,4 +72,6 @@ public interface UserService extends IService<User> { ...@@ -77,4 +72,6 @@ public interface UserService extends IService<User> {
* @return * @return
*/ */
User getUserByWallet(String publishAddress); User getUserByWallet(String publishAddress);
IdCardOCRVerificationResponse personAuth(MultipartFile cardPictureFront, MultipartFile cardPictureBack) throws IOException;
} }
...@@ -6,7 +6,9 @@ import cn.hutool.core.date.DateTime; ...@@ -6,7 +6,9 @@ import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fzm.common.constant.SystemConstant; import com.fzm.common.constant.SystemConstant;
import com.fzm.common.entity.AuthPerson; import com.fzm.common.entity.AuthPerson;
...@@ -15,6 +17,7 @@ import com.fzm.common.entity.vo.UserListVo; ...@@ -15,6 +17,7 @@ import com.fzm.common.entity.vo.UserListVo;
import com.fzm.common.entity.vo.UserStatisticVo; import com.fzm.common.entity.vo.UserStatisticVo;
import com.fzm.common.enums.AuthStatusEnum; import com.fzm.common.enums.AuthStatusEnum;
import com.fzm.common.enums.AuthTypeEnum; import com.fzm.common.enums.AuthTypeEnum;
import com.fzm.common.enums.IdCardVerificationResponse;
import com.fzm.common.enums.ResultCode; import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException; import com.fzm.common.exception.GlobalException;
import com.fzm.common.mapper.UserMapper; import com.fzm.common.mapper.UserMapper;
...@@ -23,18 +26,25 @@ import com.fzm.common.properties.OssProperties; ...@@ -23,18 +26,25 @@ import com.fzm.common.properties.OssProperties;
import com.fzm.common.properties.SmsProperties; import com.fzm.common.properties.SmsProperties;
import com.fzm.common.service.AuthPersonService; import com.fzm.common.service.AuthPersonService;
import com.fzm.common.service.UserService; import com.fzm.common.service.UserService;
import com.fzm.common.utils.JwtUtil; import com.fzm.common.utils.*;
import com.fzm.common.utils.OssUtil; import com.tencentcloudapi.common.Credential;
import com.fzm.common.utils.RedisUtil; import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.fzm.common.utils.SmsUtil; import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.faceid.v20180301.FaceidClient;
import com.tencentcloudapi.faceid.v20180301.models.IdCardOCRVerificationRequest;
import com.tencentcloudapi.faceid.v20180301.models.IdCardOCRVerificationResponse;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import sun.misc.BASE64Encoder;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.List; import java.util.List;
/** /**
...@@ -157,18 +167,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us ...@@ -157,18 +167,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
} }
@Override @Override
public Boolean personAuth(AuthPerson authPerson) {
Integer loginId = JwtUtil.getUserIdFromToken(request.getHeader("Authorization"));
User user = new User().
setAuthStatus(AuthStatusEnum.ONGOING.getStatus()).
setAuthType(AuthTypeEnum.PERSON.getType()).
setId(loginId);
updateById(user);
authPerson.setUserId(loginId);
return authPersonService.save(authPerson);
}
@Override
public User uploadAvatar(String avatar) { public User uploadAvatar(String avatar) {
User loginUser = getUserByToken(); User loginUser = getUserByToken();
// 如果不是第一次上传头像,需要删除旧头像 // 如果不是第一次上传头像,需要删除旧头像
...@@ -216,6 +214,37 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us ...@@ -216,6 +214,37 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
} }
@Override @Override
public IdCardOCRVerificationResponse personAuth(MultipartFile cardPictureFront, MultipartFile cardPictureBack) throws IOException {
String token = request.getHeader("Authorization");
Integer userId = JwtUtil.getUserIdFromToken(token);
BASE64Encoder base64Encoder = new BASE64Encoder();
String encode = "data:image/jpg;base64," + base64Encoder.encode(cardPictureFront.getBytes());
IdCardOCRVerificationResponse response = TencentApi.idCardOCRVerification(encode);
// 验证成功上传身份证证件
String frontUrl = ossUtil.putSimpleObject(cardPictureFront);
String backUrl = ossUtil.putSimpleObject(cardPictureBack);
AuthPerson authPerson = new AuthPerson()
.setUserId(userId)
.setIdCard(response.getIdCard())
.setName(response.getName())
.setCardPictureBack(backUrl)
.setCardPictureFront(frontUrl);
authPersonService.save(authPerson);
UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
Integer status;
if (IdCardVerificationResponse.SUCCESS.getCode().equals(response.getResult())) {
status = AuthStatusEnum.SUCCESS.getStatus();
} else {
status = AuthStatusEnum.FAIL.getStatus();
}
userUpdateWrapper.set("auth_type", AuthTypeEnum.PERSON.getType())
.set("auth_status", status)
.eq("id", userId);
update(userUpdateWrapper);
return response;
}
@Override
public List<UserListVo> list(String telephone, String nickname, Integer authType, String start, String end) { public List<UserListVo> list(String telephone, String nickname, Integer authType, String start, String end) {
DateTime startDate = null; DateTime startDate = null;
DateTime endDate = null; DateTime endDate = null;
...@@ -227,4 +256,29 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us ...@@ -227,4 +256,29 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
} }
return userMapper.list(telephone, nickname, authType, startDate, endDate); return userMapper.list(telephone, nickname, authType, startDate, endDate);
} }
public static void main(String[] args) {
try {
// 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
// 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
Credential cred = new Credential("SecretId", "SecretKey");
// 实例化一个http选项,可选的,没有特殊需求可以跳过
HttpProfile httpProfile = new HttpProfile();
httpProfile.setEndpoint("faceid.tencentcloudapi.com");
// 实例化一个client选项,可选的,没有特殊需求可以跳过
ClientProfile clientProfile = new ClientProfile();
clientProfile.setHttpProfile(httpProfile);
// 实例化要请求产品的client对象,clientProfile是可选的
FaceidClient client = new FaceidClient(cred, "", clientProfile);
// 实例化一个请求对象,每个接口都会对应一个request对象
IdCardOCRVerificationRequest req = new IdCardOCRVerificationRequest();
// 返回的resp是一个IdCardOCRVerificationResponse的实例,与请求对象对应
IdCardOCRVerificationResponse resp = client.IdCardOCRVerification(req);
// 输出json格式的字符串回包
System.out.println(IdCardOCRVerificationResponse.toJsonString(resp));
} catch (TencentCloudSDKException e) {
System.out.println(e.toString());
}
}
} }
package com.fzm.common.utils;
import com.fzm.common.enums.IdCardVerificationResponse;
import com.fzm.common.enums.ResultCode;
import com.fzm.common.exception.GlobalException;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.faceid.v20180301.FaceidClient;
import com.tencentcloudapi.faceid.v20180301.models.IdCardOCRVerificationRequest;
import com.tencentcloudapi.faceid.v20180301.models.IdCardOCRVerificationResponse;
/**
* @author tangtuo
* @date 2021/9/13 15:13
*/
public class TencentApi {
public static IdCardOCRVerificationResponse idCardOCRVerification(String imageBase64) {
// 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
// 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
Credential cred = new Credential("AKIDlMm3EC2dxXw50f4C4f092ey2pLaaKnyt", "g5D4ey1nJZXEhtoSovkIZYGhqjLgkgNo");
// 实例化一个http选项,可选的,没有特殊需求可以跳过
HttpProfile httpProfile = new HttpProfile();
httpProfile.setEndpoint("faceid.tencentcloudapi.com");
// 实例化一个client选项,可选的,没有特殊需求可以跳过
ClientProfile clientProfile = new ClientProfile();
clientProfile.setHttpProfile(httpProfile);
// 实例化要请求产品的client对象,clientProfile是可选的
FaceidClient client = new FaceidClient(cred, "ap-shanghai", clientProfile);
// 实例化一个请求对象,每个接口都会对应一个request对象
IdCardOCRVerificationRequest req = new IdCardOCRVerificationRequest();
req.setImageBase64(imageBase64);
// 返回的resp是一个IdCardOCRVerificationResponse的实例,与请求对象对应
try {
IdCardOCRVerificationResponse resp = client.IdCardOCRVerification(req);
return resp;
} catch (TencentCloudSDKException e) {
throw GlobalException.newException(ResultCode.ID_CARD_VERIFICATION_ERROR, "实名认证失败,失败原因: " + e.getMessage());
}
}
}
package com.fzm.portal.aop;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.faceid.v20180301.FaceidClient;
import com.tencentcloudapi.faceid.v20180301.models.IdCardOCRVerificationRequest;
import com.tencentcloudapi.faceid.v20180301.models.IdCardOCRVerificationResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author tangtuo
* @date 2021/9/10 14:27
*/
@Slf4j
@Order(1)
@Component
@Aspect
public class LogAop {
@Resource
private HttpServletRequest request;
private static ThreadLocal<Long> threadLocal = new ThreadLocal<>();
@Pointcut(value = "execution(public * com.fzm.portal.controller.*.*(..))")
public void pointCut() {
}
/**
* 前置通知
*
* @param joinPoint
*/
@Before("pointCut()")
public void deBefore(JoinPoint joinPoint) {
// 记录此次请求的开始时间
long start = System.currentTimeMillis();
threadLocal.set(start);
// 获取请求路径
String requestURI = request.getRequestURI();
// 获取请求参数
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
List<Object> parameter = getParameter(method, joinPoint.getArgs());
log.info("请求路径: {},请求参数:{}", requestURI, parameter);
}
/**
* 后置通知
*
* @param joinPoint
*/
@After("pointCut()")
public void doAfter(JoinPoint joinPoint) {
long end = System.currentTimeMillis();
Long start = threadLocal.get();
long l = end - start;
String requestURI = request.getRequestURI();
log.info("请求路径:{},接口耗时:{}ms", requestURI, l);
}
/**
* 根据方法和传入的参数获取请求参数
*/
private List<Object> getParameter(Method method, Object[] args) {
List<Object> argList = new ArrayList<>();
Parameter[] parameters = method.getParameters();
for (int i = 0; i < parameters.length; i++) {
//将RequestBody注解修饰的参数作为请求参数
RequestBody requestBody = parameters[i].getAnnotation(RequestBody.class);
if (requestBody != null) {
argList.add(args[i]);
}
ModelAttribute modelAttribute = parameters[i].getAnnotation(ModelAttribute.class);
if (modelAttribute != null) {
argList.add(args[i]);
}
//将RequestParam注解修饰的参数作为请求参数
RequestParam requestParam = parameters[i].getAnnotation(RequestParam.class);
if (requestParam != null) {
Map<String, Object> map = new HashMap<>();
String key = parameters[i].getName();
if (!StringUtils.isEmpty(requestParam.value())) {
key = requestParam.value();
}
map.put(key, args[i]);
argList.add(map);
}
// PathVariable修饰的请求参数
PathVariable pathVariable = parameters[i].getAnnotation(PathVariable.class);
if (pathVariable != null) {
Map<String, Object> map = new HashMap<>();
String key = parameters[i].getName();
if (StringUtils.isNotBlank(pathVariable.value())) {
key = pathVariable.value();
}
map.put(key, args[i]);
argList.add(map);
}
}
return argList;
}
public static void main(String[]args){
try {
// 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
// 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
Credential cred = new Credential("AKIDlMm3EC2dxXw50f4C4f092ey2pLaaKnyt", "g5D4ey1nJZXEhtoSovkIZYGhqjLgkgNo");
// 实例化一个http选项,可选的,没有特殊需求可以跳过
HttpProfile httpProfile = new HttpProfile();
httpProfile.setEndpoint("faceid.tencentcloudapi.com");
// 实例化一个client选项,可选的,没有特殊需求可以跳过
ClientProfile clientProfile = new ClientProfile();
clientProfile.setHttpProfile(httpProfile);
// 实例化要请求产品的client对象,clientProfile是可选的
FaceidClient client = new FaceidClient(cred, "ap-shanghai", clientProfile);
// 实例化一个请求对象,每个接口都会对应一个request对象
IdCardOCRVerificationRequest req = new IdCardOCRVerificationRequest();
String url = "https://test-nft.oss-cn-hangzhou.aliyuncs.com/20210913/ff8e541497d1482895be1f038bb0430e/微信图片_20210913144401.jpg";
req.setImageUrl(url);
// 返回的resp是一个IdCardOCRVerificationResponse的实例,与请求对象对应
IdCardOCRVerificationResponse resp = client.IdCardOCRVerification(req);
// 输出json格式的字符串回包
System.out.println(IdCardOCRVerificationResponse.toJsonString(resp));
} catch (TencentCloudSDKException e) {
System.out.println(e.toString());
}
}
}
...@@ -13,8 +13,10 @@ import com.fzm.common.service.UserService; ...@@ -13,8 +13,10 @@ import com.fzm.common.service.UserService;
import com.fzm.common.utils.JwtUtil; import com.fzm.common.utils.JwtUtil;
import com.fzm.common.utils.OssUtil; import com.fzm.common.utils.OssUtil;
import com.fzm.common.utils.RedisUtil; import com.fzm.common.utils.RedisUtil;
import com.tencentcloudapi.faceid.v20180301.models.IdCardOCRVerificationResponse;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -125,8 +127,10 @@ public class UserController { ...@@ -125,8 +127,10 @@ public class UserController {
@Authentication @Authentication
@PostMapping("/auth/person") @PostMapping("/auth/person")
@ApiOperation(value = "个人认证") @ApiOperation(value = "个人认证")
public ResponseModel<Boolean> personAuth(@RequestBody @Validated AuthPerson authPerson) { public ResponseModel<IdCardOCRVerificationResponse> personAuth(@ApiParam("身份证正面照") @RequestParam MultipartFile front,
return ResponseModel.success(userService.personAuth(authPerson)); @ApiParam("身份证反面照") @RequestParam MultipartFile back) throws IOException {
return ResponseModel.success(userService.personAuth(front,back));
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment