package com.ruoyi.xq.tencent; import com.alibaba.fastjson.JSON; import com.ruoyi.xq.util.JsonUtils; import com.tencentcloudapi.common.AbstractModel; 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.*; import lombok.extern.slf4j.Slf4j; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Objects; @Slf4j public class TencentAuthClient { private final static String SECRET_ID = "AKIDviL2b1KWHGNdR6gLwLbfaHpBSVQ8i8Pe"; private final static String SECRET_KEY = "DapskQxS7gBXlsqgP0a0KXXK8oy45INf"; public static boolean faceDetectIsPass(GetDetectInfoEnhancedResponse resp) { if (!Objects.isNull(resp)) { DetectInfoText text = resp.getText(); return !Objects.isNull(text) && text.getErrCode().intValue() == 0; } return false; } /** * 实名核身鉴权 * * @return */ public static GetDetectInfoEnhancedResponse getDetectInfo(String bizToken) throws TencentCloudSDKException { GetDetectInfoEnhancedResponse resp = null; Credential cred = new Credential(SECRET_ID, SECRET_KEY); HttpProfile httpProfile = new HttpProfile(); httpProfile.setEndpoint("faceid.tencentcloudapi.com"); httpProfile.setConnTimeout(10); // 请求连接超时时间,单位为秒(默认60秒) httpProfile.setWriteTimeout(10); // 设置写入超时时间,单位为秒(默认0秒) httpProfile.setReadTimeout(10); ClientProfile clientProfile = new ClientProfile(); clientProfile.setHttpProfile(httpProfile); FaceidClient client = new FaceidClient(cred, "", clientProfile); GetDetectInfoEnhancedRequest req = new GetDetectInfoEnhancedRequest(); req.setBizToken(bizToken); req.setInfoType("0"); req.setRuleId("1"); return client.GetDetectInfoEnhanced(req); } public static CreateAuthResp createToken(String extra,String redirectUrl) throws TencentCloudSDKException { // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密 // 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305 // 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取 Credential cred = new Credential(SECRET_ID, SECRET_KEY); // 实例化一个http选项,可选的,没有特殊需求可以跳过 HttpProfile httpProfile = new HttpProfile(); httpProfile.setEndpoint("faceid.tencentcloudapi.com"); httpProfile.setConnTimeout(10); // 请求连接超时时间,单位为秒(默认60秒) httpProfile.setWriteTimeout(10); // 设置写入超时时间,单位为秒(默认0秒) httpProfile.setReadTimeout(10); // 实例化一个client选项,可选的,没有特殊需求可以跳过 ClientProfile clientProfile = new ClientProfile(); clientProfile.setHttpProfile(httpProfile); // 实例化要请求产品的client对象,clientProfile是可选的 FaceidClient client = new FaceidClient(cred, "", clientProfile); // 实例化一个请求对象,每个接口都会对应一个request对象 DetectAuthRequest req = new DetectAuthRequest(); req.setRuleId("1"); // 透传参数 req.setExtra(extra); // 跳转的URL req.setRedirectUrl(redirectUrl); // 返回的resp是一个DetectAuthResponse的实例,与请求对象对应 DetectAuthResponse resp = client.DetectAuth(req); // 输出json格式的字符串回包 System.out.println(AbstractModel.toJsonString(resp)); return JsonUtils.parseObject(AbstractModel.toJsonString(resp), CreateAuthResp.class); } public static void main(String[] args) throws TencentCloudSDKException { // createToken(null,null); GetDetectInfoEnhancedResponse detectInfo = getDetectInfo("C454630F-0E21-4ABB-8575-3A4DA14B0BCF"); System.out.println(JSON.toJSONString(detectInfo)); base64ToVideo(detectInfo.getIdCardData().getOcrFront(), "D:\\test\\front.jpg"); base64ToVideo(detectInfo.getIdCardData().getOcrBack(), "D:\\test\\back.jpg"); base64ToVideo(detectInfo.getBestFrame().getBestFrame(), "D:\\test\\best.jpg"); base64ToVideo(detectInfo.getVideoData().getLivenessVideo(), "D:\\test\\123.mp4"); } public static void base64ToVideo(String base64, String targetPath) { try { //base解密 byte[] videoByte = new sun.misc.BASE64Decoder().decodeBuffer(base64); File videoFile = new File(targetPath); //输入视频文件 FileOutputStream fos = new FileOutputStream(videoFile); fos.write(videoByte, 0, videoByte.length); fos.flush(); fos.close(); } catch (IOException e) { log.error("base64转换为视频异常",e); } } }