在 sandbox 中测试而不消耗额度

sandbox 是一种按应用设置的模式,在其中所有服务商都会被模拟、不会产生任何计费,你还可以强制触发所需的任意核验结果 - 通过、拒绝或审核中。

Short answer

sandbox 是应用上的一种模式,而不是在你的 live 应用里打开的一个开关。创建 第二个模式为 sandbox 的应用,使用它的 API 密钥,所有检查都会被模拟、不产生 任何计费,你也可以强制触发任意想要的结果。如果你只看到一个生产环境应用, 说明你需要新建一个 sandbox 应用 - 模式是按应用选择的。

Didit 的 sandbox 相当于支付服务商的测试卡:它让你可以按需复现任意核验结果,而无需调用真实的服务商、处理真实的个人数据,或动用你的余额。

#sandbox 是应用上的一种模式

这是最容易让人搞混的地方。live 和 sandbox 是同一组织内各自独立的应用,因此测试流量与生产数据永远不会混在一起。每个应用的模式要么是 live,要么是 sandbox

Didit 控制台的 API 密钥页面,每个密钥都归属于一个应用
  1. 一个密钥归属于一个应用 - sandbox 应用的密钥无法触及 live 会话。
  2. 为测试单独创建一个密钥,而不是复用 live 密钥。
密钥是按应用划分的,因此 sandbox 密钥永远无法访问 live 数据。
  1. 创建第二个应用

    在控制台中,打开顶部的应用切换器并创建一个新应用,将其模式选择为 sandbox

  2. 使用该应用的 API 密钥

    选中该 sandbox 应用后,在 API 和 Webhooks 中获取其 API 密钥。live 应用上并没有单独的「测试密钥」- 密钥本身就是环境。

  3. 在其中构建一个工作流

    sandbox 应用拥有自己独立的工作流。重新构建(或复制)你想测试的流程。

  4. 像平常一样创建会话

    使用同样的接口、同样的代码路径,唯一的区别是你发送的密钥不同。

Note

如果你的控制台只显示一个生产环境应用,且没有添加 sandbox 应用的入口,请联系 支持团队为你的组织开启 sandbox 应用创建功能 - 这是一个账户级别的设置, 不是你配置错了什么。

#sandbox 改变了什么,又没有改变什么

SandboxLive
外部服务商全部模拟 - 从不调用任何第三方真实调用
计费永不计费;跳过余额检查按已完成的功能计费
会话创建上限每个应用每 24 小时 500 次取决于你的余额
Webhook 负载"environment": "sandbox""environment": "live"
提取的数据与状态由你选择的场景模拟生成来自真实采集的数据
采集的媒体真实存储,与 live 会话完全一样存储
Important

sandbox 会像 live 会话一样,真实存储它所采集的媒体 - 证件、自拍、活体检测 视频、地址证明文件。结果是模拟的,但上传是真实的,因此请使用流程提供的 示例证件和测试数据,而不要使用真实身份证件或真实个人信息。

由于结果从不取决于图像内容本身,故意上传一张糟糕的照片并不会在 sandbox 中触发拒绝 - 结果由场景决定。

#选择结果

创建会话时,将场景标识作为 sandbox_scenario 传入,或者让测试者自行选择:在托管流程中,sandbox 会话会在开始采集前,于卡片内显示一个场景选择器,上传组件下方还会有一排示例证件,以及一条常驻的「仅限测试数据」提示条。

想要测试的场景场景标识
全部通过approve
证件已过期decline_document_expired
证件无法识别decline_could_not_recognize_document
MRZ 校验失败decline_mrz_validation
未达最低年龄decline_minimum_age
人脸比对分数过低decline_face_match_low_similarity
活体检测遭遇仿冒攻击decline_liveness_attack
AML 制裁 / PEP 命中decline_aml_hit
IP 地址被屏蔽decline_ip_blocklist
地址证明地址不匹配decline_poa_address_mismatch
NFC 芯片完整性校验失败decline_nfc_chip_not_verified
数据库验证未找到匹配decline_database_no_match
需要人工审核(AML)review_aml_possible_match
需要人工审核(人脸比对处于临界值)review_face_match_borderline
需要人工审核(地址部分匹配)review_poa_partial_match
KYB 注册信息不匹配decline_kyb_registry_mismatch

review_* 系列场景的存在,是为了让你无需构造真正会被拒绝的输入,就能完整走一遍人工审核流程 - 控制台的审核队列、In Review webhook,以及审核人员批准或请求重新提交的操作。

Tip

场景与魔术值的最新目录由 API 本身通过 GET /v1/sandbox/scenarios/ 提供。 如果这里的某个标识看起来已经过时,请以该接口的返回结果为准。 完整参考:sandbox 测试

#在你自己的代码中区分两者

每个 webhook 都带有一个 environment 字段 - "sandbox""live"。请基于这个字段做分支判断,而不是试图从密钥本身推断环境,这样你就永远不会把测试会话误认为真实客户。

#sandbox 不会做的事

  • 不会返回真实公司的真实注册信息。sandbox 中的 KYB 使用模拟的注册信息响应。
  • 不会发送真实的短信或邮件。手机验证和邮箱验证都是模拟的,因此你无法用 sandbox 预览真实的消息送达情况。
  • 不会消耗你的每月免费额度 - 这也意味着一次 sandbox 运行无法告诉你还剩多少免费次数。

#如果你需要真实的测试核验

有些情况确实需要一次真实调用 - 比如确认某个国家的数据库服务已经为你开通,或者确认短信能否送达某个特定运营商。这需要在 live 应用上进行一次小额充值,而不是使用 sandbox。在花费之前请先联系支持团队,确认相关服务已经在你的账户上正式启用。