接入文档
H5 lite方案(海外版)
API接口
获取比对结果
获取比对结果
# 调用URL
text
GET https://api-global.yljz.com/finauth/lite/get_result
注意:在生产环境中,请使用HTTPS的通信方式。HTTP方式的通信属于不安全链路,存在安全风险,请勿在生产环境中使用。在生产环境中使用HTTP方式的,将无法得到服务可靠性保障。
说明:此接口提供活体结果反查功能,可以以 biz_id 为索引对 FinAuth H5 验证结果进行反查。该接口的调用信息保存有效期为一天,且仅支持3次调用。第4次或超过有效期调用则会返回错误信息,建议在每笔业务结束之后及时的取回数据。
# 参数
| 参数 | 必选/可选 | 类型 | 参数说明 |
|---|---|---|---|
| api_key | 必选 | String | 调用此API的api_key |
| api_secret | 必选 | String | 调用此API的api_key的secret |
| biz_id | 必选 | String | 通过 get_token、notify_url 或 return_url 返回的活体业务编号 |
| return_verify_time | 可选 | String | 该参数用于控制验证发生时间信息的返回 0(默认):不返回做验证发生的时间 1:需要返回验证发生的时间 |
| return_image | 可选 | String | 此参数为可选参数,可在下面2种参数中选择,决定了是否返回活体图像数据:
|
# 返回值说明
| 参数 | 类型 | 说明 |
|---|---|---|
| request_id | String | API 调用的流水号 |
| status | String | 表示目前 FinAuth Lite 的使用状态: |
NOT_STARTED |
get_token 之后,并没有调用过 do 方法,还没有开始验证 | |
PROCESSING |
正在进行 FinAuth Lite 验证 | |
WEBRTC_UNSUPPORTED |
表示浏览器不支持引起失败 | |
OK |
完成了 FinAuth Lite 验证(OK 并不表示通过了验证,是流程正常结束) | |
FAILED |
验证流程未完成或出现异常
|
|
CANCELLED |
用户主动取消了验证流程 | |
TIMEOUT |
流程超时当处于 NOT_STARTED 或者 PROCESSING 状态时,liveness_result / verify_result 字段均不会返回 OK |
|
| fail_reason | String | get_token入参 get_fail_reason=1 时,可获取 "WEBRTC_UNSUPPORTED" 失败原因: |
NETWORK_ERROR |
因为网络问题无法连接 | |
PERMISSIONS_ERROR |
用户拒绝摄像头权限或浏览器(APP)不支持唤起摄像头权限 | |
SUPPORT_ERROR |
浏览器不支持 webRTC API 等 NETWORK_ERROR |
|
| biz_info | Json | 用户可以用此接口来传递一些额外信息 |
biz_id |
业务流串号,可以用于反查比对结果 | |
biz_no |
客户业务流水号,会在 notify 和 return 时原封不动地返回给客户 | |
biz_extra_data |
在调用 notify_url 和 return_url 时会返回的额外数据 | |
biz_id |
业务流串号,可以用于反查比对结果 | |
| time_used | Int | 整个请求所花费的时间,单位为毫秒,此字段必定返回 |
| liveness_result | Json | 活体检测结果;如果用户中途中断了活体流程,则此字段不返回。 |
result |
String | 活体检测的结果,返回值分为两类:
|
procedure_type |
String | 返回本次活体所使用的活体验证方式 |
flash |
通过炫彩活体方式进行活体验证 | |
distance |
通过距离活体方式进行活体验证 | |
still |
通过自拍一段人脸视频进行活体验证 | |
details (flash) |
Json | 活体检测结果的细节(procedure_type=flash) |
FACE_NOT_FOUND |
未检测到人脸次数 | |
SIDE_FACE |
未正对摄像头次数(偏转角不符合要求) | |
UPDOWN_FACE |
未正对摄像头次数(俯仰角不符合要求) | |
EYE_OCCLUSION |
遮挡眼部次数 | |
MOUTH_OCCLUSION |
遮挡嘴部次数 | |
AWAY_FROM_CAMERA |
过于远离摄像头次数 | |
CLOSE_TO_CAMERA |
过于靠近摄像头次数 | |
FACE_OUT_OF_CAMERA |
未正视摄像头次数 | |
HIGH_BRIGHTNESS |
光线过亮的次数 | |
LOW_BRIGHTNESS |
光线过暗的次数 | |
LOW_FACE_QUALITY |
视频中人脸质量太差的次数 | |
details (distance) |
Json | 活体检测结果的细节(procedure_type=distance) |
FACE_NOT_FOUND |
未检测到人脸次数 | |
SIDE_FACE |
未正对摄像头次数(侧脸) | |
UPDOWN_FACE |
未正对摄像头次数(仰脸或低头) | |
EYE_OCCLUSION |
遮挡眼部次数 | |
MOUTH_OCCLUSION |
遮挡嘴部次数 | |
AWAY_FROM_CAMERA |
过于远离摄像头次数 | |
CLOSE_TO_CAMERA |
过于靠近摄像头次数 | |
FACE_OUT_OF_CAMERA |
未正视摄像头次数 | |
HIGH_BRIGHTNESS |
光线过亮的次数 | |
LOW_BRIGHTNESS |
光线过暗的次数 | |
LOW_FACE_QUALITY |
视频中人脸质量太差的次数 | |
details (still) |
Json | 活体检测结果的细节(procedure_type=still且为上传视频模式时) |
UPLOAD_TIMES |
活体视频上传次数 | |
FACE_NOT_FOUND |
视频中没有检测到人脸的次数 | |
LOW_FACE_QUALITY |
视频中人脸质量太差的次数 | |
INVALID_VIDEO_DURATION |
视频时长不对的次数 | |
SR_ERROR |
语音识别结果有误的次数(静默活体可忽略) | |
NOT_SYNCHRONIZED |
视频唇语识别错误的次数(静默活体可忽略) | |
NO_AUDIO |
视频无声音的次数 | |
VIDEO_FORMAT_UNSUPPORTED |
视频格式错误的次数 | |
VIDEO_FACE_INCONSISTENT |
视频中出现了不一致的人脸 | |
face_genuineness |
Json | 表示对假脸攻击的判定,它包含四组置信度和阈值,均为实数取值 [0, 1] 区间。如果一个置信度大于其对应的阈值,则可以认为存在对应类型的假脸攻击 |
synthetic_face_confidence |
Float | 合成脸的置信度 |
synthetic_face_threshold |
Float | 合成脸的阈值 |
mask_confidence |
Float | 面具的置信度 |
mask_threshold |
Float | 面具的阈值 |
face_replacedInt |
只取值 0 或 1。0 表示未检测出换脸攻击,1 表示检测出了换脸攻击。注意:该区域只有非rtc静默活体。 | |
screen_replay_confidence |
Float | 屏幕翻拍的置信度 |
screen_replay_threshold |
Float | 屏幕翻拍的阈值 |
| verify_result | Json | 人脸比对结果;如果用户中途中断了活体流程或 comparison_type 为 -1,则此字段不返回。 |
error_message |
String | 在做人脸比对的时候出现错误 |
null |
表示没有出现错误 | |
NO_FACE_FOUND |
对应的图像没有检测到人脸。此错误会产生计费 | |
DATA_SOURCE_ERROR |
调用比对数据发生错误,一般来说是数据出错。出现此错误时建议停止业务,并立即联系 FinAuth 客服或商务,待确认后再开启业务 | |
INTERNAL_ERROR |
服务器内部错误,当此类错误发生时请再次请求,如果持续出现此类错误,请及时联系 FinAuth 客服或商务 | |
result_ref[x] |
活体采集人像与上传的 image_ref[x] 的比对结果 | |
confidence |
Float | 综合分数的置信度,取值 [0, 100],数字越大表示风险越小 |
thresholds |
Object | 一组用于参考的置信度阈值,包含四个字段,取值 [0, 100]: |
1e-3 |
Float | 风险为千分之一的置信度阈值 |
1e-4 |
Float | 风险为万分之一的置信度阈值 |
1e-5 |
Float | 风险为十万分之一的置信度阈值 |
1e-6 |
Float | 风险为百万分之一的置信度阈值 |
verify_time |
String | 验证发生的时间戳(单位:秒),仅当 return_verify_time=1 时返回该字段 |
| images | Json | 活体检测得到的图像,调用时通过 return_image 来选择,以 jpg 编码并用 base64 字符串返回,或返回为 null;当存在比对结果且比对结果中 error_message 为计费字段时,图像才会返回
|
| multifaces_tag | String | 仅当get_token的入参 return_multifaces_tag 参数为1时,返回此字段
|
| multifaces_image | String | 如果 multifaces_tag=1,则返回一张包含多人脸的图像,以 jpg 编码并用 base64 字符串返回;如果 multifaces_tag=0,则返回空 |
| device_risk_info | Json | 设备风险检测结果: |
device_info_level |
String | |
none |
表示未检测到风险 | |
middle |
表示中风险,需要人工复核 | |
high |
表示高风险,直接拦截 | |
device_info_tags |
Json | |
is_cookies_disabled |
Int | COOKIES 被禁用 |
is_code_tampered |
Int | 代码被篡改 |
is_virtual_browser |
Int | 虚拟浏览器 |
is_debug_mode |
Int | 调试模式 |
is_higher_device_risk_threshold |
Int | 高于设备风险阈值 |
| visual_attributes | Json | 性别年龄预估结果 |
age |
Int | 预估核验人活体图年龄 |
gender |
Int | 预估核验人活体图性别,男:0,女:1 |
age_image_ref1 |
Int | 预估比对参照人脸图年龄(仅 comparison_type=0 时返回) |
gender_image_ref1 |
Int | 预估比对参照人脸图性别,男:0,女:1(仅 comparison_type=0 时返回) |
| verify_risk_info | Json | 比对风险提示结果 |
verify_info_tags |
Json | 表示活体图与比对图的比对风险 |
is_gender_risk |
|
|
is_age_risk |
|
# 示例
# biz_info 示例
json
{
"biz_extra_data": "...",
"biz_id": "1462259748,52b13fb5-8dfb-4537-a62b-a641d5e929f1",
"biz_no": "cc47190f-5502-44a2-ab74-ea4f0f649f61"
}
# liveness_result 示例
json
{
"result": "PASS/FAIL",
"procedure_type": "video",
"details": {
"UPLOAD_TIMES": 5,
"FACE_NOT_FOUND": 0,
"LOW_FACE_QUALITY": 0,
"INVALID_VIDEO_DURATION": 1,
"SR_ERROR": 2,
"NOT_SYNCHRONIZED": 1,
"VIDEO_FORMAT_UNSUPPORTED": 0,
"NO_AUDIO": 0
},
"face_genuineness": {
"synthetic_face_confidence": 0.88,
"synthetic_face_threshold": 0.5,
"mask_confidence": 0.32,
"mask_threshold": 0.5,
"screen_replay_confidence": 0,
"screen_replay_threshold": 0.5
}
}
# verify_result 示例
json
{
"verify_time": 1462259763,
"result_ref1": {
"confidence": 68.918,
"thresholds": {
"1e-3": 64,
"1e-4": 69,
"1e-5": 74,
"1e-6": 79.9
}
}
}
# images 示例
json
{
"image_best": "data:image/jpeg;base64,..."
}
# device_risk_info 示例
json
{
"device_info_level": "none",
"device_info_tags": {
"is_cookies_disabled": "0",
"is_higher_device_risk_threshold": "0",
"is_debug_mode": "0",
"is_virtual_browser": "0",
"is_code_tampered": "0"
}
}
# visual_attributes 示例
json
{
"gender": 0,
"age": 31,
"age_image_ref1": 22,
"gender_image_ref1": 0
}
# verify_risk_info 示例
json
{
"verify_info_tags": {
"is_gender_risk": 0,
"is_age_risk": 0
}
}
# 成功示例
json
{
"request_id": "1462259763,e2d2f8d6-204b-4c43-92ea-1d62b071f83c",
"status": "OK",
"biz_info": {
"biz_extra_data": "...",
"biz_id": "1462259748,52b13fb5-8dfb-4537-a62b-a641d5e929f1",
"biz_no": "cc47190f-5502-44a2-ab74-ea4f0f649f61"
},
"liveness_result": {
"procedure_type": "flash",
"result": "PASS/FAIL",
"details": {
"UPLOAD_TIMES": 5,
"FACE_NOT_FOUND": 0,
"LOW_FACE_QUALITY": 0,
"INVALID_VIDEO_DURATION": 1,
"SR_ERROR": 2,
"NOT_SYNCHRONIZED": 1,
"VIDEO_FORMAT_UNSUPPORTED": 0,
"NO_AUDIO": 0
},
"face_genuineness": {
"synthetic_face_confidence": 0.88,
"synthetic_face_threshold": 0.5,
"mask_confidence": 0.32,
"mask_threshold": 0.5,
"screen_replay_confidence": 0,
"screen_replay_threshold": 0.5
}
},
"verify_result": {
"result_ref1": {
"confidence": 68.918,
"thresholds": {
"1e-3": 64,
"1e-4": 69,
"1e-5": 74,
"1e-6": 79.9
}
}
},
"images": {
"image_best": "data:image/jpeg;base64,..."
},
"time_used": 93
}
# 失败示例
json
{
"error_message": "RESULT_NOT_FOUND",
"request_id": "1462259901,fa79992d-ca61-48de-aa50-ea337c6aad42",
"time_used": 4
}
# 错误码列表
# GetResult 特有的 ERROR_MESSAGE
| HTTP 状态代码 | 错误信息 | 说明 |
|---|---|---|
| 400 | RESULT_NOT_FOUND | 此错误类型表示传入的业务编号错误 |
| 400 | VIDEO_FACE_OCCLUDE | 上传的视频中人脸被遮挡 |
# 通用的 ERROR_MESSAGE
| HTTP 状态代码 | 错误信息 | 说明 |
|---|---|---|
| 403 | AUTHENTICATION_ERROR | api_key 和 api_secret 不匹配 |
| 403 | AUTHORIZATION_ERROR:<reason> | api_key 被停用、调用次数超限、没有调用此API的权限,或者没有以当前方式调用此API的权限。目前的 <reason> 有:Denied.(没有权限调用当前API) |
| 403 | CONCURRENCY_LIMIT_EXCEEDED | 并发数超过限制 |
| 400 | MISSING_ARGUMENTS:<key> | 缺少某个必选参数 |
| 403 | DATA_DESTROYED | 超过可查询时间或超过最多可查询次数 |
| 400 | BAD_ARGUMENTS:<key> | 某个参数解析出错(比如必须是数字,但是输入的是非数字字符串;或者长度过长,etc.) |
| 404 | API_NOT_FOUND | 所调用的API不存在 |
| 500 | INTERNAL_ERROR | 服务器内部错误,当此类错误发生时请再次请求,如果持续出现此类错误,请及时联系 FinAuth 客服或商务 |