14. 风险、合规、安全与证据边界 · 整理推断 · 门禁 7

支付门:能收款不等于可上线

支付跳转成功只证明演示路径能跑。

原知识点:上线前需按最新文档检查Webhook签名、密钥隔离、幂等、税务、退款和权限。

执行步骤

  1. 先确认实际支付服务商、经营主体、目标地区、产品、价格、币种、税费、条款、隐私、退款和客服责任。
  2. 打开该实际服务商当前官方Checkout、Webhook、测试模式、签名、退款、争议和地区覆盖文档,记录URL、版本/访问日期;不能用Stripe文档替代Paddle、PayPal或其他服务商。
  3. 密钥只存服务端秘密管理,测试/生产隔离并限制权限;按服务商事件模型定义订单、幂等和乱序处理。
  4. 在实际服务商sandbox/test mode测试成功、失败、取消、异步、重复请求、Webhook重复/乱序、退款和拒付。
  5. 验证该服务商的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签名通过,最终交易completedord-2048仅创建1份权益Paddle 39 USD=内部账39 USDPASS
支付失败失败支付场景failed,无权益签名通过,失败状态入账权益0应收0,差异0PASS
用户取消关闭Checkoutpending超时关闭无生产支付事件权益0应收0PASS
异步完成先收到中间状态再完成最终以当前实体为准两次均验签,最终completed只在最终状态授予1次交易与账本一致PASS
重复同event_id重放3次processed一次3次签名均有效,后2次命中幂等1订单、1权益账本仅1笔39 USDPASS
乱序subscription更新先于transaction完成缓存并读取当前实体顺序颠倒但签名通过未提前授予,最终1份权益最终状态一致PASS
坏签名改动raw body后重放rejected签名失败并告警订单与权益均0账本0PASS
退款/拒付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接入支付