首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >从调用失败到成功返回:人脸核身全链路排查指南

从调用失败到成功返回:人脸核身全链路排查指南

原创
作者头像
hollyx
发布于 2026-10-08 09:40:04
发布于 2026-10-08 09:40:04
330
举报

摘要:

人脸核身调用失败往往卡在某个具体环节。本文按"客户端 → 网络与签名 → 服务端 → 设备环境"四层拆解,每层给出可对照的错误码与处理动作,帮你快速定位问题究竟出在哪一步。


一、先定位问题在哪一层

排查的第一步不是改代码,而是判断问题发生在哪一层。按下面的顺序收集信息,可以快速缩小范围:

  1. 客户端能否正常发起核身(SDK 是否初始化成功、页面是否黑屏)
  2. 网络与签名是否通过(请求是否到达服务端、签名是否验签通过)
  3. 服务端接口返回什么错误(后台返回码 / API 错误码)
  4. 用户与环境在核身过程中看到什么提示(摄像头、光线、遮挡)

把这四类信息收集齐,问题范围基本就清楚了一半。下面逐层给出常见现象、定位方法与处理动作。

二、客户端层:SDK 初始化与编译

这一层的失败几乎都发生在"核身还没真正开始"之前,典型现象是 SDK 初始化失败、页面黑屏或编译报错。

现象

对应错误码

可能原因

处理动作

SDK 初始化失败

Android 211 / iOS 273 / Harmony 211

不存在 License 文件或 License 过期

确认 ekycLicense.license 已放入工程、未过期,且与所选模式匹配(基础版/增强版/Plus 版授权不同)

直接调启动检测报错

Android 216 / iOS 278

未调用 init() 就直接启动检测

严格遵循"先 init() 初始化,再启动核身"的调用顺序

权限不足报错

Android 218

相机/存储等运行时权限未授予

在 AndroidManifest 声明权限,并在运行时动态申请

运行时报类找不到

—

ProGuard/R8 混淆把 SDK 类裁剪了

在 keep 规则中保留 SDK 相关包,例如 -keep class com.tencent.** { *; }(以官方 SDK 文档给出的 keep 规则为准)

iOS 编译不通过

—

接入的 .mm/.m 文件未按 Objective-C++ 编译

检查文件后缀,确保参与编译的文件后缀正确

摄像头打开异常

Android 215 / iOS 277 / Harmony 215

摄像头被其他应用占用或获取失败

关闭占用摄像头的应用,释放后再发起核身

提示:iOS 若提示 Class not found,通常是 SDK 未正确链接或 framework 未设为 Embed & Sign,需在 Xcode 的 Build Phases 中确认。

三、网络与签名层

签名验签失败是这一层最高频的问题,本质是客户端生成的 sign 与服务端用相同密钥和算法重算的结果不一致,与人脸识别算法本身无关。腾讯云采用标准 HMAC-SHA256(大文件场景为 TC3-HMAC-SHA256)签名方案:

代码语言:txt
复制
sign = Base64( HmacSHA256(key = AppSecret, data = canonicalString) )

其中 canonicalString 必须严格满足:

  1. 所有参与签名的参数按字段名字典序升序排列;
  2. 每个键值对经 UTF-8 编码后执行 RFC 3986 兼容的 URL Encode(注意空格编码为 %20 而非 +);
  3. 键值间用 = 连接,参数间用 & 拼接;
  4. AppId、Timestamp、Nonce 为强制字段,缺一不可。

对照下表逐项排查:

现象 / 错误码

根因

处理动作

AuthFailure.SignatureFailure

签名不一致

比对密钥是否正确、参数字典序与编码是否合规,用官方签名调试工具交叉验证

AuthFailure.SignatureExpire

时间戳偏差超过 5 分钟

校准服务器时间并同步 NTP,检查时区设置

AuthFailure.SecretIdNotFound

SecretId 不存在

到控制台确认密钥未被删除/禁用,注意去除首尾空格

AuthFailure.InvalidSecretId

密钥类型不对

使用腾讯云 API 密钥类型的 SecretId/SecretKey

大文件报签名超限

默认签名方式不支持大文件

指定新签名方式:clientProfile.setSignMethod(ClientProfile.SIGN_TC3_256)

210 / 272 网络请求异常

网络不通或域名未加白

检查网络、代理配置,微信小程序需把腾讯云域名加入 request 合法域名

登录态 / cookie 缺失

渠道依赖登录态票据

引导用户重新进入核身流程获取有效票据

FailedOperation.RequestTimeout

接口调用超时(上限 5 秒)

控制图片/视频大小,优化网络状况

建议:优先用官方 SDK 调用,SDK 内含签名生成逻辑,可避免自行组装复杂签名导致的各类错误。子账号调用还需确认 CAM 策略已授予慧眼相关操作权限。

四、服务端层:后台返回码

服务端调用成功后,仍可能返回业务错误码。以下基于腾讯云慧眼官方错误码整理,按类别对照:

系统返回码

返回码

含义

处理动作

0

成功

—

2 / 3 / 17

调用方式出错

对照接入文档检查调用姿势

4 / 7 / 8

服务异常

稍后重试或联系客服

14

本次校验已完成

无需重复提交

15

token 过期

重新拉取 token 后重试

18

超出限频次数

做调用节流 + 退避重试

19

超出有效期

重新发起核身流程

活体检测返回码

返回码

含义

处理动作

1001

引擎超时

稍后重试

1003 / 1004 / 1005

人脸验证失败

引导用户重试

1007

命中风控逻辑

结合设备风险标签进一步判断

1202

光线不佳

提示用户在光源充足的室内环境验证

证件图像比对返回码

返回码

含义

处理动作

2001

引擎超时

稍后重试

2002 / 2003

姓名 / 身份证号有误

提示用户核对后重试

2005 / 2007

未查询到身份 / 照片信息

引导通过其他渠道验证

2006

姓名与身份证号不匹配

提示核实身份后重试

2011

疑似非活体

引导确认为本人后重试

2012

检测到多张人脸

提示保持视频中只有本人

2013

脸部未完整露出

提示正脸面对屏幕

2014

视频像素太低

提示更换手机重试

2015 / 2016

比对失败 / 相似度未达阈值

引导确认身份后重试

说明:返回码是否计费与业务是否开通相关,完整清单以官方错误码文档为准。API 侧公共错误码(如 InvalidParameterValue.BizTokenIllegal、UnauthorizedOperation.Nonactivated)表示 BizToken 非法或服务未开通,需先到控制台开通服务并核对 BizToken。

五、设备与环境层

很多"看起来是代码问题"的失败,其实来自设备环境。这类问题需要在交互上给出明确提示,而不是笼统报错:

  • 摄像头被占用:其他应用(如视频通话)占用了摄像头,关闭后重试。
  • 摄像头权限被拒绝:引导用户到系统设置重新授权。
  • 光线过暗或逆光:对应返回码 1202,提示在光源充足的室内环境验证。
  • 面部被遮挡:口罩、帽子、墨镜会导致活体检测不通过,提示移除遮挡物。
  • 浏览器不支持:H5 场景下部分浏览器不支持实时检测模式,建议更换浏览器或使用备用方案。
  • 设备风险(Plus 版):GetFaceIdResult 可返回设备风险标签,如 01 Root/越狱、03 模拟器、05 摄像头被劫持等,命中时结合业务风控处置。

六、排查流程总结

碰到调用失败时,按这个顺序走:

  1. 分层定位:先收集客户端提示、接口返回码和用户环境三类信息,判断问题落在哪一层;
  2. 逐项排除:对照上表在该层内定位具体错误码,执行对应处理动作;
  3. 闭环兜底:确认失败路径有明确的用户提示和重试入口,避免用户卡死在错误页。

如果按上述方式仍无法定位,保留完整的调用日志(含 RequestId、错误码、请求时间与参数),联系官方技术支持协助排查。

排查过程中如需查阅最新错误码与接入文档,可参考腾讯云慧眼人脸核身的官方文档。当前慧眼产品正在开展限时特惠活动,低至 3.3 折,详情见活动页面。

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

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

目录
  • 摘要:
  • 一、先定位问题在哪一层
  • 二、客户端层:SDK 初始化与编译
  • 三、网络与签名层
  • 四、服务端层:后台返回码
  • 五、设备与环境层
  • 六、排查流程总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档