FuturePay Checkout SDK
一个功能强大的支付收银台 SDK,支持弹窗和嵌入两种模式,和完整的 TypeScript 支持。
安装
使用 npm 安装
npm install @futurepay/checkout-sdk
# 或
yarn add @futurepay/checkout-sdk
# 或
pnpm add @futurepay/checkout-sdk
使用 CDN 引入
UMD 全局方式(快速开始)
<!-- 通过 jsDelivr CDN -->
<script src="https://cdn.jsdelivr.net/npm/@futurepay/checkout-sdk@latest/dist/index.umd.min.js"></script>
<script>
// SDK 会挂载到 window.FuturePayCheckoutSDK
const { openCheckoutModal, embedCheckout, PaymentCheckout } =
window.FuturePayCheckoutSDK;
// openCheckoutModal(checkoutOptions);
</script>
ESM 模块方式(现代浏览器)
<script type="module">
import {
openCheckoutModal,
embedCheckout,
PaymentCheckout,
} from "https://cdn.jsdelivr.net/npm/@futurepay/checkout-sdk@latest/dist/index.esm.js";
// openCheckoutModal(checkoutOptions);
</script>
也可以将上面的
cdn.jsdelivr.net
换成unpkg.com
等其他 CDN 服务。 如https://unpkg.com/@futurepay/checkout-sdk@latest/dist/index.umd.min.js
https://unpkg.com/@futurepay/checkout-sdk@latest/dist/index.esm.js
使用方法
基本用法
import { openCheckoutModal, embedCheckout } from "@futurepay/checkout-sdk";
//请注意 sessionToken 和 orderInfo 互斥 会优先使用sessionToken
// 1. 后端调用接口生成token (推荐)
// 获取session 需要商户自己的后端调用All-In-One Checkout (V2)生成sessionToken
// 获取session文档地址:https://doc.futurepay.global/update/docs/all-in-one-checkout-copy#/
const session = await fetch("your/api/session").then((res) => res.json());
const = {
sessionToken: session,
env: "test", // 'test' | 'prod'
};
//2. 前端直接生成订单
// 如果不想通过后端生成session,则需要提供appId, merchantId, merchantRsaPublicKey, orderInfo
const checkoutOptions = {
appId: "your-app-id",
merchantId: "your-merchant-id",
merchantRsaPublicKey: "your-merchant-rsa-public-key",
env: "test", // 'test' | 'prod'
orderInfo: {
amount: {
currency: "USD",
value: 100,
},
countryCode: "US",
productDetail: "Sample Product",
origin: "https://your-website.com",
reference: "ORDER_123",
returnUrl: "https://your-website.com/return",
webhookUrl: "https://your-website.com/webhook",
productName: "Sample Product",
paymentMethod: {
type: "card",
firstName: "John",
lastName: "Doe",
shopperEmail: "[email protected]",
telephoneNumber: "1234567890",
},
browserInfo: {
terminalType: "web",
osType: "desktop",
},
},
};
高级用法
import { PaymentCheckout } from "@futurepay/checkout-sdk";
const checkout = new PaymentCheckout({
env: "test",
sessionToken: "your-session",
//收银台内部配置
checkoutConfig: {
theme: "dark",
},
// iframe样式配置(可选)
style: {
},
// iframe样式配置(可选)
className:'',
// 弹窗配置 (可选)
modal: {
closableByOverlay: true,
overlayColor: "rgba(0, 0, 0, 0.6)",
loading: {
show: true,
color: "#007bff",
},
},
//(可选)
callbacks: {
onSuccess: () => {
console.log("支付成功");
// 处理支付成功逻辑
},
onError: () => {
console.error("支付失败");
// 处理支付失败逻辑
},
onClose: () => {
console.log("收银台关闭");
},
},
});
// 打开弹窗
await checkout.openModal();
// 或嵌入到容器
await checkout.embed("#container");
使用演示
演示链接
API 参考
CheckoutOptions
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
sessionToken | string | 否 | 会话 ID |
appId | string | 否 | 应用 ID |
merchantId | string | 否 | 商户 ID |
merchantRsaPublicKey | string | 否 | 商户 RSA 公钥 |
env | string | 否 | 运行环境: 'test' / 'prod' |
orderInfo | object | 否 | 订单信息 |
callbacks | object | 否 | 回调函数配置 |
style | object | 否 | iframe样式配置(嵌入式模式下高度只能设置 maxHeight) |
className | string | 否 | iframe样式配置 |
modal | object | 否 | 弹窗配置 |
checkoutConfig | object | 否 | 收银台配置 |
mode | string | 否 | 可选 payment / subscription 默认为payment |
callbacks 回调函数
回调函数 | 参数类型 | 描述 |
---|---|---|
onSuccess | 支付成功回调 | |
onPending | 支付等待回调(用户手动转账) | |
onError | 支付失败回调 | |
onClose | 收银台关闭回调 | |
onHeightChange | number | 高度变化回调(仅嵌入模式) |
modal 弹窗配置
参数 | 类型 | 描述 |
---|---|---|
closableByOverlay | boolean | 点击遮罩层是否可关闭 |
overlayColor | string | 遮罩层颜色 |
loading | object | 加载动画配置 |
loading 加载动画配置
参数 | 类型 | 描述 |
---|---|---|
show | boolean | 是否显示加载动画 |
color | string | 加载动画颜色 |
checkoutConfig 收银台配置
参数 | 类型 | 描述 |
---|---|---|
theme | string | 暗黑模式,可选 dark / light / system 默认为system |
lng | string | 语言,可选 en / zh / ko (默认为自动根据浏览器选择) |
whiteLabel | boolean | 是否隐藏futurepay的标识,可选 true / false 默认为false |
创建订单时会影响收银台行为的配置
使用sessionToken 请在接口配置(All-In-One Checkout (V2) ) 使用前端直接生成订单请在orderInfo中配置
参数 | 类型 | 描述 |
---|---|---|
directReturn | boolean | 成功后直接返回到returnUrl,而不是跳转到收银台成功页 |
isexchange | boolean | 是否展示换汇,, 如果为false 收银台不启用换汇 |
paymentMethod.type | string | 如果指定, 收银台会隐藏支付方式切换, 嵌入式推荐指定 |
CheckoutInstance 方法
方法 | 参数 | 返回值 | 描述 |
---|---|---|---|
openModal() | Promise<CheckoutInstance> | 以弹窗模式打开收银台 | |
embed(container) | HTMLElement | string | Promise<CheckoutInstance> | 将收银台嵌入到指定容器 |
close() | void | 关闭收银台 | |
postMessage(message) | any | void | 向收银台发送消息 |
事件处理
收银台会发送以下消息事件:
CHECKOUT_SUCCESS
: 支付成功CHECKOUT_ERROR
: 支付失败CHECKOUT_CLOSE
: 关闭收银台CHECKOUT_HEIGHT_CHANGE
: 高度变化CHECKOUT_REDIRECT
: 重定向跳转REQUEST_HEIGHT_UPDATE
: 请求高度更新
环境配置
SDK 支持二种运行环境:
环境 | 描述 | 收银台地址 |
---|---|---|
test | 测试环境 | https://checkout-v2.futurepay-develop.com |
prod | 生产环境 | https://checkout-v2.futurepay.global |
安全机制
- RSA + AES 双重加密: 订单信息使用 AES 加密,AES 密钥使用 RSA 公钥加密
- 消息来源验证: 严格验证 postMessage 的来源域名
- HTTPS 通信: 所有网络请求均使用 HTTPS 协议
- CSP 兼容: 支持内容安全策略(Content Security Policy)
故障排除
高度自适应不工作
- 确认使用的是嵌入模式(
embed
方法) - 检查收银台应用是否支持高度自适应
- 确认浏览器支持
ResizeObserver
API
加载失败
- 检查
appId
merchantRsaPublicKey
和merchantId
是否正确 - 确认网络连接正常
- 验证订单信息格式是否正确
环境配置问题
- 确认
env
参数设置正确 - 检查对应环境的服务是否可用
- 验证 API 密钥是否匹配环境
浏览器兼容性
- Chrome ≥ 70
- Firefox ≥ 63
- Safari ≥ 12
- Edge ≥ 79
- 移动端现代浏览器
Updated about 21 hours ago