Skip to content

前端集成

IronixPay 提供两种集成模式,选择最适合你结账流程的方式。

跳转模式嵌入模式
工作量最少 — 无需前端 SDK需要 @ironix-pay/sdk
体验跳转到 IronixPay 页面在你的页面内完成支付
适用快速接入、移动端优先品牌化定制体验

TIP

两种模式使用相同的后端 API 创建 Checkout Session,区别仅在前端的处理方式。

前置步骤:创建会话(后端)

无论哪种模式,都需要你的后端先创建 Checkout Session:

javascript
// Node.js / Express 示例
app.post('/create-checkout', async (req, res) => {
  const response = await fetch('https://api.ironixpay.com/v1/checkout/sessions', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.IRONIXPAY_SECRET_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      pricing_amount: '10.50',       // 10.50 USDT
      pricing_currency: 'USDT',
      currency: 'USDT',
      network: 'TRON',
      success_url: 'https://yoursite.com/success',
      cancel_url: 'https://yoursite.com/cancel',
      client_reference_id: req.body.orderId  // 可选
    })
  })

  const session = await response.json()
  res.json(session)
})

IMPORTANT

切勿在前端暴露密钥(sk_live_... / sk_test_...)。始终从后端创建会话。


方案 A:跳转模式

最简单的接入方式 — 将客户跳转到 IronixPay 托管的收银页面。

流程

客户点击"支付"


你的后端创建会话


跳转到 session.url ──▶ IronixPay 收银台
      │                       │
      │                  支付完成
      │                       │
      ▼                       ▼
 cancel_url ◀── 或 ──▶ success_url

前端代码

javascript
// 客户点击"支付"时
async function handlePayment() {
  // 1. 调用你的后端创建会话
  const res = await fetch('/create-checkout', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ orderId: 'order_123' })
  })
  const session = await res.json()

  // 2. 跳转到 IronixPay 收银台
  window.location.href = session.url
}

搞定。支付后客户会被跳转回 success_urlcancel_url

NOTE

始终通过 Webhooks 验证支付状态 — 不要仅依赖跳转。客户可能在跳转前关闭浏览器。


方案 B:嵌入模式(SDK)

使用 @ironix-pay/sdk 将收银台 UI 嵌入到你的页面中。

安装

bash
npm install @ironix-pay/sdk

或通过 CDN:

html
<script src="https://unpkg.com/@ironix-pay/sdk@0.1.0/dist/ironix-pay.umd.js"></script>

流程

客户点击"支付"


你的后端创建会话


前端获得 sessionId


SDK 在 #checkout 挂载 iframe ──▶ 嵌入式收银台
      │                               │
      │                          支付事件
      │                               │
      ▼                               ▼
el.on('payment_success')   el.on('payment_expired')

前端代码

javascript
import { IronixPay } from '@ironix-pay/sdk'

// 1. 初始化 SDK
const ironixPay = new IronixPay({
  environment: 'sandbox'              // 或 'production'
})

// 2. 调用后端创建会话
const res = await fetch('/create-checkout', { method: 'POST', ... })
const session = await res.json()

// 3. 创建并挂载支付元素
const element = ironixPay.createPaymentElement({
  sessionId: session.id,
  theme: 'light',                     // 'light' | 'dark' | 'auto'
  locale: 'zh-CN'                     // 'en' | 'zh-CN'
})

element.mount('#checkout-container')

// 4. 监听事件
element.on('ready', () => {
  console.log('收银台已加载')
})

element.on('payment_success', (result) => {
  console.log('支付成功!', result.transactionHash)
  // 展示成功 UI,通过 webhook 在后端验证
})

element.on('payment_expired', ({ sessionId }) => {
  console.log('会话已过期:', sessionId)
  // 展示重试 UI
})

element.on('error', (error) => {
  console.error('收银台错误:', error.code, error.message)
})

HTML

html
<!-- SDK 会在这里注入 iframe -->
<div id="checkout-container"></div>

清理

页面跳转或组件卸载时:

javascript
element.unmount()

SDK 参考

new IronixPay(options)

选项类型默认值说明
environment'production' | 'sandbox''production'API 环境
publicKeystring公开 API 密钥(可选,预留)
checkoutUrlstring自部署的 checkout URL

ironixPay.createPaymentElement(options)

选项类型默认值说明
sessionIdstring必填后端获取的会话 ID
theme'light' | 'dark' | 'auto''dark'UI 主题
locale'en' | 'zh-CN''en'语言
style.widthstring'100%'元素宽度
style.heightstring'480px'初始高度(自动调整)
style.borderRadiusstring'12px'圆角半径

事件

事件回调说明
ready() => void收银台 iframe 加载完毕
payment_success(result: PaymentResult) => void链上支付确认
payment_detected(data) => void检测到交易,等待确认
payment_expired(data) => void会话已过期
error(error: PaymentError) => void发生错误
resize(data: { height }) => voidiframe 内容高度变化

PaymentResult

typescript
{
  sessionId: string
  status: 'Paid' | 'Overpaid'
  amountReceived: number
  transactionHash?: string
}

支持的网络

查看支持的网络了解完整的链列表、USDT 合约地址和沙盒可用性。

下一步