跳到内容

收银台

受众:开发者 / 运维 摘要:Core Cashier 通用收银台底座,负责支付订单、渠道编排、回调、对账、补偿和支付报价。

Cashier 是中性支付订单底座。业务模块只登记自己的支付场景和成功 / 退款处理器,支付渠道能力由 Payment Starter 提供,平台商户和开放支付能力由 聚合支付平台 承接。

能力范围

能力说明
支付订单scene 区分商城、开放平台套餐、视频内容、表单提交等消费方
支付提交用户侧按订单号提交支付,调用 Payment Provider
支付报价创建、刷新、取消 quote,锁定支付资产、金额、汇率和过期时间
回调处理统一验签、幂等、交易流水、回调日志和成功处理器调用
对账补偿查询渠道结果、补偿 pending 订单、记录失败原因
CSV 导出订单、交易和回调日志按筛选条件导出排障快照

Cashier 不承担业务订单状态、商户结算批次、权益激活策略或营销优惠计算。

API 路径

API说明
GET /api/v1/cashier/payment-orders/{outTradeNo}当前用户查询支付单
POST /api/v1/cashier/payment-orders/{outTradeNo}/pay提交支付,需携带 quote
POST /api/v1/cashier/payment-orders/{outTradeNo}/sync同步本地支付结果
POST /api/v1/cashier/payment-orders/{outTradeNo}/quotes创建支付报价
GET /api/v1/cashier/payment-orders/{outTradeNo}/quotes/active查询 active quote
POST /api/v1/cashier/payment-orders/{outTradeNo}/quotes/{quoteNo}/refresh刷新 quote
POST /api/v1/cashier/payment-orders/{outTradeNo}/quotes/{quoteNo}/cancel取消 quote
GET /api/v1/cashier/payment-methods查询当前可用支付方式
GET /api/v1/cashier/web3/payment-options查询 Web3 支付选项
GET /api/v1/admin/cashier/payment-orders后台支付订单查询
GET /api/v1/admin/cashier/payment-transactions后台交易流水查询
GET /api/v1/admin/cashier/payment-callback-logs后台回调日志查询
POST /api/v1/admin/cashier/payment-notifies/{provider}Provider 回调入口
POST /api/v1/admin/cashier/payment-compensations手动补偿支付单
POST /api/v1/admin/cashier/payment-reconciliations手动对账

后台权限前缀为 cashier:payment:*

数据模型

说明
cashier_payment_order支付单、业务场景、定价金额、状态和 attributes
cashier_payment_transaction每次支付、同步、回调或补偿形成的交易流水
cashier_payment_callback_logProvider 回调请求、验签和处理结果
cashier_payment_quote支付报价、支付资产、汇率、过期和消费状态

迁移归属:

文件说明
0000_00_00_031000_core_cashier_create_tables.xml支付订单、交易、回调日志和支付报价等基础表
0000_00_00_031100_core_cashier_seed_data.xml权限、菜单和角色绑定

扩展点

扩展点用途
CashierPaymentOrderSuccessHandlerscene 处理支付成功后的业务激活
CashierPaymentOrderRefundHandlerscene 处理退款后的业务回滚
CashierPaymentQuoteRatePort由 Money 等模块提供支付资产报价
CashierWeb3PaymentOptionPort由 Money / Web3 提供后台多链代币收款选项
CashierOutboxPort将支付回调事实投递到 Outbox

业务模块接入时只保存自己的业务订单和 Cashier 订单号快照,不复制 Cashier 状态机。

支付补偿任务默认名称为 cashier.payment.compensation。Web3 用户端同步后仍未确认成功时,系统会向专用 cashier 队列投递单笔延迟补偿消息;队列消费后如支付单仍为 pending,会按配置继续重投,避免高频支付确认重试占用默认队列。

Web3 多链代币支付

统一收银台的 Web3 支付支持多链多代币,可选范围由后台 Web3 链列表和 Token 列表决定:

  • GET /api/v1/cashier/web3/payment-options 返回后台已启用且开启支付(paymentEnabled)、且解析到平台收款地址的链上代币选项(链名、chainId、代币符号 / 合约 / 精度、收款地址、确认数)。该端口由 Money / Web3 通过 CashierWeb3PaymentOptionPort 实现,未实现时返回空列表。
  • 提交支付时携带所选链与代币(web3ChainName + web3TokenContract / web3TokenKey / web3TokenSymbol)。Cashier 在服务端按选项范围权威匹配并回填收款地址、代币合约、精度和确认数,越界直接拒绝。
  • 前端透传的收款地址 / 代币合约不会生效;端口缺省时锁回支付单自身的链上收款快照,收款地址永不由前端决定,确保资金安全。

验证命令

bash
./mvnw -pl spring-open-core/spring-open-core-cashier -am test -DskipITs -DskipFrontend -Dsurefire.failIfNoSpecifiedTests=false
./.ai/scripts/check modules
./.ai/scripts/check migrations
git diff --check

Released under the Apache License 2.0.