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/[email protected]/dist/index.umd.min.js"></script>
<script>
// SDK 会挂载到 window.FuturePayCheckoutSDK
const { openCheckoutModal, embedCheckout,createElementsCheckout, PaymentCheckout } =
window.FuturePayCheckoutSDK;
// openCheckoutModal(checkoutOptions);
</script>
也可以将上面的
cdn.jsdelivr.net换成unpkg.com等其他 CDN 服务。 如https://unpkg.com/@futurepay/[email protected]/dist/index.umd.min.js
使用方法
基本用法
import { openCheckoutModal, embedCheckout, createElementsCheckout } from "@futurepay/checkout-sdk";
// 获取session 需要商户自己的后端调用All-In-One Checkout (V2)生成sessionToken
// 获取session文档地址:https://doc.futurepay.global/docs/all-in-one-checkout-v2
const session = await fetch("your/api/session").then((res) => res.json());
const checkoutOptions = {
sessionToken: session,
env: "test", // 'test' | 'prod'
};
// 打开弹窗
await openCheckoutModal(checkoutOptions)
// 嵌入
await embedCheckout("#container",checkoutOptions);
// 表单嵌入
const submit = await createElementsCheckout("#container",checkoutOptions);
// your/api/session的api node示例代码
import { format } from 'date-fns'
//正式环境使用 https://api.futurepay.global 开发环境使用 https://api.futurepay-develop.com
const baseUrl = 'https://api.futurepay-develop.com'
//在商户后台获取
const paymentConfig = {
appKey: 'your appKey',
appID: 'your appID',
merchantID: 'your merchantID',
}
//获取收银台会话
export async function getSession() {
const body = {
amount: {
value: 10000, //金额
currency: 'USD', //币种
},
countryCode: 'US', //货币
reference: '123456789', // 使用您的transactionId 作为唯一 reference
returnUrl: 'https://futurepay.global', //用户交易重定向页面
origin: 'https://futurepay.global', //您的网站地址
productDetail: 'productDetail',
productName: 'productName',
shopImgLink: '', //产品图片 最好传入 在收银台会展示
directReturn: true, //交易成功后是否直接跳转到returnUrl
webhookUrl: `/api/checkout/payment`, //您的webhookUrl地址 交易变动通知
}
const { appKey, appID, merchantID } = paymentConfig
const data = await fetch(baseUrl + '/checkout/newSession', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
appId: appID,
merchantId: merchantID,
curTime: format(new Date(), 'yyyy-MM-dd HH:mm:ss'), //yyyy-MM-dd HH:mm:ss的格式即可 可以使用您自己的时间库
Authorization: SingUtils.getSign(body, appKey), //SingUtils类 请查看文档 https://doc.futurepay.global/reference/api%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81 获取签名类
} as HeadersInit,
body: JSON.stringify(body),
}).then((res) => res.json())
//如果使用收银台 请使用sessionToken
return {
sessionToken: data.data.sessionToken,
url: data.data.checkOutUrl,
}
}高级用法
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("支付成功");
// 默认成功后会直接重定向到returnUrl
},
onError: () => {
console.error("支付失败");
// 处理支付失败逻辑
},
onClose: () => {
console.log("收银台关闭");
},
},
});
// 打开弹窗
await checkout.openModal();
// 嵌入
await checkout.embed("#container");
// 表单嵌入
const submit = await checkout.createElements("#container");
const result = await elementsSubmit()
使用演示
演示链接
API 参考
CheckoutOptions
| 参数 | 类型 | 必填 | 描述 | 订阅模式是否可用 |
|---|---|---|---|---|
| sessionToken | string | 否 | 会话 ID | 是 |
| appId | string | 否 | 应用 ID (如果使用sessionToken 则不需要设置) | 否 |
| merchantId | string | 否 | 商户 ID (如果使用sessionToken 则不需要设置) | 否 |
| merchantRsaPublicKey | string | 否 | 商户 RSA 公钥 (如果使用了sessionToken 则不需要设置) | 否 |
| orderInfo | object | 否 | 订单信息 (如果使用了sessionToken 则不需要设置) | 是 |
| env | string | 否 | 运行环境: 'test' / 'prod' | 是 |
| callbacks | object | 否 | 回调函数配置 | 是 |
| style | object | 否 | iframe样式配置(嵌入式模式下高度只能设置 maxHeight) | 是 |
| className | string | 否 | iframe样式配置 | 是 |
| modal | object | 否 | 弹窗配置 | 是 |
| checkoutConfig | object | 否 | 收银台配置 | 是 |
| mode | string | 否 | 可选 payment / subscription 默认为payment (payment:收单模式 subscription:订阅模式) |
callbacks 回调函数
回调函数 | 参数类型 | 描述 |
|---|---|---|
onSuccess | 支付成功回调 | |
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 / pt /ja / fr / es / ar (默认为自动根据浏览器选择) |
| whiteLabel | boolean | 是否隐藏futurepay的标识,可选 true / false 默认为false |
| cssVariables | object | 收银台颜色控制(请注意这个会覆盖theme的色值) |
| darkCssVariables | object | 收银台暗黑模式颜色控制(请注意这个会覆盖theme的色值) |
cssVariables和darkCssVariables 配置 (可以使用hex hsl rgb等字符串配置)
| 参数 | 类型 | 描述 |
|---|---|---|
| primaryColor | string | 主题色 |
| background | string | 背景 |
| foreground | string | 页面文字颜色 |
| secondary | string | 输入框背景颜色等二级背景色 |
| secondaryForeground | string | 页面二级文字颜色 |
| cardBackground | string | 骨架屏等卡片背景色 |
| border | string | 边框色 |
| accent | string | 侧边栏背景色 |
创建订单时会影响收银台行为的配置(订阅模式不可用)
使用sessionToken 请在接口配置(All-In-One Checkout (V2) )
| 参数 | 类型 | 描述 |
|---|---|---|
| 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: 重定向跳转
环境配置
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方法) - 检查收银台应用是否支持高度自适应
- 确认浏览器支持
ResizeObserverAPI
加载失败
- 确认网络连接正常
- 验证传入容器是否存在
环境配置问题
- 确认
env参数设置正确 - 检查对应环境的服务是否可用
- 验证 API 密钥是否匹配环境
浏览器兼容性
- Chrome ≥ 60
- Firefox ≥ 60
- Safari ≥ 10
- Edge ≥ 16
- 能跑基本的es6语法的浏览器基本都兼容
Updated 5 days ago