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 进行比对。
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 环境下的便利做法,而不是生产环境的模式:请在您自己的后端创建会话,并将密钥保存在服务器端,只把生成的会话交给小组件,绝不要交出访客浏览器可读取的正式密钥。
<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。适合哪种模式,取决于您需要以何种方式、在何时获得答案。
法律与律师事务所
公寓与 HOA 协会
金融科技与借贷
市场平台与零工平台
E-signature
常见问题
关于集成的直接解答。
开始使用
配置 webhook,亲眼看它触发。
创建一个带 webhook URL 的 sandbox 会话,用您自己的手机完成一次验证,然后查看它发送的已签名回调。