diff --git a/ruoyi-xq/pom.xml b/ruoyi-xq/pom.xml index a81a31e..22b27c9 100644 --- a/ruoyi-xq/pom.xml +++ b/ruoyi-xq/pom.xml @@ -68,5 +68,10 @@ wx-java-mp-spring-boot-starter 4.4.0 + + com.tencentcloudapi + tencentcloud-sdk-java-faceid + 3.1.1008 + diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/AuthOrderAppController.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/AuthOrderAppController.java index d31926b..cd1ca90 100644 --- a/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/AuthOrderAppController.java +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/controller/app/AuthOrderAppController.java @@ -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> faceDetectIsPass(@RequestParam String bizToken) { + boolean b = TencentAuthClient.faceDetectIsPass(bizToken); + Map map = new HashMap<>(); + map.put("result",b); + return R.ok(map); + } } diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/tencent/CreateAuthResp.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/tencent/CreateAuthResp.java new file mode 100644 index 0000000..c75c436 --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/tencent/CreateAuthResp.java @@ -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; +} diff --git a/ruoyi-xq/src/main/java/com/ruoyi/xq/tencent/TencentAuthClient.java b/ruoyi-xq/src/main/java/com/ruoyi/xq/tencent/TencentAuthClient.java new file mode 100644 index 0000000..29b9281 --- /dev/null +++ b/ruoyi-xq/src/main/java/com/ruoyi/xq/tencent/TencentAuthClient.java @@ -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)); + + } +}