Skip to main content
开始之前: 你的服务器必须为每个会话生成一个 patToken 并将其提供给你的页面。参见设置你的服务器。

1. 加载小部件脚本

将此加载器添加到你的页面。它会注入小部件脚本,并在 FluzEmbedded 就绪时才解析,这样其余代码不会在小部件存在之前运行。

2. 初始化小部件

脚本加载完成后,使用你的 API key、交易详情以及来自服务器的 patToken 调用 init()。
init() 接受蛇形命名(snake case)的 transaction_type。签名的 patToken 内部声明为 transactionType。二者必须描述同一笔交易。

3. 打开小部件

选择用户如何启动小部件。两种方式都在 init() 之后运行。
将 open() 绑定到页面上已存在的按钮。

初始化选项

init() 只检查脚本自身所需内容:apiKey、patToken、transaction_type,以及可解析的 container。其他内容会根据你签名的令牌进行校验,因此错误的 transaction_type 或缺失的 amount 会通过 onError 反馈给你,而不会以你的代码看不到的控制台消息出现。

方法

处理结果

onOpen 和 onClose 只表明小部件出现和消失,并不表示用户是否完成。要了解流程如何结束,传入 onSuccess 和 onError。两者均为可选;即使都不传,小部件仍然可用,只是你收不到结果。
不要在 onSuccess 中结算。 它在访客的浏览器中运行,不携带可验证的交易记录,且任何人都可以从控制台调用。仅将其用于用户可见的内容:确认、重定向、清除加载动画。仅从你的服务器执行记账入账、发货释放或记入账本,并由Webhook或你自行获取并验证的交易驱动。

回调的行为方式

  • onSuccess 是最终态。 它最多触发一次,之后不会再有结果回调,因此已完成的流程不会再报告错误。
  • onError 报告的是一次尝试,而非最终裁定。 身份验证失败或付款被拒的用户仍在小部件内且可以重试。onError 在一个会话中可能触发多次,之后仍可能出现一次 onSuccess。
  • 两个回调都不会关闭小部件。 用户会停留在界面,直至其自行关闭,此时触发 onClose。
只在 onSuccess 触发或用户关闭小部件时,将会话视为结束。

回调接收的内容

在可用时,两个回调都会包含将会话与你的记录关联的 id,以及运行该会话的 Fluz 账户的联系方式。Fluz 在服务器端根据你签名的令牌和用户会话填充这些值,因此这些是 Fluz 记录下的值,而非页面组装的内容。 分别读取每个字段;不要假设集合是完整的。
  • externalReferenceId 来自你的令牌,因此它能在用户登录前发生的失败中幸存。
  • 其余四个来自 Fluz 账户,只有当会话进展到那一步时才会出现。
  • 在你的令牌验证之前发生的失败(令牌过期、应用权限缺失)不携带任何内容。onError 仅接收 code 和 message。
email 和 phoneNumber 描述的是用户登录的 Fluz 账户,可能与您在 patToken 中传入的值不同。 这些字段用于标识会话;它们不是发生事件的记录。使用 externalReferenceId 在你的系统中定位正确的行,然后在采取行动前通过 Webhook 或 API 调用确认结果。
email 和 phoneNumber 需要已注册的 Origin。 Fluz 会将结果消息发送到你应用 OAuth 选项卡中的 Origin,并且只有当该 Origin 已设置且可用时才会包含联系方式。若无已备案的 Origin,你仍会收到三个 id。请将 Origin 指向嵌入小部件的页面。如果它指向一个你不再嵌入的主机,浏览器将拒绝投递消息,于是 onSuccess 和 onError 将不再触发。onOpen、onClose 以及关闭控件不受影响。唯一迹象是在浏览器控制台中的 postMessage 目标源不匹配。参见配置 App Widget。

错误代码

onError 会接收用于分支的稳定 code,以及用于记录的人类可读 message。US-0005 和 G-0004 表示用户可以重试的失败;其他任何代码都表示会话无法继续。 将任何未识别的代码视为 G-0001。新代码会随时间推出而不构成破坏性变更。

内联渲染小部件(仅限 staging)

container 选项仅在 staging 可用。生产环境集成必须使用默认的全屏模态,直至该功能在生产环境中发布。
默认情况下,小部件会在你的页面上挂载一个固定的、覆盖整个视口的遮罩层。传入 container 后,它会在你自行定位和设定尺寸的元素内渲染,不包含遮罩、滚动锁定或页面接管。

尺寸

小部件会以 100% 宽高填充你的容器,并且从不改变容器大小。超出容器高度的内容会在小部件内滚动,而不是你的页面滚动。
  • 在 CSS 中为容器设置显式宽高。 没有高度时,小部件会回退到浏览器的默认 iframe 高度 150px,这是此类集成中最常见的错误。若打开时容器过小,脚本会在控制台记录警告。
  • 最小支持尺寸为 320 × 480 像素。 包括文档采集、双重验证(2FA)和 PIN 输入在内的每个界面都支持该尺寸。更小的布局不受支持。
  • 无上限。 宽容器会获得桌面布局(含交易摘要面板);窄容器会获得移动端布局。

与模态的差异

注意最后一行:当用户关闭内联小部件时,会触发 onClose 且你的容器被清空,因此请在 onClose 中渲染其替代内容。

容器错误

如果容器无法使用,将不会渲染,onOpen 不会触发,脚本会记录错误:
  • 在 init() 时: container 既不是元素也不是非空字符串。小部件保持未配置状态,随后调用 open() 将被拒绝。
  • 在 open() 时: 选择器未匹配任何元素、不是有效 CSS,或元素未附加到文档。
无法解析的容器绝不会回退到全屏模态。
container 选择器会在调用 open() 时解析,而不是在 init() 时解析,因此在元素尚不存在前调用 init() 是可以的。