Skip to content

支付 API

支付订单管理接口,包括创建订单、发起支付、查询订单、订单列表、支付方式和产品价格。

路由前缀/payment

源码apps/backend/src/routes/payment.ts

限流:60 秒内最多 10 次请求


认证

所有接口需要 JWT 认证:

Authorization: Bearer <JWT>

类型定义

ProductType(产品类型)

说明
subscription订阅计划
credit_pack积分包

ProviderCode(支付渠道)

说明
paddlePaddle(国际)
yungouosYunGouOS(国内)
stripeStripe(国际)
manual手动处理
mock模拟支付(开发环境)

PaymentMethod(支付方式)

说明
wechat微信支付
alipay支付宝
card银行卡
paypalPayPal
bank_transfer银行转账

Currency(货币)

说明
CNY人民币
USD美元

OrderStatus(订单状态)

说明
created已创建,待支付
pending支付中(已调起支付)
paid已支付,待履约
fulfilling履约中
fulfilled已完成
fulfill_failed履约失败
expired已过期
failed支付失败
refunded已退款

端点

1. 创建订单

POST /payment/orders

创建支付订单。用户必须属于一个团队才能创建订单。

请求体:

字段类型必填说明
productTypeProductType产品类型
productCodestring产品代码
currencyCurrency货币类型(默认 CNY
metadataobject自定义元数据

响应 200 OK

json
{
  "success": true,
  "data": {
    "orderId": "uuid",
    "orderNo": "PO_20260307_ABCD1234",
    "amount": 9900,
    "currency": "CNY",
    "expiresAt": "2026-03-07T10:30:00.000Z"
  }
}

amount 单位为分(CNY)或 cents(USD)。

错误码:

HTTPcode说明
400NO_TEAM用户未加入任何团队
404PRODUCT_NOT_FOUND产品不存在
404PRICE_NOT_FOUND价格未配置
500INTERNAL_ERROR服务端错误

2. 发起支付

POST /payment/orders/:id/pay

对已创建的订单发起支付,返回支付凭据(支付 URL、二维码等)。

路径参数:

参数说明
id订单 ID

请求体:

字段类型必填说明
providerProviderCode支付渠道
paymentMethodPaymentMethod支付方式
returnUrlstring支付完成后的回跳 URL

响应 200 OK

json
{
  "success": true,
  "data": {
    "orderId": "uuid",
    "orderNo": "PO_20260307_ABCD1234",
    "status": "pending",
    "providerOrderId": "provider-order-id",
    "payUrl": "https://pay.example.com/...",
    "qrCode": "weixin://wxpay/...",
    "qrCodeUrl": "https://example.com/qr.png",
    "checkoutToken": "paddle-checkout-token",
    "expiresAt": "2026-03-07T10:30:00.000Z"
  }
}

不同渠道返回的支付凭据不同:payUrl(跳转支付)、qrCode(二维码内容)、qrCodeUrl(二维码图片)、checkoutToken(Paddle overlay)。

错误码:

HTTPcode说明
400NO_TEAM用户未加入任何团队
400ORDER_NOT_PAYABLE订单状态不允许支付
400ORDER_EXPIRED订单已过期
400PROVIDER_NOT_FOUND支付渠道未注册
404ORDER_NOT_FOUND订单不存在
500INTERNAL_ERROR服务端错误

3. 查询订单

GET /payment/orders/:id

获取订单详情。仅能查询当前用户所在团队的订单。

路径参数:

参数说明
id订单 ID

响应 200 OK

json
{
  "success": true,
  "data": {
    "id": "uuid",
    "orderNo": "PO_20260307_ABCD1234",
    "productType": "credit_pack",
    "product": {
      "type": "credit_pack",
      "name": "100 积分包",
      "credits": 100
    },
    "amount": 9900,
    "currency": "CNY",
    "status": "fulfilled",
    "provider": "yungouos",
    "paymentMethod": "wechat",
    "createdAt": "2026-03-07T10:00:00.000Z",
    "paidAt": "2026-03-07T10:05:00.000Z",
    "fulfilledAt": "2026-03-07T10:05:01.000Z"
  }
}

错误码:

HTTPcode说明
400NO_TEAM用户未加入任何团队
404ORDER_NOT_FOUND订单不存在(包括无权访问)
500INTERNAL_ERROR服务端错误

4. 订单列表

GET /payment/orders

获取当前用户所在团队的订单列表。

查询参数:

参数类型必填默认说明
limitnumber20每页数量
offsetnumber0偏移量

响应 200 OK

json
{
  "success": true,
  "data": [
    {
      "id": "uuid",
      "orderNo": "PO_20260307_ABCD1234",
      "productType": "credit_pack",
      "amount": 9900,
      "currency": "CNY",
      "status": "fulfilled",
      "createdAt": "2026-03-07T10:00:00.000Z",
      "paidAt": "2026-03-07T10:05:00.000Z"
    }
  ]
}

错误码:

HTTPcode说明
400NO_TEAM用户未加入任何团队
500INTERNAL_ERROR服务端错误

5. 可用支付方式

GET /payment/methods

获取当前可用的支付方式列表。

查询参数:

参数类型必填说明
currencyCurrency按货币类型过滤

响应 200 OK

json
{
  "success": true,
  "data": [
    {
      "provider": "yungouos",
      "method": "wechat",
      "name": "微信支付",
      "currencies": ["CNY"]
    }
  ]
}

6. 产品价格列表

GET /payment/prices

获取所有活跃产品的价格列表。

查询参数:

参数类型必填默认说明
currencyCurrencyCNY货币类型

响应 200 OK

json
{
  "success": true,
  "data": [
    {
      "id": "uuid",
      "productType": "credit_pack",
      "productCode": "credits_100",
      "name": "100 积分包",
      "description": "购买 100 积分",
      "amount": 9900,
      "currency": "CNY",
      "credits": 100,
      "billingPeriod": null,
      "isFeatured": true
    }
  ]
}

错误码:

HTTPcode说明
500INTERNAL_ERROR服务端错误

通用错误格式

支付 API 的错误响应统一格式:

json
{
  "success": false,
  "error": {
    "code": "ORDER_NOT_FOUND",
    "message": "订单不存在"
  }
}

支付系统完整错误码列表见源码 apps/backend/src/domain/payment/errors.ts

AI Workflow Editor