文档中心>人脸核身

整体接入流程说明

最近更新时间:2024-11-18 14:50:12

我的收藏

接入准备

1. 在调用人脸核身接口前,您需要先 申请开通腾讯云人脸核身服务,并通过审核。
2. 审核成功后,联系我们获取最新的 SDK 及 License 。

整体架构图

下图为慧眼 SDK 集成的架构图:



慧眼 SDK 集成包括两部分:
1. 客户端集成: 将慧眼 SDK 集成到您的(接入方)业务 App 中。
2. 服务器端集成: 在您的(接入方)服务器中公开您的应用程序的端点,以便业务 App 可以与您的服务器交互,然后访问慧眼 API 以获取核身流程的 SdkToken 以及通过 SdkToken 拉取最终的核身结果。

整体交互流程

接入方只需要传入 Token 并启动对应的 App SDK ,便可以实现包含活体检测+人脸比对全流程的用户身份认证,待终端用户完成认证后,接入方可通过慧眼 API 接口获取完整的认证结果。
获取 Token 的 API 接口:GetFaceIdToken
获取 SDK 核验结果的 API 接口:GetFaceIdResult
下图展示了 SDK、客户端以及服务器端的整体交互逻辑。



具体的详细交互流程如下
1. 用户触发业务流程启动,接入方 App 准备调用核身业务场景。
2. 接入方 App 进行初始化配置,并发送请求到接入方服务端,告知启动一次核身业务需要活体业务 SDK Token。
3. 接入方服务端调用慧眼服务端 API 接口GetFaceIdToken,获取 SDK Token。
4. 慧眼服务端 API 接口 GetFaceIdToken 返回 SDK Token 信息。
5. 接入方后台服务将获取到的 SDK Token,下发给接入方的 App。
6. 接入方 App 调用慧眼 SDK 的启动接口 startHuiYanAuth,传入 SDK Token 配置信息,开始核身验证。
7. 慧眼 SDK 捕捉并上传所需的用户数据(包括活体数据等),上传至慧眼服务端,进行核身验证 。
8. 慧眼服务端在完成核身检测(包括活体与比对流程)以后,会返回结果给慧眼 SDK 。
9. 慧眼 SDK 主动回调接入方 App,通知核验完成以及核验状态。
10. 接入方 App 接收到回调以后,发送请求通知接入方服务端去主动获取本次核身的结果,进行确认检查。
11. 接入方服务端主动调用慧眼服务端 API 接口GetFaceIdResult,传入相关参数以及本次业务的 Token,去获取本次核身的结果。
12. 慧眼服务端会返回本次核身的结果到接入方服务端。
13. 接入方服务端接收到本次核身的结果后,下发需要的信息到接入方 App,接入方 App 告知用户核身的结果。
14. 接入方 App 展示最后的结果,呈现在UI界面上,告知用户核身的结果。

接入流程

服务器端集成

集成准备

在服务端集成之前,您需要按照 三分钟跑通接口 中的说明进行操作,开通腾讯云慧眼服务,并且在 API 密钥管理 中获取 SecretId 和 SecretKey。除此之外您还需要按照 三分钟跑通接口 中的操作流程,引入您所熟悉开发语言的 SDK 包到您服务端模块中,以确保可以成功调用腾讯云 API 以及正确处理 API 请求和响应。

开始集成

为了接入方业务 App 能够跟接入方服务端正常交互,接入方服务端需要调用慧眼 API 接口 GetFaceIdToken 获取 SDKToken 串联整个核身流程,以及调用 GetFaceIdResult 接口获取核身结果,接入方服务端需要提供相应的端点给接入方客户端调用,下面的示例代码使用 Golang 语言作为案例,展示如何在服务端调用慧眼 API 接口并拿到正确的响应结果。
注意:
该示例中仅演示接入方服务端与慧眼API服务交互所需要的处理逻辑,如果有需要的话您需要自己实现您的业务逻辑,例如:
当您通过 GetFaceIdToken 接口获取核身 SDKToken 之后,可以将接入方 App 需要的其他响应同 SDKToken 一并返回给客户端。
当您通过 GetFaceIdResult 接口获取核身结果之后,可以将返回的最佳帧照片保存起来,以便后续业务逻辑使用。
var FaceIdClient *faceid.Client

func init() {
// 初始化客户端配置对下,您可以指定超时时间和其他配置项
prof := profile.NewClientProfile()
prof.HttpProfile.ReqTimeout = 60
// TODO 需要替换成您调用账号的 SecretId 和 SecretKey
credential := cloud.NewCredential("SecretId", "SecretKey")
var err error
// 初始化调用慧眼人脸核身服务的客户端
FaceIdClient, err = faceid.NewClient(credential, "ap-guangzhou", prof)
if nil != err {
log.Fatal("FaceIdClient init error: ", err)
}
}

// GetFaceIdToken 获取人脸核身Token
func GetFaceIdToken(w http.ResponseWriter, r *http.Request) {
log.Println("get face id token")
// 步骤1: 解析请求参数
_ = r.ParseForm()
var CompareLib = r.FormValue("CompareLib")

// 步骤2: 初始化请求对象,并给必要的参数赋值
request := faceid.NewGetFaceIdTokenRequest()
request.CompareLib = &CompareLib
// 步骤3: 通过FaceIdClient调用人脸核身服务
response, err := FaceIdClient.GetFaceIdToken(request)

// 步骤4: 处理腾讯云API的响应,并构造返回对象
if nil != err {
_, _ = w.Write([]byte("error"))
return
}
faceIdToken := response.Response.FaceIdToken
apiResp := struct {
FaceIdToken *string
}{FaceIdToken: faceIdToken}
b, _ := json.Marshal(apiResp)

// ... 其他业务处理代码

//步骤5: 返回服务响应
_, _ = w.Write(b)
}

// GetFaceIdResult 获取人脸核身核验结果
func GetFaceIdResult(w http.ResponseWriter, r *http.Request) {
// 步骤1: ... 解析请求参数
_ = r.ParseForm()
FaceIdToken := r.FormValue("FaceIdToken")
// 步骤2: 初始化请求对象,并给必要的参数赋值
request := faceid.NewGetFaceIdTokenRequest()
request.FaceIdToken = &FaceIdToken
// 步骤3: 通过FaceIdClient调用人脸核身服务
response, err := FaceIdClient.GetFaceIdResult(request)

// Step 4: 处理腾讯云API的响应,并构造返回对象
if nil != err {
_, _ = w.Write([]byte("error"))
return
}
result := response.Response.Result
apiResp := struct {
Result *string
}{Result: result}
b, _ := json.Marshal(apiResp)

// ... 其他业务处理代码

//步骤5: 返回服务响应
_, _ = w.Write(b)
}

Android SDK 集成

请参见 Android集成文档

iOS SDK 集成

请参见 iOS集成文档