跳到主要内容
ShieldID

Webhook 与集成

身份验证 webhook、托管页面和小组件。

将申请人引导至托管验证页面,或把小组件嵌入您自己的流程;结果一出即收到带签名的 webhook;并让任何持有链接的人在公开的凭证核验页面上确认结果。一个可在一个下午内上线的 KYC API 集成。

  • HMAC-SHA256 签名回调
  • 从桌面端到手机的二维码交接
  • Sandbox 会话永不计费

托管验证页面

一个链接,完成整个流程。

通过 API 创建会话,即可获得一个验证 URL。您可以通过电子邮件、短信或在自己的应用中发送它,其余工作由页面完成。

桌面端

申请人在办公桌前打开链接。

二维码交接

页面显示二维码和简短的说明卡片。

手机采集

扫码后,同一会话将切换到证件和自拍采集。

已验证

会话达到 VERIFIED,仍在手机上完成。

回到您这边

无论结果如何,都会跳转到您的返回 URL,并发送一条已签名的 webhook。

体验类似支付跳转

申请人会进入您的会话专属 URL 对应的页面。无需账户,无需安装应用。

二维码转交,从桌面到手机

在桌面端打开时,页面会显示二维码和简短的说明卡片,而不是请求摄像头权限。扫描二维码后会在手机上打开同一链接,并直接切换到证件和自拍拍摄环节。

带着结果返回给您

会话一旦达到 VERIFIED,页面就会跳转到您的返回 URL,并附上会话 ID 和状态,这样您的应用无需等待其他任何信息,就能知道发生了什么。

符合条件的套餐支持品牌定制

贵公司的名称、徽标、主题色以及条款和隐私链接,将应用于托管页面和凭证检查页面。

Webhook

结果一出,立即发送已签名的回调。

创建会话时提供一个 webhook URL,会话一结束,我们就会把结果发送到该地址,无需轮询。

不只是发送,而且有签名

每次投递都带有 X-Bio-Signature 请求头:即请求体的 HMAC-SHA256,让您在信任数据之前,就能证明它确实来自我们。

会重试,而非发出即不管

投递失败时会重试三次,每次尝试前的等待时间依次更长。

每次尝试都有记录

无论成功还是失败,我们这边都会保留该次尝试的记录。

即将推出 门户内的投递日志即将推出,届时您可以自行查看每一次尝试。

以最新的 VERIFIED 为准

由于存在重试,极少数情况下投递可能会乱序到达。请不要完全依赖是否收到 webhook 来决定逻辑,而应以会话 ID 为依据,让较晚的 VERIFIED 覆盖较早的 VERIFIED。如果您自行保存状态,请按会话 ID 而非 webhook 接收次数去重。

验证签名

先验证载荷,再据此操作。

在解析任何内容之前,先对原始请求体重新计算 HMAC-SHA256,并与 X-Bio-Signature 进行比对。

javascript
const crypto = require("crypto");

function verifySignature(rawBody, signatureHeader, secret) {
  const expected = crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
  const a = Buffer.from(expected, "hex");
  const b = Buffer.from(signatureHeader || "", "hex");
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}

// Read the raw body — don't let a JSON body-parser touch it first.
app.post("/hooks/shieldid", express.raw({ type: "application/json" }), (req, res) => {
  const signature = req.header("X-Bio-Signature") || "";
  if (!verifySignature(req.body, signature, process.env.SHIELDID_WEBHOOK_SECRET)) {
    return res.status(401).send("invalid signature");
  }
  const event = JSON.parse(req.body);
  // Treat the latest VERIFIED status as authoritative; de-duplicate by session_id.
  res.status(200).send("ok");
});

JS 小组件

把托管流程嵌入您自己的页面。

该小组件会创建会话,并在 iframe 中以内嵌方式呈现同样的托管流程,因此申请人无需离开您的网站。

  • 在 iframe 中渲染,支持摄像头和麦克风访问,尺寸随其容器自适应。
  • 以与托管页面相同的方式读取会话状态:会话结束后,通过您的返回 URL 和 webhook 获取。

即将推出 页面内完成回调(onComplete、onCancel、onStep、自动调整大小)即将推出。在此之前,请使用 return_url 和 webhook 来获知会话何时结束——它们现在就可以使用。

在上线到生产环境之前

该小组件目前允许直接在浏览器中使用 API 密钥。请将其视为 sandbox 环境下的便利做法,而不是生产环境的模式:请在您自己的后端创建会话,并将密钥保存在服务器端,只把生成的会话交给小组件,绝不要交出访客浏览器可读取的正式密钥。

html
<script src="https://cdn.shieldid.ca/sdk/v1/widget.js"></script>
<div id="shieldid-verify"></div>
<script>
  TLVerify.init({
    apiKey: "vk_sand_your_key", // sandbox only — see the note above for production
    containerId: "shieldid-verify",
    returnUrl: "https://yourapp.example/verified",
    webhookUrl: "https://yourapp.example/hooks/shieldid",
    locale: "en",
  });
</script>

凭证核验页面

面向已验证会话的公开页面。

会话一旦达到 VERIFIED,其专属的凭证核验链接就会显示一份通俗易懂的确认信息:申请人的姓名、证件类型和状态。任何持有该链接的人——共同签署人、前台工作人员、交易对方——都可以确认结果,而无需登录您的控制台。

Jordan Reyes

示例数据

加利福尼亚州驾照

已验证

  • 查看无需登录。
  • 页面上绝不会出现原始证件图像或置信度分数——只有状态和身份信息,仅此而已。
  • 在符合条件的套餐上,品牌样式与托管页面一致。

集成模式

六类企业如何完成对接。

各处的基本构件都相同:会话、链接或小组件、webhook。适合哪种模式,取决于您需要以何种方式、在何时获得答案。

租赁与物业管理

在发送租赁申请的同一封邮件中附上托管链接。在您审核档案之前,webhook 就会在您的系统中将申请人标记为已验证。

法律与律师事务所

在客户接洽阶段发送链接,并将 webhook 回执与案卷一并保存,这样在委托协议开始之前,客户身份识别就已有据可查。

公寓与 HOA 协会

从董事会已在使用的业主或租户登记表单跳转出去;结果会在该单元登记入册之前送达。

金融科技与借贷

webhook 会自动触发您自己的核保步骤,因此申请人无需等待有人注意到结果已经返回。

市场平台与零工平台

将该小组件嵌入卖家或司机入驻流程,即可实现用户全程不离开您的应用;请按上文建议,从您的后端创建会话。

E-signature

在签署环节开始之前运行托管流程,并以 webhook 而非申请人的自述作为放行文件的依据。

常见问题

关于集成的直接解答。

开始使用

配置 webhook,亲眼看它触发。

创建一个带 webhook URL 的 sandbox 会话,用您自己的手机完成一次验证,然后查看它发送的已签名回调。