SDK-验证接口
verify
接口说明
此接口用于将KYC验证 SDK所获得的数据进行上传,并获取活体验证、人脸比对、攻击防范等结果信息。
此接口只适用于FaceID MegLiveStill SDK 2.0.0及以上版本,SDK 1.3版本及以下版本不需调用此接口。请调用get_result接口获取活体和比对结果,请参考对应版本历史文档(见该文档最下方)。
接口地址
POST https://api.megvii.com/faceid/v3/sdk/verify
参数
参数名 | 必选/可选 | 类型 | 参数说明 |
---|---|---|---|
sign | 必选 | String | 调用此API而生成的签名 ; 生成签名本身可能存在特殊字符,需要对此参数进行 urlencode |
sign_version | 必选 | String | 签名算法版本号,目前仅支持:"hmac_sha1" |
biz_token | 必选 | String | get_biz_token接口获得的biz_token |
meglive_data | 必选 | File | 此参数需要上传由FaceID MegLiveStill SDK 2.0.0及以上版本生成的数据,内容包括活体验证过程中的数据,和采集到的人脸数据。请不要对数据包做任何调整,直接提交接口即可。 |
返回值
参数 | 类型 | 说明 |
---|---|---|
request_id | String | 用于区分每一次请求的唯一的字符串。此字符串可以用于后续数据反查。此字段必定返回。 |
biz_no | String | get_biz_token 接口传入的业务流水号 |
time_used | Int | 整个请求所花费的时间,单位为毫秒。此字段必定返回。 |
result_code | Int | 表示本次验证的结果状态码,参见下面详述 |
result_message | String | 开发者可通过此字段信息知晓具体的原因,参见下面详述 |
verification | Json | 当“verbose=1”,且“result状态码为1000、2000系列”时,本字段才会返回。 人脸比对的详细结果,可能的字段如下: - idcard: Json类型, 表示活体照片和参考数据比对的结果,具体包括以下字段: -- confidence: 综合分数,Float类型,取值[0,100],数字越大表示风险越小。 -- thresholds: 一组用于参考的置信度阈值,Json类型,包含三个字段,均为Float类型、取值[0,100]: --- 1e-3: 风险为千分之一的置信度阈值; --- 1e-4: 风险为万分之一的置信度阈值; --- 1e-5: 风险为十万分之一的置信度阈值; --- 1e-6: 风险为百万分之一的置信度阈值; - ref1: Json类型,表示活体照片和image_ref1的比对结果,仅当get_biz_token中存在image_ref1时返回,字段和idcard字段相同。 - ref2: Json类型,表示活体照片和image_ref2的比对结果,仅当get_biz_token中存在image_ref2时返回,字段和idcard字段相同。 |
attack_result | Json | 当“result状态码非4200系列”时,本字段才会返回: "score":Float类型,取值[0,1]。代表攻击的分数,分数越高表明攻击的可能性越大 "threshold":Float类型,取值[0,1]。代表攻击的阈值 "result":Bool类型,取值True或者False。代表云端攻击判断的结果,False代表不是攻击,True代表是攻击。 注: 当在App-GetBizToken中设置参数“force_compare=1”时,则该API会忽略云端的活体判断,用户需要自行通过此字段来判断是否是活体。 云端采用默认策略是判断score >= threshold时,代表此次可能是攻击。 |
images | Json | 活体照片, 字段如下: image_best: 活体检测获得的最优照片,base64编码。该照片会和参考照片或者用户上传的上传照片进行比对。 |
error | String | HTTP status code非200时返回,参见下面详述(HTTP状态码和对应的ERROR字段说明) |
返回结果示例:成功
{
"time_used":1448,
"verification":{
"idcard":{
"confidence":86.63057,
"thresholds":{
"1e-3":62.168713,
"1e-5":74.39926,
"1e-4":69.31534,
"1e-6":78.038055
}
}
},
"attack_result":{
"score":0.26,
"threshold":0.5,
"result":False
},
"request_id":"1531397565,39b19451-393c-4fc4-8fae-6dc74b2b00d7",
"images":{
"image_best":"xxxxxxxxxxx"
},
"biz_no":"",
"result_message":"SUCCESS",
"result_code":1000
}
返回结果示例:失败
{
"error": "AUTHORIZATION_ERROR: INVALID_SIGN"
}
错误码说明:
Result_code&result_message说明
result_code | result_message | 含义解释 |
---|---|---|
1000 | SUCCESS | 待比对照片与参考照片比对结果是同一个人 |
2000 | PASS_LIVING_NOT_THE_SAME | 待比对照片与参考照片比对结果不是同一个人 |
3000 | NO_ID_CARD_NUMBER | 无此身份证号 |
3000 | ID_NUMBER_NAME_NOT_MATCH | 身份证号,姓名不匹配 |
3000 | NO_FACE_FOUND | 参考照片中找不到人脸 |
3000 | NO_ID_PHOTO | 无法获取参考照片 |
3000 | PHOTO_FORMAT_ERROR | 参考照片格式错误 |
3000 | DATA_SOURCE_ERROR | 其他参考照片错误 |
4100 | FAIL_LIVING_FACE_ATTACK | 未经过活体判断,可能的原因:是假脸攻击 |
4100 | VIDEO_LACK_FRAMES | 获取到的活体数据故障,请换一台手机重试 |
4100 | FAIL_EYES_CLOSE_DETECTION | 未通过闭眼检测,活体失败 |
4200 | BIZ_TOKEN_DENIED | 传入的 biz_token 不符合要求 |
4200 | AUTHENTICATION_FAIL | 鉴权失败 |
4200 | MOBILE_PHONE_NOT_SUPPORT | 手机在不支持列表里 |
4200 | SDK_TOO_OLD | SDK版本过旧,已经不被支持 |
4200 | MOBILE_PHONE_NO_AUTHORITY | 没有权限(运动传感器、存储、相机) |
4200 | USER_CANCELLATION | 用户活体失败,可能原因:用户取消了 |
4200 | USER_TIMEOUT | 用户活体失败,可能原因:验证过程超时 |
4200 | VERIFICATION_FAILURE | 用户活体失败,可能原因:验证失败 |
4200 | UNDETECTED_FACE | 用户活体失败,可能原因:未检测到人脸 |
4200 | ACTION_ERROR | 用户活体失败,可能原因:用户动作错误; |
5000 | API_KEY_BE_DISCONTINUED | api_key被停用 |
5000 | IP_NOT_ALLOWED | 不允许访问的IP |
5000 | NON_ENTERPRISE_CERTIFICATION | 客户未进行企业认证 |
5000 | BALANCE_NOT_ENOUGH | 余额不足 |
5000 | MORE_RETRY_TIMES | 获取服务器配置时超过重试次数 |
5000 | ACCOUNT_DISCONTINUED | 用户帐号已停用 |
5000 | EXPIRED_SIGN | 签名过期 |
5000 | INVALID_SIGN | 无效的签名 |
5000 | REPLAY_ATTACK | 重放攻击,单次有效的签名被多次使用 |
6000 | USER_CANCEL | 用户取消 |
6000 | NO_CAMERA_PERMISSION | 没有打开相机的权限,请开启权限后重试 |
6000 | ILLEGAL_PARAMETER | 传入参数不合法 |
6000 | DEVICE_NOT_SUPPORT | 无法启动相机,请确认摄像头功能完好 |
6000 | INVALID_BUNDLE_ID | 信息验证失败,请重启程序或设备后重试 |
6000 | NETWORK_ERROR | 连不上互联网,请连接上互联网后重试 |
6000 | FACE_INIT_FAIL | 无法启动人脸识别,请稍后重试 |
6000 | LIVENESS_DETECT_FAILED | 活体检测不通过 |
6000 | NO_SENSOR_PERMISSION | 无法读取运动数据的权限,请开启权限后重试 |
6000 | INIT_FAILED | 初始化失败 |
9000 | LIVING_NOT_START | 活体验证没有开始 |
9000 | LIVING_IN_PROGRESS | 正在进行验证 |
9000 | LIVING_OVERTIME | 操作超时,由于用户在长时间没有进行操作 |
HTTP状态码和对应的ERROR字段说明
HTTP状态码 | ERROR字段 | 说明 |
---|---|---|
403 | INVALID_SIGN | 无效签名 |
403 | AUTHENTICATION_ERROR | api_key 和 api_secret 不匹配。 |
403 | AUTHORIZATION_ERROR:<reason> | api_key被停用、调用次数超限、没有调用此API的权限,或者没有以当前方式调用此API的权限。 reason>取值: API_KEY_BE_DISCONTINUED:api_key被停用 IP_NOT_ALLOWED:不允许访问的IP(预留设计) MORE_RETRY_TIMES:超过重试次数 EXPIRED_SIGN:签名已过期 INVALID_SIGN:无效签名 其他可能的错误码,请预留处理方案 其他可能的错误码,请预留处理方案。 |
429 | CONCURRENCY_LIMIT_EXCEEDED | 并发数超过限制 |
400 | MISSING_ARGUMENTS:<key> | 缺少某个必选参数。 |
400 | BAD_ARGUMENTS:<key> | 某个参数解析出错(比如必须是数字,但是输入的是非数字字符串; 或者长度过长) |
400 | BIZ_TOKEN_USED | biz_token 已使用 |
400 | MEGLIVE_DATA_ERROR | 上传的meglive_data数据包解析失败。请将SDK产生的meglive_data数据包直接传递到此API,任何对数据包的修改都会导致数据包解析失败的问题。 |
400 | MEGLIVE_DATA_BIZ_TOKEN_NOT_MATCH | 上传的meglive_data包中的biz_token和传入参数biz_token不一致。 |
404 | API_NOT_FOUND | 所调用的API不存在。 |
413 | Request Entity Too Large | 客户发送的请求大小超过了20MB限制。该错误的返回格式为纯文本,不是json格式。 |
500 | INTERNAL_ERROR | 服务器内部错误,当此类错误发生时请再次请求,如果持续出现此类错误,请及时联系 FaceID 客服或商务 |
当前版本
- v2.0.0