阿里云实人认证 java 后台代码 前端请求后台后台返回token和自己创建的ticketId给前端
@PostMapping("/AliAuthen")
public ResultModel AliAuthen(){
//创建DefaultAcsClient实例并初始化
DefaultProfile profile = DefaultProfile.getProfile(
"cn-hangzhou", //默认
"", //您的Access Key ID
""); //您的Access Key Secret
IAcsClient client = new DefaultAcsClient(profile);
String biz = ""; //您在控制台上创建的、采用RPBasic认证方案的认证场景标识, 创建方法:https://help.aliyun.com/document_detail/59975.html
String ticketId = UUID.randomUUID().toString(); //认证ID, 由使用方指定, 发起不同的认证任务需要更换不同的认证ID
String token = null; //认证token, 表达一次认证会话
int statusCode = -1; //-1 未认证, 0 认证中, 1 认证通过, 2 认证不通过
//1. 服务端发起认证请求, 获取到token
//GetVerifyToken接口文档:https://help.aliyun.com/document_detail/57050.html
GetVerifyTokenRequest getVerifyTokenRequest = new GetVerifyTokenRequest();
getVerifyTokenRequest.setBiz(biz);
getVerifyTokenRequest.setTicketId(ticketId);
try {
GetVerifyTokenResponse response = client.getAcsResponse(getVerifyTokenRequest);
token = response.getData().getVerifyToken().getToken(); //token默认30分钟时效,每次发起认证时都必须实时获取
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
Map<String,Object> map = new HashMap();
map.put("token",token);
map.put("ticketId",ticketId);
return ResultModel.success(map);
}
前端认证通知结果请求后台(也可以不请求,建议以后台的返回认证结果为主)
@PostMapping("/getAliResult")
public ResultModel getAliResult(Long userId,String ticketId,HttpServletRequest request) throws IOException {
DefaultProfile profile = DefaultProfile.getProfile(
"cn-hangzhou", //默认
"", //您的Access Key ID
""); //您的Access Key Secret
IAcsClient client = new DefaultAcsClient(profile);
String biz = ""; //您在控制台上创建的、采用RPBasic认证方案的认证场景标识, 创建方法:https://help.aliyun.com/document_detail/59975.html
// String ticketId = UUID.randomUUID().toString(); //认证ID, 由使用方指定, 发起不同的认证任务需要更换不同的认证ID
int statusCode = -1;
GetStatusRequest getStatusRequest = new GetStatusRequest();
getStatusRequest.setBiz(biz);
getStatusRequest.setTicketId(ticketId);
try {
GetStatusResponse response = client.getAcsResponse(getStatusRequest);
statusCode = response.getData().getStatusCode();
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
//7. 服务端获取认证资料
//GetMaterials接口文档:https://help.aliyun.com/document_detail/57641.html
GetMaterialsRequest getMaterialsRequest = new GetMaterialsRequest();
getMaterialsRequest.setBiz(biz);
getMaterialsRequest.setTicketId(ticketId);
if( 1 == statusCode || 2 == statusCode ) { //认证通过or认证不通过
try {
if(1 == statusCode){
GetMaterialsResponse response = client.getAcsResponse(getMaterialsRequest);
GetMaterialsResponse.Data data = response.getData();
//身份证正反面图片 阿里云只会暂时保管,几小时就会失效,所以需要的把图片下载
下来
String idCardFrontPic = data.getIdCardFrontPic()";
String idCardBackPic = data.getIdCardBackPic()";
String picturefront = getPicture(request,idCardFrontPic );
String pictureback = getPicture(request,idCardBackPic );
}
if(2== statusCode){
return ResultModel.error(false);
}
//后续业务处理
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
}
return ResultModel.success(true);
}
引用的pom
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-cloudauth</artifactId>
<version>1.3.1</version>
</dependency>
下载阿里云图片工具类
//阿里云图片保存到本地
public static String getPicture(HttpServletRequest request,String urlHttp){
String name=System.currentTimeMillis() + ".jpg";
String na = "/upimgs/" + name;
String filename = request.getServletContext().getRealPath("/WEB-INF")+na;
//String file = "D://aa" + "/" + new Date().getTime() + ".jpg";
try {
URL url = new URL(urlHttp);
BufferedImage img = ImageIO.read(url);
ImageIO.write(img, "jpg", new File(filename));
} catch (Exception e) {
e.printStackTrace();
}
return filename;
}