14. 风险、合规、安全与证据边界 · 整理推断 · 门禁 7
支付门:能收款不等于可上线
支付跳转成功只证明演示路径能跑。
原知识点:上线前需按最新文档检查Webhook签名、密钥隔离、幂等、税务、退款和权限。
执行步骤
- 先确认实际支付服务商、经营主体、目标地区、产品、价格、币种、税费、条款、隐私、退款和客服责任。
- 打开该实际服务商当前官方Checkout、Webhook、测试模式、签名、退款、争议和地区覆盖文档,记录URL、版本/访问日期;不能用Stripe文档替代Paddle、PayPal或其他服务商。
- 密钥只存服务端秘密管理,测试/生产隔离并限制权限;按服务商事件模型定义订单、幂等和乱序处理。
- 在实际服务商sandbox/test mode测试成功、失败、取消、异步、重复请求、Webhook重复/乱序、退款和拒付。
- 验证该服务商的Webhook签名,以服务端支付状态驱动权益并保存可对账订单;完成税务/法务/服务商合规复核后才小范围生产。
可复制工作表
# 支付上线合同 触发章节/实际服务商/主体/地区:__ 产品、price_id、价格、币种与税费责任:__ Checkout、Webhook、签名、模拟器、退款/争议、地区官方URL及访问日:__ 测试/生产密钥与Webhook secret隔离:__ 内部order_id、服务商transaction_id、event_id幂等与乱序策略:__ 条款、退款、隐私、客服与专业复核:__ |场景|模拟器/输入|预期服务端状态|实际事件与签名结果|订单/权益副作用|对账/退款结果|结论| |---|---|---|---|---|---|---| |成功|__|__|__|__|__|__| |失败/取消/异步|__|__|__|__|__|__| |重复/乱序/坏签名|__|__|__|__|__|__| |退款/拒付|__|__|__|__|__|__| 生产订单/金额上限、观察窗与暂停线:__ 逐单对账、告警与权限撤回:__ 最终决定:__
完整示例
示例(账号、ID与数字均为演示):
入口来自第12章,实际服务商为Paddle;示例主体US LLC,先开放US。产品为Report Pro月订阅,sandbox price_id=pri_test_report_monthly,39 USD。2026-08-01核对Paddle官方文档:Checkout https://developer.paddle.com/build/checkout/build-overlay-checkout/;Webhook https://developer.paddle.com/webhooks/;签名 https://developer.paddle.com/webhooks/about/signature-verification/;模拟器 https://developer.paddle.com/webhooks/simulator/;退款/争议调整 https://developer.paddle.com/api-reference/adjustments/;地区 https://developer.paddle.com/concepts/sell/supported-countries-locales/。
sandbox client token、API key和Webhook secret与生产分别存储,前端只使用client token;服务端以原始请求体和Paddle-Signature验签。内部order_id唯一绑定Paddle transaction_id;event_id做唯一约束,重复直接返回已处理;乱序事件先保存,再读取当前交易/订阅状态后决定权益。退款条款、隐私与客服入口经示例项目财务FIN-12和法律LEG-9复核,未把Paddle能力等同于本项目已自动合规。
列较多时可左右滚动;首列会固定,便于逐行比较。
| 场景 | 模拟器/输入 | 预期服务端状态 | 实际事件与签名结果 | 订单/权益副作用 | 对账/退款结果 | 结论 |
|---|---|---|---|---|---|---|
| 成功 | 订阅创建成功场景 | paid/active | 签名通过,最终交易completed | ord-2048仅创建1份权益 | Paddle 39 USD=内部账39 USD | PASS |
| 支付失败 | 失败支付场景 | failed,无权益 | 签名通过,失败状态入账 | 权益0 | 应收0,差异0 | PASS |
| 用户取消 | 关闭Checkout | pending超时关闭 | 无生产支付事件 | 权益0 | 应收0 | PASS |
| 异步完成 | 先收到中间状态再完成 | 最终以当前实体为准 | 两次均验签,最终completed | 只在最终状态授予1次 | 交易与账本一致 | PASS |
| 重复 | 同event_id重放3次 | processed一次 | 3次签名均有效,后2次命中幂等 | 1订单、1权益 | 账本仅1笔39 USD | PASS |
| 乱序 | subscription更新先于transaction完成 | 缓存并读取当前实体 | 顺序颠倒但签名通过 | 未提前授予,最终1份权益 | 最终状态一致 | PASS |
| 坏签名 | 改动raw body后重放 | rejected | 签名失败并告警 | 订单与权益均0 | 账本0 | PASS |
| 退款/拒付 | sandbox全额adjustment与争议场景 | 退款批准后撤权益;争议先冻结 | adjustment状态与事件均记录 | 退款后权益0,争议冻结 | −39 USD调整与内部账一致 | PASS |
10次模拟运行最终状态10/10与内部账一致;同event_id三次只产生一次副作用。首批生产最多10个订单或390 USD毛额,观察14天并每日逐单对账;任何验签失败、未知事件、账差非0、无法退款、重复权益或拒付率超过预设10%立即暂停Checkout并撤生产写权限。最终决定:SANDBOX_PASS→LIMITED_PRODUCTION,不扩量;若改用Stripe、PayPal或Lemon Squeezy,必须重建本矩阵。
完成清单
- 实际支付服务商及其当前官方支付、Webhook、测试、退款和地区文档已记录,未套用其他服务商实现。
- 主体、税费、条款、隐私、退款和客服适用于目标地区。
- 密钥隔离、签名、幂等、乱序、退款与拒付均按该服务商事件模型留有测试证据。
- 真实支付先小范围开放并能对账、退款、告警和暂停。
适用 / 触发章节
完成后返回
逐入口门禁回流
- 从第 5 章进入:支付实现、Webhook或权益代码进入生产前;通过返回第 5 章;未通过修复 第 5 章。
- 从第 12 章进入:开放真实收费、订阅、退款或扩大支付前;通过返回第 12 章;未通过修复 第 12 章、第 5 章。
- 从第 13 章进入:自动化支付运营或委派支付权限前;通过返回第 13 章;未通过修复 第 13 章、第 5 章。
当前官方依据
平台规则会变化,行动前以打开后的当前官方页面为准。
适用条件
真实收款系统。
来源:Vercel接入支付