创建支付

创建一笔支付单并拿到结账链接。支付单在 30 分钟内有效;付款人完成支付后,你会收到 payment.succeeded Webhook。

POST/api/v1/payments需要 API Key

请求参数

参数类型说明
amount必填string金额,如 "12.34"。最多 2 位小数,必须大于 0,上限 $10,000,000.00
currency可选string币种,当前仅支持 USD(默认)
reference可选string你的订单号,同一商户内唯一。相同订单号且金额一致时返回同一笔支付;金额不同返回 REFERENCE_CONFLICT
description可选string商品或服务描述,付款人可见,最长 200 字
customer_email可选string限定付款人。设置后其他账户不能支付该单,返回 CUSTOMER_MISMATCH
metadata可选object自定义键值,序列化后不超过 2KB,会原样出现在查询结果和 Webhook 中
success_url可选string付款成功后付款人浏览器跳转的地址(http/https)
cancel_url可选string付款人取消后跳转的地址

请求示例

curl "https://your-domain/api/v1/payments" \
  -X POST \
  -H "Authorization: Bearer $SPACEPAY_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6f1c2a9e-3b7d-4c55-9a10-2f8e7d6c5b4a" \
  -d '{
    "amount": "12.34",
    "reference": "order-2026-0001",
    "description": "拿铁两杯",
    "metadata": { "sku": "latte" },
    "success_url": "https://shop.example/paid"
  }'

响应字段

字段说明
payment.id支付单编号,形如 pay_1
payment.numeric_id纯数字编号,便于数据库存储
payment.reference你的订单号;未传时自动生成
payment.amount_cents金额(整数分),如 1234
payment.amount金额(十进制字符串)
payment.currencyUSD
payment.status见下方状态表
payment.refunded_cents已退款金额(分)
payment.refundable_cents剩余可退金额(分)
payment.metadata创建时传入的自定义数据
payment.checkout_url付款人结账地址,交给浏览器打开
payment.created_at创建时间(毫秒时间戳)
payment.paid_at付款时间;未支付时为 null
payment.expires_at过期时间(创建后 30 分钟)

支付状态

CREATEDSUCCEEDEDPARTIALLY_REFUNDEDREFUNDEDEXPIREDCANCELED
状态含义
CREATED待支付,等待付款人完成结账
SUCCEEDED付款成功
PARTIALLY_REFUNDED已部分退款
REFUNDED已全额退款
CANCELED付款人取消
EXPIRED超过 30 分钟未支付

幂等与去重

  • Idempotency-Key:网络超时后用同一个键重试,24 小时内会重放原响应,并返回 Idempotent-Replayed: true;同键不同参数返回 422。
  • reference:适合作为业务侧去重键。相同订单号且金额一致时返回同一笔支付,不会重复创建。

两者可以同时使用:Idempotency-Key 保证单次请求的传输安全,reference 保证业务订单唯一。

注意事项

  • 支付单 30 分钟后过期,过期后不能再付款,需要重新创建。
  • 设置 customer_email 后,只有该邮箱的账户能付款;不确定付款人时不要设置。
  • metadata 只用于你的业务数据,不要放密钥、密码等敏感信息。
  • 金额是虚拟资金;本环境不产生真实扣款。
!不要用前端传来的金额直接创建支付:金额应由你的服务端根据订单计算,否则用户可以篡改价格。