首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >手把手教你接入人脸核身:从零到上线完整教程

手把手教你接入人脸核身:从零到上线完整教程

原创
作者头像
gavin1024
发布于 2026-09-30 18:10:00
发布于 2026-09-30 18:10:00
530
举报

摘要:

从开通服务到用户刷脸成功返回结果,人脸核身的接入其实有一条清晰的路径。本文按照实际落地顺序,拆解每一步该做什么、容易卡在哪里,并给出服务端核心代码示例,帮你把整个流程一次走通。


一、动手前先理清三件事

接入之前,有三个问题需要先想清楚:

用哪个版本。 人脸核身有基础版、增强版、Plus 版等不同安全等级的产品,还有意愿核身、实名信息核验等专项能力。选择依据是业务的风险等级和合规要求。

走哪条接入渠道。 常见的渠道包括微信小程序、微信 H5、App SDK、PC 浏览器 H5,以及纯 API 调用。渠道决定了用户在什么界面上完成刷脸。

服务端准备做什么。 人脸核身不是纯客户端能力,需要服务端配合签发核身凭证、拉取核身结果。

二、整体架构:客户端和服务端各管一半

腾讯云慧眼 SDK 的集成分为两部分:

客户端集成:将慧眼 SDK 集成到你的业务 App、小程序或网页中,负责采集人脸视频、执行活体检测、完成人脸比对。

服务端集成:在你的服务器上暴露接口,负责向腾讯云慧眼服务端申请核身凭证(SdkToken),并通过 SdkToken 拉取最终的核身结果。

两边配合,才能得到一次完整且可信的核身结论。

三、完整交互流程(14 步)

一次完整的人脸核身会经过以下步骤:

代码语言:txt
复制
用户 → App → 业务服务端 → 慧眼服务端
  ↓        ↓           ↓
触发核身  请求Token   调用GetFaceIdToken
  ↓        ↓           ↓
收到Token ← 返回Token ← 返回SdkToken
  ↓
启动SDK(startHuiYanAuth)
  ↓
活体检测+人脸比对
  ↓
SDK回调通知结果
  ↓
业务服务端拉取结果(GetFaceIdResult)
  ↓
展示核身结果

详细步骤说明:

步骤

执行方

动作

1

用户

触发业务流程启动,准备调用核身

2

App

初始化配置,请求业务服务端获取 SdkToken

3

业务服务端

调用慧眼 API GetFaceIdToken 获取 SdkToken

4

慧眼服务端

返回 SdkToken

5

业务服务端

将 SdkToken 下发给 App

6

App

调用 startHuiYanAuth 启动核身,传入 SdkToken

7

SDK

采集并上传用户数据(活体数据等)

8

慧眼服务端

完成活体检测+人脸比对,返回结果

9

SDK

回调 App 通知核验完成

10

App

通知业务服务端获取结果

11

业务服务端

调用 GetFaceIdResult 获取核身结果

12

慧眼服务端

返回核身结果

13

业务服务端

下发结果给 App

14

App

展示核身结果

关键设计要点:第 3 步和第 11 步必须由服务端完成——Token 申请和结果拉取都走服务端签名请求,客户端无法伪造。

四、服务端核心接口与代码示例

服务端需要对接两个核心接口:

接口

作用

调用时机

GetFaceIdToken

获取核身 SdkToken

用户发起核身前

GetFaceIdResult

获取核身结果

SDK 回调完成后

4.1 接入准备

  1. 开通腾讯云人脸核身服务,并通过审核
  2. 在 API 密钥管理 获取 SecretId 和 SecretKey
  3. 引入你所熟悉语言的腾讯云 SDK(Go、Java、Python 等)

4.2 Go 语言示例

代码语言:go
复制
package main

import (
    "encoding/json"
    "log"
    "net/http"

    "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
    "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
    faceid "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/faceid/v20180301"
)

var FaceIdClient *faceid.Client

func init() {
    prof := profile.NewClientProfile()
    prof.HttpProfile.ReqTimeout = 60
    // 替换成你的 SecretId 和 SecretKey
    credential := common.NewCredential("SecretId", "SecretKey")
    var err error
    FaceIdClient, err = faceid.NewClient(credential, "ap-guangzhou", prof)
    if err != nil {
        log.Fatal("FaceIdClient init error: ", err)
    }
}

// GetFaceIdToken 获取人脸核身 Token
func GetFaceIdTokenHandler(w http.ResponseWriter, r *http.Request) {
    r.ParseForm()
    compareLib := r.FormValue("CompareLib")

    request := faceid.NewGetFaceIdTokenRequest()
    request.CompareLib = &compareLib

    response, err := FaceIdClient.GetFaceIdToken(request)
    if err != nil {
        w.Write([]byte("error: " + err.Error()))
        return
    }

    result := map[string]string{
        "FaceIdToken": *response.Response.FaceIdToken,
    }
    json.NewEncoder(w).Encode(result)
}

// GetFaceIdResult 获取核身结果
func GetFaceIdResultHandler(w http.ResponseWriter, r *http.Request) {
    r.ParseForm()
    faceIdToken := r.FormValue("FaceIdToken")

    request := faceid.NewGetFaceIdResultRequest()
    request.FaceIdToken = &faceIdToken

    response, err := FaceIdClient.GetFaceIdResult(request)
    if err != nil {
        w.Write([]byte("error: " + err.Error()))
        return
    }

    result := map[string]string{
        "Result": *response.Response.Result,
    }
    json.NewEncoder(w).Encode(result)
}

4.3 Java 语言示例

代码语言:java
复制
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.faceid.v20180301.FaceidClient;
import com.tencentcloudapi.faceid.v20180301.models.*;

public class FaceIdService {

    private static final String SECRET_ID = "你的SecretId";
    private static final String SECRET_KEY = "你的SecretKey";
    private static final String REGION = "ap-guangzhou";

    public static FaceidClient getClient() {
        Credential cred = new Credential(SECRET_ID, SECRET_KEY);
        HttpProfile httpProfile = new HttpProfile();
        httpProfile.setReqMethod("POST");
        ClientProfile clientProfile = new ClientProfile();
        clientProfile.setHttpProfile(httpProfile);
        return new FaceidClient(cred, REGION, clientProfile);
    }

    // 获取 FaceIdToken
    public static String getFaceIdToken(String compareLib) throws Exception {
        FaceidClient client = getClient();
        GetFaceIdTokenRequest req = new GetFaceIdTokenRequest();
        req.setCompareLib(compareLib);
        GetFaceIdTokenResponse resp = client.GetFaceIdToken(req);
        return resp.getFaceIdToken();
    }

    // 获取核身结果
    public static String getFaceIdResult(String faceIdToken) throws Exception {
        FaceidClient client = getClient();
        GetFaceIdResultRequest req = new GetFaceIdResultRequest();
        req.setFaceIdToken(faceIdToken);
        GetFaceIdResultResponse resp = client.GetFaceIdResult(req);
        return resp.getResult();
    }
}

4.4 Python 语言示例

代码语言:python
复制
import json
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.faceid.v20180301 import faceid_client, models

class FaceIdService:
    def __init__(self, secret_id, secret_key, region="ap-guangzhou"):
        self.cred = credential.Credential(secret_id, secret_key)
        self.region = region
        http_profile = HttpProfile()
        http_profile.reqMethod = "POST"
        client_profile = ClientProfile()
        client_profile.httpProfile = http_profile
        self.client = faceid_client.FaceidClient(self.cred, region, client_profile)

    def get_face_id_token(self, compare_lib="LIBRARY"):
        req = models.GetFaceIdTokenRequest()
        req.CompareLib = compare_lib
        resp = self.client.GetFaceIdToken(req)
        return resp.FaceIdToken

    def get_face_id_result(self, face_id_token):
        req = models.GetFaceIdResultRequest()
        req.FaceIdToken = face_id_token
        resp = self.client.GetFaceIdResult(req)
        return resp.Result

# 使用示例
if __name__ == "__main__":
    service = FaceIdService("你的SecretId", "你的SecretKey")
    token = service.get_face_id_token()
    print(f"Token: {token}")
    # result = service.get_face_id_result(token)
    # print(f"Result: {result}")

五、按渠道选择接入方式

渠道

适用场景

用户端形态

详细教程

微信小程序

微信生态内的业务

小程序内直接唤起

见文章 22

微信 H5

公众号、朋友圈跳转

网页内唤起摄像头

见文章 25

App SDK (Android)

自有 Android App

原生交互体验

见文章 23

App SDK (iOS)

自有 iOS App

原生交互体验

见文章 24

PC 浏览器 H5

网页端业务

需摄像头支持

见文章 25

如果业务主要在微信生态内,优先考虑小程序或微信 H5;如果是自有 App 且对交互体验要求高,选 App SDK。

六、上线前的检查清单

  • 服务开通并通过审核
  • License 已申请并正确配置到客户端
  • 服务端 GetFaceIdToken 接口已联通
  • 服务端 GetFaceIdResult 接口已联通
  • 摄像头权限的申请时机和提示文案已确认
  • 各种失败场景有兜底处理
  • 核身结果已与业务系统打通,核身通过后账号状态能正确更新
  • 核验记录可留存,满足后续查询与审计需要

腾讯云慧眼人脸核身提供小程序、H5、App SDK、API 等多种接入方式,可根据业务形态灵活组合。该系列产品正在限时特惠活动中,低至3.3折:https://cloud.tencent.com/act/pro/happynewyears

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 摘要:
  • 一、动手前先理清三件事
  • 二、整体架构:客户端和服务端各管一半
  • 三、完整交互流程(14 步)
  • 四、服务端核心接口与代码示例
    • 4.1 接入准备
    • 4.2 Go 语言示例
    • 4.3 Java 语言示例
    • 4.4 Python 语言示例
  • 五、按渠道选择接入方式
  • 六、上线前的检查清单
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档