跳转到主要内容
Didit JavaScript SDK 提供了一种编程方式,可将验证集成到您的 Web 应用中,并完全掌控用户体验。

功能特性

  • 简单的 API - 单例模式,方法易于使用
  • 灵活集成 - 可直接使用 UniLink URL,也可通过后端创建会话
  • 响应式 - 适用于桌面和移动端浏览器
  • 可自定义 - 提供样式和行为的配置选项
  • 多种格式 - 提供 ESM、CommonJS 和 UMD 构建版本
  • TypeScript 支持 - 包含完整的类型定义
  • 弹窗与内嵌模式 - 可选择弹窗覆盖层或内嵌方式
  • 事件回调 - 用于跟踪验证进度的实时事件(已开始、步骤已完成、已结束)
  • 状态管理 - 监听 SDK 状态以实现自定义界面

安装

NPM/Yarn

CDN (UMD)

最新发布的 npm 版本为 0.5.1。 0.5.0 新增了 DiditSdk.shared.submitEvent()(参见提交事件),0.5.1 允许托管流程在 SDK 内向数字身份钱包请求用户的 ID,并在启动失败时保持 error 状态,同时提供 errorMessage。 0.4.0 新增了原生 SDK 已提供的摄像头选项,包括 defaultLivenessCamera,它会让人脸采集首先打开后置摄像头(参见摄像头选项)。

检查已安装版本

以包管理器的记录为准,确定已安装的版本:
您也可以检查运行时导出的内容:
从 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 有两种方式: 直接使用 Didit 控制台中工作流的 UniLink URL。无需后端。
在 Didit 控制台 → 您的工作流 → Copy Link 中获取 UniLink URL。 生成的 session_id 会通过事件发送给您。 请在此查看事件参考

方式 2: 后端会话 (推荐用于生产环境)

您的后端通过 Didit API 创建会话,并返回托管验证页面的 URL。这样您可以控制 vendor_data、每个会话的 callback 和 metadata,还可以在用户到达前端之前创建会话。 详见创建会话 API 参考。 后端 (Node.js / Express)
前端
创建会话的响应字段名为 url(参见创建会话 OpenAPI 架构)。请将其直接传递给 startVerification({ url })。

配置

完整的 DiditSdkConfiguration 接口请参见下方的完整 TypeScript 类型定义。

摄像头选项

摄像头选项需要 @didit-protocol/sdk-web 0.4.0 或更高版本。
Web SDK 提供与原生 SDK 相同的四个摄像头选项。默认情况下,证件采集打开后置摄像头,人脸(活体检测)采集打开前置(自拍)摄像头。只要设备有多个摄像头,两个步骤的采集界面中都会提供切换按钮。若要让人脸采集打开后置摄像头,例如在自助终端上,或由操作员手持设备对准被验证的人,请设置 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;也可以使用 URL API 设置,这样两种情况都能正确处理:

提交事件

DiditSdk.shared.submitEvent() 会将终端用户事件(注册、登录、登录失败、登出、密码重置、MFA、设备变更)加入队列,提交给 Didit 的事件监控。 你的后端为该用户生成监控令牌,SDK 则随设备指纹分批发送事件。 切勿将 API 密钥发送到浏览器中。
有关令牌、事件字段和投递行为,请参阅 SDK 事件提交。

弹窗尺寸与滚动

以下尺寸行为需要 0.3.1 或更高版本。0.3.0 及更早版本在较矮的桌面和横屏视口中可能会裁切验证流程。
弹窗模式的最大宽度为 500px,最大高度为 700px。在较矮的桌面和横屏视口中,iframe 占可见视口的 90%。验证流程在 iframe 内部滚动,因此每个步骤都可以访问,同时弹窗背后的页面保持锁定。 SDK 在支持动态视口单位的浏览器中使用 dvh,在较旧的受支持浏览器中回退到 vh。宽度为 540px 及以下时,弹窗会占满可见视口。关闭按钮和退出确认始终保持在弹窗内。

重新设计的验证流程

本节所有内容适用于 0.5.0 版本,该版本尚未发布。在你升级之前,弹窗会保持上述尺寸。
自 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 会填充宿主元素的内容框,因此请为该元素设置明确的或其他可解析的高度:
如果宿主没有可解析的高度,嵌入的 iframe 也将没有可用的高度。布局变化时请调整宿主大小,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 位)。

TypeScript 类型

最后修改于 2026年11月7日