pay · Channel Registry

支付渠道接入登记

pay v2 支付渠道接入的单一登记入口——每接一个新渠道,在本文档追加一节。汇总各渠道的官方文档链接、pay 侧 provider 位置、接入形态概要、凭证存放位置指针。

公开性声明:本文档公开可读,不含任何商户号 / API 密钥 / 私钥 / 证书 / 真实收款地址 / Bitwarden 具体取值。凭证一律只写「走 Bitwarden 某条目,经 rbw 灌 env」这类位置指针,实际值不出现在本文档或 git 仓库任何地方。

pay v2 Provider 接口

每个渠道在 internal/provider/<name>/ 下实现统一的 provider.Provider 接口(定义于 internal/provider/provider.go),网关侧不感知渠道差异:

方法作用
Method()渠道注册名(如 alipay/stripe/crypto),也是配置里 method 字段的值
Capabilities()渠道能力自述:支持的 render_type、是否支持退款/续订、结算币种、可服务区域
Create(ctx, CreateRequest)拿 pay 已定金额/币种/账户去渠道建单,产出 Session{ProviderRef, RenderType, Payload}
VerifyCallback(ctx, CallbackInput)解析并验签渠道异步回调(HTTP body/头/query),产出归一化 PaidEvent
Query(ctx, QueryRequest)主动查单兜底(回调丢失时的定时轮询/对账)

可选扩展接口:RefundingProvider(退款)、RecurringProvider / SubscriptionProvider(续订)、OrphanScanner(自托管渠道的孤儿到账扫描)。

render_type(客户端只认这 6 种付款意图形态,不下发任何 UI,样式归业务方自绘):

含义当前用者
redirect跳转到渠道收银台 URLalipay(page/wap)、stripe(Checkout)
qr渠道二维码内容,前端自行渲染alipay(当面付 precreate)
crypto_address收款地址 + 精确到账金额crypto
native_pay原生支付组件拉起(如小程序/App SDK)暂无渠道使用
sdk_handoff交由客户端 SDK 处理支付流程暂无渠道使用
iap_receiptApp Store/Play 内购收据校验暂无渠道使用

渠道总览

渠道类型结算币种Method()状态
哪吒支付第三方 RSA 聚合支付CNYnezha开发中
支付宝自有商户直连CNYalipay已接入
Stripe自有商户直连(海外网关)USDstripe已接入
Crypto(USDT-TRC20)链上自托管USDTcrypto已接入

① 哪吒支付(nezha)

哪吒支付 开发中

类型
第三方 RSA 聚合支付
结算币种
CNY
官方文档
https://nzzf.org/doc/index.html
provider 位置
internal/provider/nezha/(待建)
Method() 名
nezha
凭证管理
Bitwarden 条目 nzzf(商户号 pid + 商户私钥 + 平台公钥),仅按需 rbw get 取用,不入文档/git

接入形态概要(据官方文档):

② 支付宝(alipay)

支付宝 已接入

类型
自有商户直连
结算币种
CNY
官方文档
https://opendocs.alipay.com/(当面付 / 手机网站支付 / 电脑网站支付)
provider 位置
internal/provider/alipay/alipay.go
Method() 名
alipay
凭证管理
Bitwarden 条目 ali pay key(字段 app_private_key / alipay_public_key / appid),经 rbw get 灌服务器 env(见 上线状态与部署 Runbook

接入形态概要(源自 internal/provider/alipay/alipay.go + 支付宝密钥申请与备案依赖 / 支付宝收款页时序图与架构):

③ Stripe(stripe)

Stripe 已接入

类型
自有商户直连(海外网关)
结算币种
USD
官方文档
https://docs.stripe.com/(Checkout Sessions / Webhooks / Subscriptions)
provider 位置
internal/provider/stripe/stripe.go
Method() 名
stripe
凭证管理
Bitwarden(Stripe API Secret Key + Webhook Signing Secret,账户级 CredentialEnvPrefix 对应 env 后缀 SECRET_KEY / WEBHOOK_SECRET),经 rbw 灌 env;具体条目名待生产上线时在 Bitwarden 建立,不写入本文档

接入形态概要:托管 Checkout(hosted Checkout Session),一次性支付走 mode=payment、订阅走 mode=subscription,均产出跳转 URL(render_type=redirect)。Webhook 验签用官方 SDK webhook.ConstructEvent(HMAC + 时间容差);处理 checkout.session.completed(入账/订阅激活)、invoice.paid(续费)、customer.subscription.deleted(订阅取消)、invoice.payment_failed(逾期)、charge.dispute.created(拒付)。退款走 /v1/refundsIdempotency-Key 幂等);订阅续费由 Stripe 网关自身调度(RecurringKindGatewayScheduled),pay 不主动发起扣款。

④ Crypto · USDT-TRC20(crypto)

Crypto(USDT-TRC20) 已接入

类型
链上自托管
结算币种
USDT
官方文档
https://developers.tron.network/(TronGrid API,用于扫链查询)
provider 位置
internal/provider/crypto/crypto.go
Method() 名
crypto
凭证管理
Bitwarden(收款地址 watch-only + 可选 TronGrid API Key,账户级 env 后缀 ADDRESS / TRONGRID_KEY),私钥不由 pay 持有;具体条目名不写入本文档

接入形态概要:每账户一个固定收款地址(watch-only,pay 从不持有私钥),每单在基础价上叠加随机唯一尾数(微 USDT 级)区分订单身份,冷却窗防金额复用误配。无渠道异步回调(VerifyCallback 恒返回 ErrNotSupported),到账完全靠查单:定时扫 TronGrid only_confirmed 已确认交易,按「收款地址 + 精确金额 + 块时晚于建单时间」匹配(render_type=crypto_address)。另实现 OrphanScanner:扫描到账但不匹配任何在途订单的转账,供对账人工核对。资金归集(sweep 到冷存储)是独立的线下操作,不在 pay 范围内。

凭证管理约定

所有渠道凭证统一走 Bitwarden,按需 rbw get 取出灌入服务器环境变量(CredentialEnvPrefix + 字段名,如 ALIPAY_APP_PRIVATE_KEY),不落配置文件、不落 git 仓库、不进聊天记录。已上线渠道的具体 Bitwarden 条目名见各渠道小节;未上线渠道的条目在生产接入前另建,同样不预先写入本文档。部署细节参见 上线状态与部署 Runbook