Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

PaymentService

支付管理服务,负责支付创建、状态查询、网关回调处理和退款操作。支持对接多种 PaymentGateway 插件(如易支付、银行转账)。

RPC 列表

RPC描述权限
CreatePayment创建支付记录(生成支付链接)已认证
ListPayments支付列表(分页+筛选)admin 全量 / customer 自身
GetPayment获取支付详情admin 全量 / customer 自身
QueryPaymentStatus向网关查询支付状态admin
HandleCallback接收支付网关异步回调公开(网关调用)
RefundPayment发起退款admin

CreatePayment

描述

为订单或发票创建支付记录。调用 PaymentGateway 插件生成支付 URL 或二维码。

Request — CreatePaymentRequest

字段类型编号必填描述
order_idstring1订单 ID(UUID)
invoice_idstring2发票 ID(UUID)
gateway_interface_idstring3支付网关接口 ID(UUID)
return_urlstring4支付完成后跳转 URL

Response — CreatePaymentResponse

字段类型编号描述
paymentPaymentRecord1支付记录
payment_urlstring2支付页面 URL
qr_codestring3二维码内容(Base64 或 URL)
instructionsstring4支付说明

错误码

错误说明
InvalidArgument订单/发票不存在或已支付
Internal网关插件执行失败
Unauthenticated未登录

示例

grpcurl -plaintext -H "authorization: Bearer <token>" \
  -d '{"order_id":"0192a123-...","invoice_id":"","gateway_interface_id":"0192d012-...","return_url":"https://example.com/payment/result"}' \
  localhost:50051 rustbill.payment.PaymentService/CreatePayment
const resp = await api.createPayment({
  order_id: "0192a123-...",
  invoice_id: "",
  gateway_interface_id: "0192d012-...",
  return_url: "https://example.com/payment/result"
});
// 跳转到 resp.payment_url

ListPayments

描述

分页查询支付记录列表。Admin 可查看所有支付,Customer 自动限定为自身支付。

Request — ListPaymentsRequest

字段类型编号必填描述
paginationPageRequest1分页参数
order_idstring?2按订单过滤
invoice_idstring?3按发票过滤
gateway_interface_idstring?4按网关接口过滤
statusstring?5按状态过滤

Response — ListPaymentsResponse

字段类型编号描述
paymentsrepeated PaymentRecord1支付列表
metaPageMeta2分页元数据

示例

grpcurl -plaintext -H "authorization: Bearer <token>" \
  -d '{"pagination":{"page":1,"page_size":20},"status":"success"}' \
  localhost:50051 rustbill.payment.PaymentService/ListPayments

GetPayment

描述

获取单条支付记录详情。

Request — GetPaymentRequest

字段类型编号必填描述
idstring1支付记录 ID(UUID)

Response — GetPaymentResponse

字段类型编号描述
paymentPaymentRecord1支付记录

错误码

错误说明
NotFound支付记录不存在
PermissionDeniedcustomer 用户无权查看他人支付

示例

grpcurl -plaintext -H "authorization: Bearer <token>" \
  -d '{"id":"0192a123-4567-7890-abcd-ef0123456789"}' \
  localhost:50051 rustbill.payment.PaymentService/GetPayment

QueryPaymentStatus

描述

主动向支付网关查询支付状态并同步本地记录。

Request — QueryPaymentStatusRequest

字段类型编号必填描述
payment_idstring1支付记录 ID(UUID)

Response — QueryPaymentStatusResponse

字段类型编号描述
paymentPaymentRecord1更新后的支付记录

错误码

错误说明
NotFound支付记录不存在
Internal网关查询失败
PermissionDenied非 admin 用户

示例

grpcurl -plaintext -H "authorization: Bearer <token>" \
  -d '{"payment_id":"0192a123-..."}' \
  localhost:50051 rustbill.payment.PaymentService/QueryPaymentStatus

HandleCallback

描述

接收支付网关的异步回调通知。使用乐观锁(expected_status)确保回调幂等,防止重复处理。

注意:此 RPC 由支付网关调用,由前端直接调用。

Request — PaymentCallbackRequest

字段类型编号必填描述
gateway_interface_idstring1网关接口 ID(UUID)
payloadstring2网关回调原始 payload(由网关插件自行解析)

Response — PaymentCallbackResponse

字段类型编号描述
paymentPaymentRecord1更新后的支付记录

错误码

错误说明
InvalidArgument签名验证失败、订单号不匹配
NotFound支付记录不存在
AlreadyExists重复回调(乐观锁拦截)

回调流程

支付网关 → POST /rustbill.payment.PaymentService/HandleCallback
  → gateway 插件验证签名
  → 更新 payment.status = "success"
  → 更新 order.status = "paid"
  → INSERT event_queue(order_paid)  ← event_worker 异步处理开通

RefundPayment

描述

对已支付订单发起退款。amount 为空时全额退款。

Request — RefundPaymentRequest

字段类型编号必填描述
payment_idstring1支付记录 ID(UUID)
amountstring2退款金额(空字符串=全额退款)

Response — RefundPaymentResponse

字段类型编号描述
paymentPaymentRecord1更新后的支付记录

错误码

错误说明
NotFound支付记录不存在
InvalidArgument退款金额超过支付金额、支付状态不允许退款
Internal网关退款执行失败
PermissionDenied非 admin 用户

示例

grpcurl -plaintext -H "authorization: Bearer <token>" \
  -d '{"payment_id":"0192a123-...","amount":""}' \
  localhost:50051 rustbill.payment.PaymentService/RefundPayment

公共类型

PaymentRecord

字段类型编号描述
idstring1支付记录 UUID
order_idstring2关联订单 ID
invoice_idstring3关联发票 ID
amountstring4支付金额(字符串)
currencystring5货币代码
gateway_interface_idstring6支付网关接口 ID
gateway_payment_idstring7网关内支付 ID(回调后填充)
gateway_tx_idstring8网关交易流水号
statusstring9支付状态
paid_atstring10支付时间(RFC3339)
created_atstring11创建时间(RFC3339)
updated_atstring12更新时间(RFC3339)

支付状态流转

pending → success / failed / refunded
状态说明
pending待支付
success支付成功
failed支付失败
refunded已退款