模拟结果(Test Mock)
在沙箱环境中,你可以在不依赖真实生物识别采集的情况下模拟流程结果。在创建流程的请求体中添加 expected_result 字段——集成的其余部分(SDK 渲染、生物识别采集、获取流程)与真实流程完全相同。
该模拟机制不会跳过生物识别采集步骤。用户(或你的测试脚本)仍然需要完成正常流程——发生变化的是,流程完成后,会返回 expected_result 中定义的值,而不是真实的评估结果。
每个 flow 只接受以下两种格式中的一种,具体取决于其配置方式:
| 格式 | 使用场景 |
|---|---|
id_cloud_one_result | 返回单一结果的流程(通过、拒绝、高风险等) |
authentication_info | 返回独立信号的流程(UnicoId、Trust、Liveness、IdAge、IdFace...) |
发送与你的 flow 不匹配的格式,或同时发送两种格式,都会导致错误——参见错误。
端点
| 环境 | URL |
|---|---|
| 沙箱环境 | POST https://api.idcloud.uat.unico.app/client/v1/process |
该模拟机制仅在沙箱环境中可用。在生产环境中,expected_result 字段会被拒绝。
当你的 flow 返回单一的批准类结果时,使用此格式。
请求体参数
| 字段 | 类型 | 是否必填 | 描述 |
|---|---|---|---|
expected_result.id_cloud_one_result | string | 是 | 要模拟的单一结果。必须是你的 flow 实际会产生的结果——请检查你的流程配置以了解其可识别的结果。 |
示例
curl -X POST https://api.idcloud.uat.unico.app/client/v1/process \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"expected_result": {
"id_cloud_one_result": "PROCESS_RESULT_APPROVED"
}
// ...其余参数与真实创建流程请求相同
}'
响应(200 OK)
{
"process": {
"id": "53060f52-f146-4c12-a234-5bb5031f6f5b",
"state": "PROCESS_STATE_FINISHED",
"result": "PROCESS_RESULT_OK",
"flow": "your-sandbox-flow",
"simulated": true,
"capacities": ["PROCESS_CAPACITY_IDCHECK"],
"person": { "duiType": "DUI_TYPE_BR_CPF", "duiValue": "12345678909" }
}
}
simulated: true 表示该流程具有模拟结果,而非真实评估结果 。
id_cloud_one_result 的可能取值与解读结果中记录的流程结果值相同——只发送你的 flow 实际能识别的结果。
当你的 flow 返回独立信号而非单一结果时,使用此格式。
你的 flow 通常返回的每个信号都必须出现在 authentication_info 中。 只发送其中一部分会被拒绝——你不能只模拟一个信号,而让其余信号交由真实评估处理。
trust_result 与 identity_fraudsters_resulttrust_result 和 identity_fraudsters_result 代表同一个信号(身份欺诈指示):trust_result 表示负面情况,identity_fraudsters_result 表示正面情况。请使用与你想要模拟的结果相匹配的字段。
关于每个字段的可能取值,请参见authenticationInfo 中的能力结果。
无摩擦流程不支持此格式——参见不支持的信号。
示例
curl -X POST https://api.idcloud.uat.unico.app/client/v1/process \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"expected_result": {
"authentication_info": {
"authentication_result": "AUTHENTICATION_RESULT_POSITIVE",
"liveness_result": "LIVENESS_RESULT_LIVE",
"id_age_result": "ID_AGE_RESULT_POSITIVE"
}
}
// ...其余参数与真实创建流程请求相同
}'
响应(200 OK)
{
"process": {
"id": "53060f52-f146-4c12-a234-5bb5031f6f5b",
"state": "PROCESS_STATE_FINISHED",
"result": "PROCESS_RESULT_OK",
"flow": "your-sandbox-flow",
"simulated": true,
"capacities": ["PROCESS_CAPACITY_IDUNICO", "PROCESS_CAPACITY_IDAGE"],
"authenticationInfo": {
"authenticationResult": "AUTHENTICATION_RESULT_POSITIVE",
"livenessResult": "LIVENESS_RESULT_LIVE",
"idAgeResult": "ID_AGE_RESULT_POSITIVE"
},
"person": { "duiType": "DUI_TYPE_BR_CPF", "duiValue": "12345678909" }
}
}
不支持的信号
以下信号在两种格式中均不受模拟机制支持:
multi_accountsdata_mismatchserial_fraudstersmart_revalidation_resultpasskey_result(已弃用)
无摩擦流程(无需生物识别采集的身份验证)仅在 id_cloud_one_result 格式中受支持—— 它们不适用于 authentication_info。
关于响应的说明
只有在身份结果无法判定时才会返回分数。 只有当 authentication_result 为 AUTHENTICATION_RESULT_INCONCLUSIVE 时,score_engine_result 字段才会反映一个值。如果你将 authentication_result 模拟为 POSITIVE 或 NEGATIVE,同时提供非零的 score_engine_result,最终响应会返回 score_enabled: SCORE_ENABLED_FALSE 和 score: 0,无论发送的值是什么。
这是该 API 的正常行为——同样的规则也适用于真实流程,并非模拟机制所特有。如果你要测试的场景依赖于响应中出现分数,请使用 authentication_result: AUTHENTICATION_RESULT_INCONCLUSIVE。
错误
| 情形 | 错误 |
|---|---|
在沙箱环境之外使用 expected_result | PERMISSION_DENIED |
同时发送 id_cloud_one_result 和 authentication_info | INVALID_ARGUMENT |
空的 authentication_info: {} | INVALID_ARGUMENT |
authentication_info 缺少流程会返回的某个信号 | 校验错误——需包含每个信号 |
id_cloud_one_result 的值不被流程识别 | 校验错误 |
flow 不支持模拟 | 校验错误 |
后续步骤
创建模拟流程后,请正常完成生物识别采集,然后使用获取流程来获取模拟结果。