功能特性
- 简单的 API - 单例模式,方法易于使用
- 灵活集成 - 可直接使用 UniLink URL,也可通过后端创建会话
- 响应式 - 适用于桌面和移动端浏览器
- 可自定义 - 提供样式和行为的配置选项
- 多种格式 - 提供 ESM、CommonJS 和 UMD 构建版本
- TypeScript 支持 - 包含完整的类型定义
- 弹窗与内嵌模式 - 可选择弹窗覆盖层或内嵌方式
- 事件回调 - 用于跟踪验证进度的实时事件(已开始、步骤已完成、已结束)
- 状态管理 - 监听 SDK 状态以实现自定义界面
安装
NPM/Yarn
CDN (UMD)
检查已安装版本
以包管理器的记录为准,确定已安装的版本:0.3.1 开始,该导出内容由每种 JavaScript 格式(ESM、CommonJS、UMD、压缩版 UMD)以及 TypeScript 声明文件中的包版本生成,因此始终与已安装的版本一致。
0.3.0 及更早版本无论安装的是哪个版本,都会从该导出返回 0.2.1。对于这些版本,请改用 npm list 或您的锁文件。
原生 JavaScript
ES Modules / TypeScript
Script 标签 (UMD)
框架示例
SDK Web 示例
React、Angular、Svelte、Next.js、Nuxt、Vue 等框架,并附有每个框架的示例和文档。
集成方式
集成 SDK 有两种方式:方式 1: UniLink URL (最简单)
直接使用 Didit 控制台中工作流的 UniLink URL。无需后端。方式 2: 后端会话 (推荐用于生产环境)
您的后端通过 Didit API 创建会话,并返回托管验证页面的 URL。这样您可以控制vendor_data、每个会话的 callback 和 metadata,还可以在用户到达前端之前创建会话。
详见创建会话 API 参考。
后端 (Node.js / Express)
创建会话的响应字段名为
url(参见创建会话 OpenAPI 架构)。请将其直接传递给 startVerification({ url })。配置
摄像头选项
摄像头选项需要
@didit-protocol/sdk-web 0.4.0 或更高版本。defaultLivenessCamera: 'back'。
- 可接受的镜头值为
'front'和'back'。其他任何值都会被忽略,不是布尔值的切换按钮标志同样会被忽略。 - 设备没有所请求的摄像头时,将继续使用其现有的摄像头:请求
'back'的笔记本电脑仍使用其网络摄像头。在单摄像头设备上,无论标志如何设置,切换按钮都会隐藏。 - 摄像头选项仅作用于被动活体检测,主动活体检测不受影响。
- SDK 会将这些选项作为验证 URL 的查询参数传递给验证页面:
document_camera、liveness_camera、document_camera_switch和liveness_camera_switch。如果你不通过 SDK,而是直接打开验证 URL,请自行设置这些参数:对于不带查询字符串的 URL,追加?liveness_camera=back;对于已有参数的 URL,追加&liveness_camera=back;也可以使用URLAPI 设置,这样两种情况都能正确处理:
提交事件
DiditSdk.shared.submitEvent() 会将终端用户事件(注册、登录、登录失败、登出、密码重置、MFA、设备变更)加入队列,提交给 Didit 的事件监控。
你的后端为该用户生成监控令牌,SDK 则随设备指纹分批发送事件。
切勿将 API 密钥发送到浏览器中。
弹窗尺寸与滚动
以下尺寸行为需要 0.3.1 或更高版本。0.3.0 及更早版本在较矮的桌面和横屏视口中可能会裁切验证流程。
dvh,在较旧的受支持浏览器中回退到 vh。宽度为 540px 及以下时,弹窗会占满可见视口。关闭按钮和退出确认始终保持在弹窗内。
重新设计的验证流程
本节所有内容适用于 0.5.0 版本,该版本尚未发布。在你升级之前,弹窗会保持上述尺寸。
didit:layout 消息报告其布局后,弹窗会根据重新设计的验证流程调整自身尺寸:
- 起始尺寸(自 0.5.0 版本起): 在页面报告布局之前,以及从不报告布局的页面,弹窗保持现有的最大尺寸 500px × 700px。它仍然适配较矮的窗口,并在 540px 及以下时保持全屏。
- 关闭按钮(自 0.5.0 版本起): 覆盖在页面顶部栏上的 44px 圆形按钮。它跟随页面的浅色或深色主题,在从右到左书写的语言中移动到左侧。
- 嵌入模式(自 0.5.0 版本起): 与以前一样,仍填充其宿主元素(请参阅嵌入模式)。
- 验证 URL(自 0.5.0 版本起): SDK 会添加
sdk_presentation(modal或embedded),并且在弹窗中添加sdk_close_button(true或false,与showCloseButton保持一致),以便页面了解自己的展示方式。 - 事件(自 0.5.0 版本起): SDK 自行处理
didit:layout,不会将其传递给onEvent。
嵌入模式
嵌入模式不使用弹窗的 500px × 700px 上限。SDK 会填充宿主元素的内容框,因此请为该元素设置明确的或其他可解析的高度:验证结果
SDK 返回三种类型的结果:已完成
验证流程已结束(已通过、待处理或已拒绝)。TypeScript 类型声明的是
'Approved' | 'Pending' | 'Declined',但该值直接取自托管流程的会话状态,因此您还可能收到其他状态,例如 In Review。当流程未返回状态时,SDK 会使用 Pending 作为默认值。请将 status 仅作为参考,并以 Webhook 给出的结果为准。已取消
用户关闭了验证弹窗。如果已获知sessionId,则会包含 session(如果用户在 iframe 上报之前取消,则可能为 undefined)。
失败
验证过程中发生错误。状态管理
您可以监听 SDK 状态,以实现自定义 UI:API 参考
DiditSdk.shared
单例 SDK 实例。方法
属性
回调
精细事件
使用onEvent 回调跟踪验证进度:
事件参考
连接中断
如果用户的网络连接中断,验证页面会用“无网络连接”页面覆盖整个流程,而不是让某个步骤一直处于加载状态。 页面会在后台持续检测连接,一旦可以访问 Didit,该页面会自动关闭,用户从原来所在的步骤继续操作。 在 SDK 的弹窗或 iframe 中,该页面还会提供 退出验证 按钮:点击后,页面会先发送didit:error(error: "network_error"),再发送 didit:cancelled,SDK 随即关闭弹窗,并以 type: "cancelled" 调用 onComplete。
从 0.5.0 版本起,页面的 didit:layout 消息用于设置弹窗尺寸,不会传递给 onEvent。如果你改为使用自己的 iframe 嵌入页面,请参阅 从 didit:layout 设置 iframe 尺寸。
步骤取值
step 字段可以是以下值之一:
document_selection- 证件类型选择document_front- 证件正面document_back- 证件背面face- 人脸/活体验证email- 邮箱验证phone- 电话验证poa- 地址证明questionnaire- 问卷步骤
渠道取值
code_sent 中的 channel 字段可以是:
email- 通过邮件发送验证码sms- 通过短信发送验证码whatsapp- 通过 WhatsApp 发送验证码
验证码长度
code_sent 中的 codeSize 字段表示 OTP 验证码的位数(例如 4 位或 6 位)。