仅限 Enterprise 客户使用。
1. 结账 UI 扩展概述
结账 UI 扩展允许应用开发人员构建自定义结账功能,商家可以在结账流程的特定扩展点安装和使用这些功能。
-
扩展点类型:
-
静态扩展点(Static Extension Points):与核心结账功能(如联系信息、运输方式、订单摘要)相关联。如果核心功能不展示,则绑定的静态扩展点也不会呈现。例如:Checkout::Contact::RenderAfter(在联系表单模块下方)、Checkout::ShippingMethods::RenderBefore(在运输方式标题前)。
-
动态扩展点(Dynamic Extension Points):与核心结账功能无关,在每个结账步骤的核心功能之间呈现,且无论其他结账元素如何,动态扩展始终会显示。商家可通过结账编辑器将其放置在结账页、订单页和 Thank You 页中。例如:结账页的 Checkout::Dynamic::Render[Information1](在联系表单模块上方)、感谢页/订单页的 Checkout::Dynamic::Render[OrderSummary1](在商品列表上方)。
-
注册方式:UI 扩展使用 render(extensionPoint, App) 来注册扩展点。
2. 扩展开发流程
开发流程主要包括:账号登录、创建扩展、连接扩展(可选)、开发扩展、预览扩展、发布扩展和上线使用。
-
创建/开发:使用 SHOPLINE CLI 命令 sl extension create 创建扩展,并选择 Checkout UI Customizer 类型。
-
目录结构:扩展结构主要包含 locales(多语言配置)、src(扩展源代码)和 shopline.ui.customizer.toml(配置文件)。
-
预览/发布:使用 sl extension serve 进行本地预览,使用 sl extension push 推送扩展,然后在商家后台发布和安装应用,并通过结账编辑器添加和放置 UI 扩展。
-
本地开发排障:确保代码中使用的扩展点包含在配置文件中。对于动态扩展点,可以通过 URL 的 placement-reference 参数指定渲染位置。
3. 配置文件 (shopline.ui.customizer.toml)
该文件自动生成,包含扩展名称、扩展点位置、扩展能力设置等定义。
-
核心属性:
-
type:扩展类型,固定为 checkout_ui_customizer。
-
name:扩展的名称。
-
extension_points:扩展将渲染的预设点列表,必须包含 render 代码中指定的扩展点。
-
能力(capabilities):定义 UI 扩展的能力。
-
block_progress:布尔值,定义扩展是否具备阻断结账流程的能力(需商家在结账编辑器中勾选开启)。
-
network_access:布尔值,定义扩展是否具备访问网络的能力。
-
商家配置项(settings):定义一组用户配置字段,最终呈现在结账编辑器中供商家填写,扩展中可通过 props.settings.{key} 读取。支持的数据类型包括文本、数字、布尔值和日期等。
4. 标准 API 和全局钩子
Standard API(通过组件的 props 对象下发)和**全局钩子(Hooks)**用于扩展与应用程序的交互和获取信息。
-
核心 API 示例:
-
interceptor:用于阻断结账流程并进行校验(需开启 block_progress 能力)。
-
request:基于 axios 的网络请求实例(需开启 network_access 能力)。
-
cost:当前结账费用的详细信息。
-
lines:商品行信息。
-
applyCheckoutLinesChange:更新商品行信息(仅结账页可用)。
-
i18n:用于根据当前本地化翻译内容。
-
storage:当前扩展的键值存储。
-
settings:访问商家配置项的值。
-
核心 Hooks 示例:
-
useApi():返回当前扩展点接收的完整 props 对象。
-
useCheckoutLineTarget():获取当前商品行信息(仅在 Checkout::CheckoutLineDetails::RenderAfter 扩展点生效)。
-
useTotalAmount():获取当前结账中商品总金额。
5. 安全和渲染原理
结账 UI 扩展通过安全可靠的方式自定义结账页面,不会影响结账或客户数据的安全。
-
沙箱环境:扩展代码被隔离在 Web Worker 的沙箱环境运行,无法访问或操作结账页面的元素,无权访问页面的敏感信息。
-
远程渲染:核心原理是将定义 UI 代码和渲染 UI 代码分离。扩展代码(Remote)在 Web Worker 中运行,生成 Virtual Dom Tree,通过 RPC 调用发送序列化指令给实际渲染环境(Host)。
6. UI 组件
扩展开发只能使用指定的 UI 组件和 API,不支持渲染原生 HTML 标签。组件的样式会跟随商家的店铺主题配置变化。
提供了以下常用 UI 组件及其属性说明:
-
信息展示:Text(文本)、Badge(徽章)、Banner(横幅)、Image(图片)、ItemThumbnail(商品缩略图)、Divider(分隔符)、Tooltip(提示)。
-
布局容器:View(通用容器)、Grid(网格布局)、GridItem(网格子容器)、InlineLayout(多列行内布局)、BlockStack(块级栈)、BlockLayout(多行块级布局)。
-
表单/交互:Button(按钮)、Link(链接)、Pressable(点击容器)、TextField(文本输入)、PhoneField(电话输入)、Select(下拉选择)、Checkbox(复选框)、ChoiceList / Choice(选择列表/选项)、Stepper(步进器)。
-
加载/骨架屏:Spinner(加载中)、SkeletonText(文本骨架屏)、SkeletonTextBlock(文本块骨架屏)、SkeletonImage(图片骨架屏)。
-
样式辅助:StyleHelper(条件样式辅助工具,可根据视口大小等条件调整样式)。
详细文档可查看: