This commit is contained in:
77
2024-04-29 01:53:35 +08:00
parent fea74a2ac4
commit 89e0004600
4 changed files with 163 additions and 3 deletions

View File

@@ -68,5 +68,10 @@
<artifactId>wx-java-mp-spring-boot-starter</artifactId>
<version>4.4.0</version>
</dependency>
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java-faceid</artifactId>
<version>3.1.1008</version>
</dependency>
</dependencies>
</project>

View File

@@ -9,13 +9,17 @@ import com.ruoyi.xq.dto.app.pay.OrderCreateVo;
import com.ruoyi.xq.enums.common.SystemConfigEnum;
import com.ruoyi.xq.manager.SystemConfigManager;
import com.ruoyi.xq.service.AuthOrderService;
import com.ruoyi.xq.tencent.CreateAuthResp;
import com.ruoyi.xq.tencent.TencentAuthClient;
import com.tencentcloudapi.faceid.v20180301.models.GetDetectInfoEnhancedResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.commons.collections4.map.HashedMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
import java.math.BigDecimal;
import java.util.Map;
@@ -52,4 +56,44 @@ public class AuthOrderAppController {
map.put("price",authCardPrice);
return R.ok(map);
}
/**
* 实名核身鉴权
*
* @return
*/
@Operation(summary = "实名核身鉴权")
@GetMapping(value = "/detectAuth")
public R<?> detectAuth(String extra,String redirectUrl) {
CreateAuthResp token = TencentAuthClient.createToken(extra, redirectUrl);
return R.ok(token);
}
/**
* 获取实名核身结果信息
*
* @param bizToken
* @return
*/
@Operation(summary = "获取实名核身结果信息")
@GetMapping(value = "/getDetectInfo")
public R<?> getDetectInfo(@RequestParam String bizToken) {
GetDetectInfoEnhancedResponse detectInfo = TencentAuthClient.getDetectInfo(bizToken);
return R.ok(detectInfo);
}
/**
* 实名核身是否通过
*
* @param bizToken
* @return
*/
@Operation(summary = "实名核身是否通过")
@GetMapping(value = "/faceDetectIsPass")
public R<Map<String,Boolean>> faceDetectIsPass(@RequestParam String bizToken) {
boolean b = TencentAuthClient.faceDetectIsPass(bizToken);
Map<String,Boolean> map = new HashMap<>();
map.put("result",b);
return R.ok(map);
}
}

View File

@@ -0,0 +1,17 @@
package com.ruoyi.xq.tencent;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@Data
public class CreateAuthResp {
@JsonProperty("Url")
private String url;
@JsonProperty("BizToken")
private String bizToken;
@JsonProperty("RequestId")
private String requestId;
}

View File

@@ -0,0 +1,94 @@
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 java.util.Objects;
public class TencentAuthClient {
public static boolean faceDetectIsPass(String bizToken) {
GetDetectInfoEnhancedResponse resp = getDetectInfo(bizToken);
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) {
GetDetectInfoEnhancedResponse resp = null;
try {
Credential cred = new Credential("AKIDviL2b1KWHGNdR6gLwLbfaHpBSVQ8i8Pe", "DapskQxS7gBXlsqgP0a0KXXK8oy45INf");
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");
resp = client.GetDetectInfoEnhanced(req);
} catch (TencentCloudSDKException e) {
e.printStackTrace();
}
return resp;
}
public static CreateAuthResp createToken(String extra,String redirectUrl){
try{
// 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey此处还需注意密钥对的保密
// 代码泄露可能会导致 SecretId 和 SecretKey 泄露并威胁账号下所有资源的安全性。以下代码示例仅供参考建议采用更安全的方式来使用密钥请参见https://cloud.tencent.com/document/product/1278/85305
// 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
Credential cred = new Credential("AKIDviL2b1KWHGNdR6gLwLbfaHpBSVQ8i8Pe", "DapskQxS7gBXlsqgP0a0KXXK8oy45INf");
// 实例化一个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对象
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);
} catch (TencentCloudSDKException e) {
System.out.println(e.toString());
}
return null;
}
public static void main(String[] args) {
// createToken(null,null);
GetDetectInfoEnhancedResponse detectInfo = getDetectInfo("09792FA0-C269-401F-B8DB-E68B680E0728");
System.out.println(JSON.toJSONString(detectInfo));
}
}