接入文档
H5 lite方案
API接口
Plus版(意愿活体)
获取比对结果
获取比对结果

# 调用URL

GET https://api.yljz.com/finauth/lite/plus/get_result

结构体请求限制:40MB

注意:在生产环境中,请使用HTTPS的通信方式。HTTP方式的通信属于不安全链路,存在安全风险,请勿在生产环境中使用。在生产环境中使用HTTP方式的,将无法得到服务可靠性保障。

说明:此接口提供活体结果反查功能,可以以biz_id为索引对 FinAuth H5验证结果进行反查。该接口的调用信息保存有效期为一天,且仅支持3次调用。第4次或超过有效期调用则会返回错误信息,建议在每笔业务结束之后及时的取回数据。

# 参数

必选/可选 参数 类型 参数说明
必选 sign String 调用此API客户的签名,具体的签名产生方式请查阅鉴权说明
注:签名参数含+、/、=等特殊字符,手动拼接 URL 或浏览器直接访问时,务必进行 URL 编码,否则会导致验签失败。
必选 sign_version String 签名算法版本
  • hmac_sha1
  • hmac_sha256
必选 biz_id String 通过get_token, notify_url或者return_url返回的活体业务编号

# 返回值说明

参数 类型 说明 示例
request_id String API 调用的流水号 "1462259763,
e2d2f8d6-204b-4c43
-92ea-1d62b071f83c"
biz_info Json 包含:biz_id, biz_no, biz_extra_data
  • biz_id:业务流串号,可以用于反查比对结果
  • biz_no:客户业务流水号,会在notify和return时原封不动的返回给客户
  • biz_extra_data:在调用 notify_url 和 return_url 时会返回的额外数据
用户可以用此接口来传递一些额外信息。
{
 "biz_extra_data": "...",
 "biz_id": "1462259748,
 52b13fb5-8dfb-4537
 -a62b-a641d5e929f1",
 "biz_no":
 "cc47190f-5502-44a2
 -ab74-ea4f0f649f61"
}
time_used Int 整个请求所花费的时间,单位为毫秒,此字段必定返回 100
result_code Int 表示本次验证的结果状态码;可结合result_code和result_message字段知晓具体的结果及原因:
  • 1000系列状态码表示活体验证通过,比对完成且比对通过(仅活体不比对模式,会忽略比对结果)
  • 2000系列状态码表示活体验证通过,比对完成但比对不通过(仅活体不比对模式,不会返回该系列状态码)
  • 4000系列状态码表示活体验证不通过
  • 5000系列状态码表示意愿认证未通过
  • 6000系列状态码表示流程状态相关错误
  • 其他结果,请预留处理方案,对于未来可能的错误,我们可能持续增加错误码
1000
result_message String 可通过此字段信息知晓具体的原因。具体见:result_code & result_message 对照表 SUCCESS
liveness_result Json 活体检测结果;如果用户中途中断了活体流程,则此字段不返回
  • procedure_type:返回本次活体所使用的活体验证方式:
    • will:通过意愿确认方式进行活体验证
  • "result":Bool类型,取值true或者false。代表云端攻击判断的结果,false代表不是攻击,true代表是攻击
  • "score":Float类型,取值[0,1]。代表攻击的分数,分数越高表明攻击的可能性越大
  • "threshold":Float类型,取值[0,1]。代表攻击的阈值
  • 注:
    • 云端采用默认策略是判断score >= threshold时,代表此次可能是攻击
"liveness_result": {
 "procedure_type": "will",
 "result": false,
 "score": 0,
 "threshold": 0.5
}
verify_result Json 人脸比对结果;如果用户中途中断了活体流程或comparison_type为-1(仅活体不比对)等情况,则此字段不返回
  • result_ref[x]:活体采集人像与上传的image_ref[x]的比对结果,其中1 <= x <= 2
    • "confidence":综合分数,Float类型,取值[0,100],分数越高,说明是本人的概率越大,越安全
    • “thresholds”:用于判断比对结果是否达到你业务要求的安全等级,分数大于等于对应阈值即可视为通过,Object类型, 包含四个字段,均为Float类型、取值[0,100]:
      • “1e-3”:宽松等级,误识率约 千分之一
      • “1e-4”:标准等级,误识率约 万分之一
      • “1e-5”:严格等级,误识率约 十万分之一
      • “1e-6”:极严格等级,误识率约 百万分之一
  • verify_time:验证发生的时间戳(单位:秒),仅当return_verify_time=1时返回该字段
{
"verify_time": 1462259763,
"result_ref1": {
 "confidence": 68.918,
 "thresholds": {
  "1e-3": 64,
  "1e-4": 69,
  "1e-5": 74,
  "1e-6": 79.9
 }
}
}
will_result Json 意愿活体结果;未开通意愿核身高级版、意愿比对高级版SKU或不为will,则此字段不返回
  • result:意愿认证问答的结果
    • PASS:意愿认证通过
    • FAIL:意愿认证失败
  • will_error_message:在意愿确认时出现的错误
    • ANSWER_INCONSISTENT:意愿表达与标准答案不一致
    • NO_AUDIO:问答模式用户回答音频无声音
    • MOUTH_NOT_OPEN:问答模式用户回答时未张嘴
    • ASR_ERR:语音识别服务异常
    • ACTION_FAIL:点头模式动作检测失败
    • NOT_STARTED:未开始当前问题的意愿认证
    • LOW_QUALITY:验证环境或人脸质量较差
通过
"will_result": [
  { "will_error_message": "",
   "result": "PASS"
  }]
失败"
will_result": [
  { "result": "FAIL",
   "will_error_message": "ACTION_FAIL"
  }]
will_file Json 意愿活体问答明细;未开通意愿核身高级版、意愿比对高级版SKU或不为will,则此字段不返回;
当意愿认证为问答模式时,返回以下字段:
  • will_video:意愿认证完整视频下载地址:从进入活体流程 到流程结束
  • will_audio:意愿认证完整音频下载地址:从进入活体流程 到流程结束
  • will_audio_details:返回本次意愿认证所有意愿问答音频及相关信息明细
    • question_audio:意愿认证问题播报的音频文件下载地址
    • user_audio:意愿认证用户回答的音频文件下载地址
    • question_text:问题播报文本信息
    • standard_answer:标准答案文本信息
    • user_text:识别结果文本信息
当意愿认证为点头模式时,返回以下字段:
  • will_video:意愿认证完整视频下载地址:从进入活体流程 到流程结束
  • will_audio_details:返回本次意愿认证相关信息明细
    • question_audio:意愿认证问题播报的音频文件下载地址
    • question_text:问题播报文本信息
  • 下载地址返回说明
    • 可下载有效期1天,且仅支持3次调用。第4次或超过有效期调用则会返回错误信息,建议在每笔业务结束之后及时的取回数据。
    • 如果未收到notify回调或者下载地址未生成等场景调取get_result接口,下载地址会返回空字符串
  • 地址下载请求说明
    • 仅白名单中IP可访问(请联系我方人员)
    • 入参:请用get的方式进行请求
    • 出参:一个加密文件,解密后获取相应文件
  • 加解密说明
    • 加密方式:对称加密 AES-ECB 32位;
    • 加密秘钥:取api_secret前32位作为加密密钥,正常secret长度为32位,如果长度不够则用空格进行补位;
    • 加密内容:数据前1024位,若不足则空格补位;将加密后的数据替换数据的前1024位;
  • {
     "will_file": {
     "will_video": "xxx",
      "will_audio": "xxx",
      "will_audio_details": [ {
       "user_audio": "xxx",
       "user_text": "我同意",
       "question_text": "您好,为确保您本人操作,此次签约全程录音录像。请问您本次业务是本人自愿办理吗?请回答:我同意",
       "question_audio": "xxx",
       "standard_answer": "我同意" } ]
    }
    images Json 活体检测得到的图像,在H5 Plus场景配置-活体配置-选择返回的活体图像类型,以jpg编码并用base64字符串返回,或返回为null;
    • image_best:质量最佳的活体图像,当取到质量最佳图且result_message为计费字段时,图像才会返回
    • image_best2:通过质量检测的第二张活体图像(控制台场景配置未配置不返回)
    • image_best3:通过质量检测的第三张活体图像(控制台场景配置未配置不返回)
    • image_face_shot:人脸大头照(仅开启多人大头照裁剪时返回)
    • image_multifaces:包含多人脸的图像(仅开启多人脸检测时返回)
    {
     "data:image/jpeg;
     base64,...",
     "data:image/jpeg;
     base64,...",
     "image_best":
     "data:image/jpeg;
     base64,..."
    }
    verify_risk_info Json visual_attributes:性别年龄预估结果:
    • “age”:预估核验人活体图年龄
    • “gender”:预估核验人活体图性别,男:0,女:1
    • “age_image_ref1”:预估比对参照人脸图年龄(仅comparison_type=0时返回)
    • “gender_image_ref1”:预估比对参照人脸图性别,男:0,女:1(仅comparison_type=0时返回)
    比对风险提示结果:
    "verify_info_tags":Json类型;表示活体图与比对图的比对风险
    • "is_gender_risk":String类型,0:表示活体图与比对图性别一致;1:表示活体图与比对图性别不一致(comparison_type=0,则活体图与ref1图性别比对,comparison_type=-1,则返回为空);
    • "is_age_risk":String类型,0:表示活体图与比对图年龄差异不大(10岁以内);1:表示活体图与比对图年龄差异较大(一般指的是年龄差距在10岁及以上,具体根据阈值设定。comparison_type=0,则活体图与ref1图年龄比对,comparison_type=-1,则返回为空);
    “multifaces_tag”:String类型,表示是否检测到多人脸
    • 0:单人脸
    • 1:多人脸
    "visual_attributes": {
     "gender": 0,
     "age": 31,
     "age_image_ref1": 22,
     "gender_image_ref1": 0
    },
    "verify_risk_info": {
     "verify_info_tags": {
     "is_gender_risk": 0,
     "is_age_risk": 0
     }
    }
    device_risk_info Json 设备风险检测结果:
    • none:表示未检测到风险
    • middle:表示中风险 需要人工复核
    • high:表示高风险 直接拦截
    device_info_tags:
    • is_cookies_disabled COOKIES 被禁用
    • is_code_tampered 代码被篡改
    • is_virtual_browser 虚拟浏览器
    • is_debug_mode 调试模式
    • is_higher_device_risk_threshold 高于设备风险阈值
    "device_risk_info": {
     "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"
     }
    }

    成功示例

    text
    {
        "biz_info": {
            "biz_extra_data": "",
            "biz_id": "1774270732,5fcf3520-cd58-448a-8126-b03a1c4ed92f",
            "biz_no": "litetest"
        },
        "images": {
            "image_best": "data:image/jpeg;base64,xxxxxxxxxxxxx",
            "image_best3": "data:image/jpeg;base64,xxxxxxxxxxxxx",
            "image_best2": "data:image/jpeg;base64,xxxxxxxxxxxxx",
            "image_face_shot": "data:image/jpeg;base64,xxxxxxxxxxxxx"
        },
        "liveness_result": {
            "procedure_type": "flash",
            "result": false,
            "score": 0,
            "threshold": 0.5
        },
        "request_id": "1774270886,78fe1a8d-b45c-4435-b08a-ddf5e031e57f",
        "result_code": "1000",
        "result_message": "SUCCESS",
        "time_used": 284,
        "verify_result": {
            "result_ref1": {
                "confidence": 82.716,
                "thresholds": {
                    "1e-3": 62.169,
                    "1e-4": 69.315,
                    "1e-5": 74.399,
                    "1e-6": 78.038
                }
            },
            "result_ref2": {
                "confidence": 82.893,
                "thresholds": {
                    "1e-3": 62.169,
                    "1e-4": 69.315,
                    "1e-5": 74.399,
                    "1e-6": 78.038
                }
            },
            "verify_time": 1774270832
        },
        "verify_risk_info": {
            "verify_info_tags": {
                "is_age_risk": 0,
                "is_gender_risk": 0
            },
            "visual_attributes": {
                "age": 22,
                "gender": 0
            }
        },
        "video": "http://XXX"
    }
    

    失败示例

    text
    {
        "error_message": "RESULT_NOT_FOUND",
        "request_id": "1462259901,fa79992d-ca61-48de-aa50-ea337c6aad42",
        "time_used": 4
    }
    

    # result_code & result_message 对照表

    result_code result_message 含义解释 是否计费
    1000 SUCCESS 验证成功 是,详细计费请咨询商务
    2000 PASS_LIVING_NOT_THE_SAME 通过了活体检测,但是经过验证,待比对照片与其他照片中的至少一张,不是同一个人
    4000 FAIL_LIVING_FACE_ATTACK 活体验证失败
    5000 WILL_FAIL 意愿认证失败
    6000 NOT_STARTED 验证未开始
    6000 PROCESSING 验证进行中
    6000 FAILED 验证流程异常结束
    6000 CANCELLED 用户主动取消
    6000 TIMEOUT 验证超时
    6100 SUPPORT_ERROR 浏览器不支持webRTC API
    6100 PERMISSIONS_ERROR 用户拒绝摄像头权限或浏览器(APP)不支持唤起摄像头权限
    6100 OTHER_ERROR 其他异常导致的webRTC连接错误

    # 错误码列表

    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>有:
    • API_KEY_BE_DISCONTINUED:api_key被停用
    • LIMIT_REACHED:这个api_key对当前API的调用量达到上限。仅当api_key为测试key
    • DENIED:无权限调用当前API
    • EXPIRED_SIGN:签名已过期
    • INVALID_SIGN:无效签名
    • 其他可能的错误码,请预留处理方案
    400 MESSAGE_ENCRYPTION_ERROR 云端对敏感信息加密失败
    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客服或商务