CDN 静态资源(Vue/Tailwind)加载超时,请检查您的网络连接或尝试刷新页面。
{{ t('landing.hero_desc') }}
curl -X POST "/api/v1/orders" \
-H "X-API-Key: sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"amount": 99.9,
"currency": "USDT",
"merchant_order_id": "ORDER_12345",
"callback_url": "https://yoursite.com/webhook",
"return_url": "https://yoursite.com/success"
}'
{{ t('landing.why_desc') }}
{{ t('landing.f1_desc') }}
{{ t('landing.f2_desc') }}
{{ t('landing.f3_desc') }}
{{ t('landing.chains_desc') }}
{{ t('landing.integration_desc') }}
{{ t('landing.integration_step1_desc') }}
{{ t('landing.integration_step2_desc') }}
{{ t('landing.integration_step3_desc') }}
{{ t('register.reg_desc') }}
{{ t('register.reg_pending_desc') }}
{{ t('register.reg_active_desc') }}
{{ t('login.login_desc') }}
{{ t('reset_pwd.desc') }}
| {{ t('dashboard.tbl_order_id') }} | {{ t('dashboard.tbl_merchant_order_id') }} | {{ t('dashboard.tbl_amount') }} | {{ t('dashboard.tbl_status') }} | {{ t('dashboard.tbl_created_at') }} |
|---|---|---|---|---|
| {{ order.id }} | {{ order.merchant_order_id || '-' }} | {{ order.amount }} {{ order.currency }} | {{ order.status === 'pending' ? t('dashboard.status_pending') : (order.status === 'paid' || order.status === 'confirmed' ? t('dashboard.status_paid') : t('dashboard.status_expired')) }} | {{ new Date(order.created_at * 1000).toLocaleString() }} |
| {{ t('orders.tbl_order_id_addr') }} | {{ t('orders.tbl_merchant_order_id') }} | {{ t('orders.tbl_amount_order') }} | {{ t('orders.tbl_amount_paid') }} | {{ t('orders.tbl_status') }} | {{ t('orders.tbl_created_at') }} | {{ t('orders.tbl_ops') }} |
|---|---|---|---|---|---|---|
|
{{ order.id }}
{{ order.chain ? order.chain.toUpperCase() : '' }}: {{ order.address }}
|
{{ order.merchant_order_id || '-' }} | {{ order.amount }} {{ order.currency }} | {{ order.paid_amount || '0.00' }} {{ order.currency }} | {{ order.status === 'pending' ? t('orders.filter_pending') : (order.status === 'paid' ? t('orders.filter_paid') + '(待确认)' : (order.status === 'confirmed' ? t('orders.filter_confirmed') : (order.status === 'expired' ? t('orders.filter_expired') : t('orders.filter_cancelled')))) }} | {{ new Date(order.created_at * 1000).toLocaleString() }} |
{{ t('apikeys.desc') }}
{{ t('apikeys.reset_tip') }}
{{ t('apikeys.confirm_reset') }}
{{ t('webhooks.desc') }}
{{ t('webhooks.secret_desc') }}
{{ t('webhooks.confirm_regenerate') }}
{{ t('settings.desc') }}
无需开发,直接创建{{ t('docs.status_paylink') }}或二维码分享给客户
{{ t('docs.dev_desc') }}
{{ status.has_api_key ? t('docs.status_api_key_ok') : t('docs.status_api_key_no') }}
{{ status.has_webhook ? t('docs.status_webhook_ok') : t('docs.status_webhook_no') }}
{{ status.has_payment_link ? t('docs.status_paylink_ok') : t('docs.status_paylink_no') }}
{{ status.has_first_order ? t('docs.status_first_order_ok') : t('docs.status_first_order_no') }}
{{ t('tutorial.step1_desc') || '在左侧菜单点击“API 密钥”,点击“生成新密钥”,妥善保存生成的 API 密钥。' }}
{{ t('tutorial.step2_desc') || '当用户在您的网站点击“购买”或“结账”时,您的服务器后端需要向我们发送一个 POST 请求来创建订单。' }}
curl -X POST {{ siteUrl }}/api/v1/orders -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" -d '{
"amount": 100.0,
"currency": "USDT",
"merchant_order_id": "ORDER_123456"
}'
{{ t('tutorial.step3_desc') || '创建订单成功后,接口会返回一个 checkout_url。您只需要把用户重定向到这个链接,用户就会在我们提供的高颜值安全收银台页面完成支付。' }}
{{ t('tutorial.step4_desc') || '在左侧菜单点击“Webhook”并配置您的接收地址。用户付款成功后,我们会立刻给您发送一条通知,您的服务器收到后就可以给用户自动发货了!' }}
{{ t('docs.auth_desc') || 'Include your API key in the request headers:' }}
X-API-Key: sk_live_your_api_key_here
/api/v1/orders
{{ t('docs.create_order_desc') || 'Request Body (JSON):' }}
{
"amount": 100.5,
"currency": "USDT",
"merchant_order_id": "ORDER_20231001",
"metadata": {
"description": "年度会员订阅",
"user_id": 12345
},
"callback_url": "https://your-site.com/webhook",
"return_url": "https://your-site.com/success",
"expires_in": 1800
}
| {{ t('docs.tbl_field') }} | {{ t('docs.tbl_type') }} | {{ t('docs.tbl_required_col') }} | {{ t('docs.tbl_desc') }} |
|---|---|---|---|
| amount | number | {{ t('docs.val_required') }} | {{ t('docs.desc_amount') }} |
| currency | string | {{ t('docs.val_required') }} | {{ t('docs.desc_currency') }} |
| merchant_order_id | string | {{ t('docs.val_recommended') }} | {{ t('docs.desc_merchant_order_id') }} |
| metadata.description | string | {{ t('docs.val_optional') }} | {{ t('docs.desc_metadata') }} |
| callback_url | string | {{ t('docs.val_optional') }} | 本单 {{ t('docs.status_webhook') }}地址,覆盖全局配置 |
| return_url | string | {{ t('docs.val_optional') }} | {{ t('docs.desc_return_url') }} |
| expires_in | number | {{ t('docs.val_optional') }} | {{ t('docs.desc_expires_in') }} |
{{ t('docs.response_desc') || 'Success Response:' }}
{
"success": true,
"data": {
"id": "pay_xxxxxxxxxxxx",
"amount": 100.5,
"currency": "USDT",
"status": "pending",
"checkout_url": "https://domain.com/checkout/pay_xxxx",
"expires_at": 1719000000
}
}
{{ t('docs.webhook_desc') || 'When an order is paid, a POST request is sent to your callback_url:' }}
{
"order_id": "pay_xxxxxxxxxxxx",
"merchant_order_id": "ORDER_20231001",
"amount": 100.5,
"paid_amount": 100.5,
"currency": "USDT",
"status": "confirmed",
"chain": "tron",
"tx_hash": "abc123...",
"paid_at": 1719000000
}
{{ t('docs.webhook_sign_verify') }}
// HTTP 请求头:
X-StablePay-Signature: <hex> // HMAC-SHA256(rawBody, webhookSecret)
X-StablePay-Event: payment.confirmed
X-StablePay-Timestamp: 1719000000
// Node.js 验证示例:
const crypto = require('crypto');
const sig = req.headers['x-stablepay-signature'];
const expected = crypto
.createHmac('sha256', process.env.WEBHOOK_SECRET)
.update(rawBody) // 使用原始字节,不要 JSON.parse 后再序列化
.digest('hex');
if (sig !== expected) return res.status(401).send('Invalid signature');
/api/v1/orders/:id
{{ t('docs.get_order_desc') || 'Get the current status and details of a specific order. Replace :id with the order ID.' }}
{{ t('docs.response_desc') || 'Success Response:' }}
{
"success": true,
"data": {
"id": "ord_xxxx",
"merchant_order_id": "ORDER_20231001",
"amount": 100.5,
"paid_amount": 100.5,
"currency": "USDT",
"status": "paid",
"tx_hash": "0x..."
}
}
/api/v1/orders
{{ t('docs.list_orders_desc') || 'Get a list of your orders with pagination.' }}
Query Parameters:
page (optional): Page number (default: 1)page_size (optional): Items per page (default: 20){{ t('docs.response_desc') || 'Success Response:' }}
{
"success": true,
"data": {
"orders": [
{
"id": "ord_xxxx",
"amount": 100.5,
"status": "paid"
}
],
"total": 42
}
}
/api/v1/orders/:id/cancel
{{ t('docs.cancel_order_desc') || 'Manually cancel a pending order. Replace :id with the order ID.' }}
{{ t('docs.response_desc') || 'Success Response:' }}
{
"success": true,
"message": "Order cancelled successfully"
}