Skip to main content

能力说明

接入 SDK 通过安全 iframe 在商户页面中展示以下信息:
  • 卡号(PAN)
  • 有效期(EXP)
  • CVV
  • 卡信息复制按钮
明文卡数据不会进入商户页面的 DOM 或 JavaScript。商户页面只负责传入一次性 Client Access Token、配置展示样式,并接收加载状态与复制结果回调。 Demo地址: https://paysdk.keysecure.io/Sbox/demo.sandbox.html

SDK 地址

请根据当前环境选择对应的 SDK 地址。
开发和联调阶段请使用沙盒环境 SDK;正式上线时,请替换为生产环境 SDK。

获取 integrity 校验值

沙盒 SDK 的 integrity 哈希需要从以下地址获取: https://paysdk.keysecure.io/Sbox/0.0.1/integrity.json 正式 SDK 的 integrity 哈希需要从以下地址获取: https://paysdk.keysecure.io/SDK/prod/0.0.1/integrity.json 返回格式示例:
files["index.min.js"] 的完整值复制到 <script> 标签的 integrity 属性中。
SDK 文件更新后,integrity 哈希也会变化。请在每次更新 SDK 或发布应用前重新获取 integrity.json。不要长期使用本文示例中的固定哈希,实际值始终以该地址的最新返回结果为准。

引入 SDK

在 HTML 页面中加入以下 <script> 标签,即可引入沙盒环境 SDK:

接入前准备

报备页面来源

在商户后台报备所有会嵌入 SDK 的页面 origin,例如:
  • 必须使用 HTTPS。
  • 必须填写精确 origin,不支持 *.merchant.com 通配符。
  • 如果商户后台未显示报备入口,请联系 KeySecure 技术支持。
  • 未报备的页面可能被 Content Security Policy(CSP)阻止加载。

后端获取 Client Access Token

Client Access Token 必须由商户后端获取。请勿在浏览器中暴露 Api-KeyAccess-Token 或其他服务端凭据。
返回示例:
后端只需将 data.client_access_token 透传给前端。详细参数见颁发 PCI Client Access Token
Client Access Token 为短期一次性凭据。请在有效期内使用,不要落库、写入 Cookie 或输出到日志;刷新页面或重复初始化时应重新申请。

前端接入

准备容器

初始化 SDK

销毁和重排

同一个 token 重复调用 bootstrap 时,SDK 会先执行对应的销毁操作再重建组件。由于 token 为一次性凭据,业务侧仍应避免重复初始化,并在需要重新加载时申请新 token。

API 配置参考

错误处理

初始化错误

callbackEvents.onFailure(error) 中可读取 error.code

复制错误

onCopyFailure(error) 中可读取 error.code

样式自定义

出于安全考虑,styles 仅支持以下 CSS 属性,其他属性会被忽略:

接入自检清单

  • 页面 origin 已完成报备,并且与实际 HTTPS 页面完全一致
  • SDK 地址与当前环境一致
  • integrity 使用对应 SDK 文件的最新 SRI 哈希
  • Client Access Token 由后端获取,前端不持有服务端凭据
  • token 未被记录、持久化或重复使用
  • 复制按钮容器设置了 position: relative 和明确尺寸
  • 敏感页面响应设置了 Cache-Control: no-store, no-cache
  • 页面卸载或退出敏感视图时调用了 widget.destroy()
  • 已处理初始化和复制失败回调

安全约束

  1. 不要尝试从 DOM、网络请求或 SDK 内部消息中读取明文卡数据。
  2. 不要将 Client Access Token 写入数据库、Cookie、日志或分析事件。
  3. 避免将卡信息页面放入多层 iframe,以免父来源校验失败。
  4. 不要在敏感页面运行录屏、会话回放或不必要的第三方分析脚本。
  5. 不要监听、构造或复用 SDK 内部通信通道。

浏览器兼容性

常见问题

页面提示违反 frame-ancestors CSP 策略 确认当前页面 origin 已完成报备。报备后重新获取 Client Access Token,再重新初始化 SDK。 一直收到 TOKEN_INVALID token 为一次性凭据。检查 React Strict Mode、SPA 路由切换或重复渲染是否触发了两次初始化,并在组件卸载时调用 widget.destroy() 点击复制按钮没有反应 确认复制容器设置了 position: relative,并且宽高不为 0。Clipboard API 需要用户手势触发,不要通过定时器模拟点击。 iframe 显示空白 检查浏览器 Network 和 Console 面板,确认请求未返回 403、容器处于可见状态,并排查 CSP 或 Permissions Policy 拦截。 如仍无法解决,请将浏览器、SDK 地址、错误码及复现步骤提供给 KeySecure 技术支持。不要在工单或聊天中提供 Client Access Token、完整卡号或 CVV。