文件预览

checkout-js-component-modes.md

查看 Huifu Pay Integration 技能包中的文件内容。

文件内容

references/checkout-js-component-modes.md

# `checkout` 组件与单支付按钮模式

> 这份文档只讲组件选择:什么时候用 `checkout`,什么时候用 `alipay` / `wechatpay` / `unionpay` 单按钮,以及它们对 `createPreOrder` 的共同要求。

## 组件模式总览

| 模式 | 组件名 | 适合场景 |
|------|--------|----------|
| 完整收银台 | `checkout` | 一个区域展示多种支付方式,让用户自己选 |
| 支付宝单按钮 | `alipay` | 页面只需要支付宝入口 |
| 微信单按钮 | `wechatpay` | 页面只需要微信入口 |
| 云闪付单按钮 | `unionpay` | 页面只需要云闪付入口 |

## 共同参数

所有模式都依赖同一组核心参数:

```js
const element = hfPay.component("checkout", {
  createPreOrder,
  callback,
});
```

| 参数 | 类型 | 说明 |
|------|------|------|
| `createPreOrder` | Function | 前端调用自有服务端创建预下单 |
| `callback` | Function | 接收支付过程事件,驱动页面提示 |

## `checkout` 模式

适合:
- 商户想在一个容器里统一承载支付方式选择
- 页面希望保留“选择支付方式 -> 发起支付”的完整收银台体验

示例:

```js
const checkout = hfPay.component("checkout", {
  createPreOrder,
  callback,
});

checkout?.mount("#checkout-container");
```

## 单支付按钮模式

适合:
- 商户自己决定页面布局
- 某个区域只展示一个支付入口
- 需要把不同支付按钮插到不同位置

示例:

```js
const wechatButton = hfPay.component("wechatpay", {
  createPreOrder,
  callback,
});

wechatButton?.mount("#wechat-button");
```

## 环境展示规则

根据当前公开资料:
- 支付宝内只展示支付宝
- 微信内只展示微信
- 云闪付内只展示云闪付
- 系统浏览器默认展示支付宝与微信

参考:
- `references/shared-frontend-sdk-matrix.md`

## 选择建议

| 你的诉求 | 推荐模式 |
|----------|----------|
| 想最快接好一个完整支付区域 | `checkout` |
| 想自己控制布局,只嵌一个按钮 | 单按钮 |
| 同页不同区域放不同支付入口 | 单按钮 |
| 需要同时展示多种支付方式并允许用户切换 | `checkout` |

## 注意事项

- 不管是 `checkout` 还是单按钮,最终都还是走同一条主链路:`createPreOrder -> HFPay -> callback -> 服务端确认`。
- 组件模式影响的是页面呈现,不改变服务端必须预下单、必须查单的基本事实。
- 不要为了“兼容所有场景”在一个页面同时无约束地挂多个支付方式组件,先根据业务流和环境做收敛。