出海收款:从用户付钱到钱进国内银行卡

目录

工具产品出海运营 第四节用一段话讲了收款:个人开发者用 Paddle、Lemon Squeezy、Creem 这类 Merchant of Record,有海外公司就用 Stripe。这篇把它展开:一笔海外的钱要经过哪几层、每一层有哪些选择、各要多少手续费、税怎么算,以及从注册到收到第一笔钱的具体步骤。

这一行 2024 到 2026 年变化很大:Stripe 收购了 Lemon Squeezy,又推出了自己的 MoR 服务;Polar 改了价格;Visa 收紧了拒付规则;税务局开始提醒大家自查境外所得。下面的数字按 2026 年 10 月的官方页面整理,注册前请再核对一遍。


一、先说结论

  • 先看自己是哪种身份,能走的路完全不一样(第四节):
    • 只有大陆身份:用 MoR。首选 Creem 或 Paddle。Creem 官方支持中国个人通过支付宝收款,费率 3.9% + $0.40,是目前最便宜的一档;Paddle 稳定、老牌,5% + $0.50,通过 Payoneer 或电汇打款
    • 有香港身份(香港身份证):可以用个人或独资经营的名义直接开 Stripe 香港,也可以用 MoR,钱打到自己的香港银行卡
    • 有海外公司(香港、美国、新加坡等):可以用公司开 Stripe,也可以用 MoR 或者 Stripe Managed Payments,看你愿不愿意自己处理各国的消费税
  • Stripe 不支持中国大陆的商户。 只有大陆身份的人想用 Stripe,得先注册香港公司或美国公司。为了用 Stripe 去注册公司,只有在收入够大、MoR 的费率差值得你去养一家公司的时候才划算
  • Lemon Squeezy 不建议新项目再用。 它还能用,但 CEO 2026 年 1 月说了支持会变慢、更新会变少,团队已经去做 Stripe Managed Payments 了
  • 钱回国走有交易背景的渠道。 Payoneer、万里汇这类平台能代你做外汇申报,结汇不占个人每年 5 万美元的便利化额度。不要找亲戚朋友拆额度,被发现会被限制结汇
  • 境外收入要在国内报个税。 2026 年 1–5 月,居民个人境外所得补税约 130 亿元,税务局已经开始提醒大家自查 2022–2024 年的境外收入。从第一笔钱开始就要留好账
  • 拒付比退款贵得多。 用户要退款就痛快退。Visa 从 2026 年 4 月起把商户的欺诈加拒付比例上限降到了 1.5%

二、一笔钱经过哪几层

海外用户刷卡
   │
   ▼
① 收单:谁替你收这笔钱        MoR(Paddle / Creem …)或 Stripe
   │                         这一层决定手续费、谁来交各国的消费税
   ▼
② 打款:钱先到哪个账户        Payoneer / 万里汇 / PayPal / 香港银行 / 美国银行 / 支付宝
   │                         这一层决定打款费、汇损
   ▼
③ 结汇:美元换成人民币        平台代申报,或者走个人 5 万美元额度
   │
   ▼
④ 报税:国内个税 / 公司税      个税 App 年度汇算里申报境外所得

每一层都会扣一点钱。算成本的时候要把四层加起来,不能只看第一层的费率。


三、几个先要分清的概念

概念 是什么 为什么重要
MoR(Merchant of Record,记录商户) 以它自己的名义把你的软件卖给用户。在法律上,卖家是它,不是你 它替你算、收、交各国的销售税和增值税,替你开发票、处理拒付。你和它之间只有一笔「它付钱给你」的往来
支付处理商(Stripe、PayPal) 只帮你刷卡收钱,卖家还是你 消费税要你自己申报。Stripe Tax 能帮你算税,但登记和申报还是你的事
销售税 / VAT / GST 用户所在国家对消费征的税 欧盟、英国等对卖给个人消费者的数字服务,外国卖家通常从第一笔就要交,没有起征点;美国各州有自己的起征门槛。几十个国家各自去登记,个人根本做不过来,这就是 MoR 存在的理由
拒付(chargeback) 用户不找你,直接找发卡行把钱要回去 每笔都要额外扣 $15–30 的手续费,比例高了收款账户会被冻结
结汇 把外币换成人民币 涉及外汇管理,个人渠道有额度限制

一句话:MoR 多收的那几个百分点,买的是各国税务、发票、拒付这一整套麻烦。 收入不大的时候,这钱很值。


四、按身份选路线

能用哪些收款平台、钱打到哪里、税交给谁,首先取决于你用什么身份去注册。分三种情况:

只有大陆身份 有香港身份 有海外公司
能不能直接开 Stripe 不能 能,用香港身份证以个人或独资经营注册 Stripe 香港 能,用公司注册(公司所在地要在 Stripe 支持的国家里)
MoR 能用:Creem、Paddle、Dodo 等 能用,选择更多 能用
Stripe Managed Payments 不能 能(香港在支持名单里) 公司在支持名单里就能(美国、香港、新加坡、日本等)
钱打到哪里 支付宝、Payoneer、万里汇、PayPal 自己的香港银行账户 公司的银行账户
回内地 平台代申报结汇,或走个人 5 万美元额度 香港卡转回内地,涉及跨境汇款和结汇 公司账户 → 分红或工资 → 个人,每一步都有税
主要的税 中国个税 看你是哪里的税务居民(见下文) 公司所在地的公司税 + 你个人的税
推荐 个人 + MoR 起步用 MoR,量大了再换 Stripe 香港 起步也用 MoR,收入大了再用 Stripe 直连

做 App 的,不管哪种身份,App 内购都走 App Store 和 Google Play,见第十节。

1. 只有大陆身份

这是大多数人的情况,也是选择最少的情况:

  • Stripe 不能用。 Stripe 不给大陆商户开户,Stripe Managed Payments 也不支持大陆
  • Lemon Squeezy 的银行打款不支持大陆,只能走 PayPal,而且新项目不推荐用它
  • 能用的是 MoR:
    • Creem:个人可以绑定支付宝收款,最省事
    • Paddle:打款到 Payoneer 或电汇到国内银行卡
    • Dodo:支持国家里有中国,按你验证用的证件签发国判断
  • 钱回国:支付宝直接到账;Payoneer、万里汇提现到国内银行卡,平台代你做外汇申报
  • 税:你是中国税务居民,这笔收入在个税 App 的年度汇算里申报(第八节)

路线:Creem 主用 + Paddle 备用。等年收入到十万美元左右,再考虑注册香港或美国公司(第七节)。

2. 有香港身份

这里说的是持有香港身份证、能在香港开个人银行账户的人:

  • 可以直接开 Stripe 香港。 Stripe 香港个人注册只认香港身份证。有身份证的,可以以个人注册;再办一张商业登记证(BR),就可以按独资经营注册,看起来更正规
  • 费率:本地卡 3.4% + HK$2.35;用美元结算 3.4% + $0.30;海外卡 +0.5%;要换汇再 +2%
  • 用 Stripe 直连,各国的消费税要自己处理。 嫌麻烦就开 Stripe Managed Payments(香港在支持名单里,再加 3.5%),或者继续用 MoR
  • 钱打到自己的香港银行账户,以港币或美元持有,不用急着换成人民币
  • MoR 也照样能用,而且打款到香港银行卡通常比打到大陆更顺利

税要特别注意:有香港身份不等于你是香港的税务居民。

  • 香港的利得税:独资经营(非公司)应评税利润的前 200 万港元按 7.5%,之后 15%;有限公司是 8.25% 和 16.5%。香港按地域征税,只对来源于香港的利润征税,但「利润不来源于香港」要自己举证,不是自动免税
  • 中国内地税务居民看的是住所和居住天数,不看你拿的什么证件。 如果你户籍、家庭、主要经济利益在内地,或者一年在内地住满 183 天,你可能仍然是内地的税务居民,要按全球所得在内地申报个税,在香港交过的税可以按规定抵免
  • 常住内地的香港人,这一点最容易出问题,建议找两地都懂的税务顾问确认

路线:起步用 MoR,省掉消费税的麻烦;月收入稳定以后,换成 Stripe 香港 + Stripe Tax 或 Managed Payments,费率能低一些,定价和账单也更灵活。

3. 有海外公司

不管是香港有限公司、美国 LLC 还是新加坡公司,只要公司注册地在 Stripe 支持的国家里:

  • 可以用公司开 Stripe。 公司的代表人不一定要有当地身份,比如香港公司的代表人没有香港身份证,可以用其他政府签发的证件
  • 要有公司名下的银行账户接收打款。Stripe 要求银行账户在公司所在地
  • 消费税有三种处理办法:
    1. Stripe 直连 + 自己处理(可以用 Stripe Tax 算税,但登记和申报要自己做)
    2. Stripe Managed Payments,再加 3.5%,Stripe 帮你处理
    3. 继续用 MoR,以公司身份注册
  • 公司每年都有维护成本:香港要做年度审计、报利得税;美国 LLC 每年要交 Form 5472(漏交罚 $25,000)和特拉华州的特许税。见第七节
  • 钱从公司到你个人手里,要通过分红或者工资,每一步都可能有税。公司账户里的钱不是你个人的钱,不要混用

大陆居民持有海外公司,有两点要注意:

  • 公司赚的钱不一定能一直放在海外不交税。 个人所得税法第八条规定:居民个人控制的、设在实际税负明显偏低的国家或地区的企业,没有合理经营需要却不分配或少分配利润的,税务机关可以按合理方法做纳税调整。也就是说,利润长期留在低税地的公司里,不分给你,也可能被要求在国内补个税
  • 外汇登记。 境内居民个人在境外设立或控制公司,按外汇管理的规定可能要办登记(常说的「37 号文登记」),具体看你的情况,问一下律师或银行

路线:收入不大时,用公司注册 MoR 也完全可以;收入大了,或者有企业客户要你开正式发票、签合同,再换成 Stripe 直连。

三种情况放在一起比

路线 需要什么 收单费率(大致) 适合
A. 个人 + MoR 身份证或护照、一个能收钱的账户 4%–8%,看平台和交易类型 只有大陆身份的人,从第一天用到年收入几十万美元;有香港身份或公司的人起步也可以用
B. 香港身份 / 香港公司 + Stripe 香港身份证和商业登记,或香港公司;香港银行账户 3.4% + HK$2.35;海外卡 +0.5%,要换汇再 +2%;消费税自己处理 有一定规模,想要更低费率、更灵活的定价和账单
C. 美国 LLC + Stripe 美国 LLC、美国银行账户(Mercury 等) 美国卡 2.9% + $0.30;海外卡 +1.5%;消费税自己处理 客户以美国为主,或者要融资、签美国企业客户

新手直接选 A。 B 和 C 都要自己处理消费税,开公司的话每年还有固定的维护成本(第七节)。收入不够的话,省下的费率还不够付这些成本。


五、MoR 平台对比

平台 费率 中国卖家 打款 现状
Creem 3.9% + $0.40,海外卡和订阅不加价;联盟分成 +2%;拒付 $25 支持。个人通过支付宝收款,公司收到本地银行账户,都要审核 起付 $50;银行转账每次 1% 或 $7(取高的) 主打独立开发者,2026 年单笔最便宜的一档
Paddle 5% + $0.50,含支付、税、风控、拒付处理;单价低于 $10 的产品要另谈价格 不在不支持国家名单里,支持个人身份验证,但官方没有专门说明中国个人的情况,注册前建议问一下客服 每月 1 日结算,15 日前到账;起付 $100;电汇或 Payoneer 老牌,稳定,审核较严,只收软件和数字产品
Dodo Payments 4% + $0.40;海外支付 +1.5%,订阅 +0.5%,PayPal +3%;退款 $1/笔,拒付 $30 在支持国家里,按你验证用的身份证件签发国判断 标准打款免费,美元 SWIFT $25 较新,按自家博客的计算,$50 订阅实际成本约 6.8%
Polar 免费档 5% + $0.50;付费档月费 $20–400,费率降到 3.4%–3.8%;海外卡 +1.5%;拒付 $15 打款走 Stripe Connect Express,大陆是否可用要以 Stripe 的跨境打款名单为准 手动申请打款;每月 $2 + 0.25% + $0.25 开发者向,开源项目用得多。2026-05-27 改了价格
Lemon Squeezy 5% + $0.50,海外、PayPal、订阅另有附加费 银行打款名单里没有中国大陆,只能走 PayPal 每月两次;海外 PayPal 打款 3%(封顶 $30) 被 Stripe 收购,慢慢转向 Stripe Managed Payments。新项目不推荐
Stripe Managed Payments 在 Stripe 标准费率上再加 3.5%,按含税金额收;美国卡订阅合计约 7.1% + $0.30 不支持。只对 37 个左右国家和地区的商户开放,包括美国、香港、新加坡、日本,没有中国大陆 同 Stripe 2026 年 4 月正式上线。适合已经有香港或美国公司、又不想自己处理消费税的人

算一下:同一笔钱各家实际扣多少

用户用非美国的信用卡订阅,按上表的费率算(不含打款和结汇):

平台 $10 / 月 占比 $50 / 月 占比
Creem(3.9% + $0.40) $0.79 7.9% $2.35 4.7%
Paddle(5% + $0.50) $1.00 10.0% $3.00 6.0%
Dodo(4% + 1.5% + 0.5% + $0.40) $1.00 10.0% $3.40 6.8%
Polar 免费档(5% + 1.5% + $0.50) $1.15 11.5% $3.75 7.5%

两个规律:

  • 固定费用对低价产品伤害很大。 $0.50 的固定费,在 $10 的产品上就是 5 个百分点。卖 $5 以下的东西,优先考虑年付或者打包
  • 年付能省很多手续费。 $8/月 收 12 次,固定费用要收 12 次;$80/年 只收一次。这也是很多产品默认推年付的原因之一

怎么选

你用什么身份注册?
├─ 海外公司 / 香港身份
│   ├─ 收入还不大 → MoR(Creem / Paddle),省掉消费税的麻烦
│   └─ 收入大、想自己掌控
│       ├─ 愿意自己处理消费税 → Stripe + Stripe Tax
│       └─ 不想管税 → Stripe Managed Payments
└─ 只有大陆身份
    ├─ 想要费率最低、能接受支付宝收款 → Creem
    ├─ 想要老牌稳定、已有 Payoneer → Paddle
    └─ 开源项目、开发者社区 → Polar(先确认能打款到你的账户)

建议先注册两家,一家主用,一家备用。MoR 审核时有可能拒你,用了一段时间也有可能因为风控问题冻结账户。有备用的话,换一下付款链接就行。


六、钱怎么回国

渠道 怎么收 回国费用 注意
支付宝(Creem 个人打款) Creem 直接打到支付宝 按 Creem 的打款费 最省事。要先通过 Creem 的审核
万里汇 WorldFirst 个人身份注册,提供美元等收款账户 0 开户费、0 入账费;提现最高 0.7%,不加汇率点差 支持 App Store、Google Play、AdSense、AdMob 等收款,代你做外汇申报,结汇不占 5 万美元额度。没有列出 Paddle、Stripe,用这类平台前先问清楚
Payoneer 派安盈 个人可注册,提供美元收款账户 同币种收款免费;提现到国内银行卡约 1.2%(汇率里扣,不单独显示);12 个月收款不满 $6,000 收 $29.95 年费 Paddle 官方支持。单笔提现 $500–30,000,30 天内最多 $20 万
PayPal 中国大陆账户 收款 4.4% + $0.30;提现到国内银行每笔 $35;换汇另收费 最贵,适合偶尔收几笔。攒多一点再提,摊薄 $35 的固定费
Wise 美元收款账户 汇率透明 2026 年 9 月有第三方指南说,大陆地址已经开不了新的美元收款账户,官方页面没有说清楚。以 Wise App 里能不能开为准
香港银行账户 公司或个人的香港卡 收款便宜;回内地要走跨境汇款 公司路线必备。个人开户现在要面签,难度比以前大

个人每年 5 万美元额度,到底管什么

  • 这是个人在银行直接办结汇的「便利化额度」:结汇和购汇各 5 万美元一年,按自然年算,不能跨年累积
  • 通过有交易背景的平台结汇(平台能拿到你的销售记录并代你申报),一般不占这个额度。万里汇是这么说明的,Payoneer 也走类似的路径
  • 超过 5 万也不是不能结汇,只是要给银行看收入来源证明。所以从第一笔开始,就要留好后台的订单、打款记录
  • 2026 年 1 月 1 日起,跨境汇款单笔达到 5,000 元人民币或 1,000 美元,银行要核实汇款人信息。这只是核实身份,不是限额
  • 不要拆分额度,比如找家人分着结。被认定为拆分结汇会被列入关注名单,个人结售汇会受限两到三年

收入一年稳定超过十几万美元,就该考虑换成公司主体,走对公的经营性结汇。


七、注册公司这条路

香港公司 + Stripe

  • Stripe 香港要求本地营业:个人注册要香港身份证;没有香港身份证的,可以用商业登记号按独资经营注册,或者注册香港有限公司、以公司名义申请
  • 要有香港银行账户接收 Stripe 打款。Stripe 不能直接打款到内地银行卡,也没有人民币结算
  • 费率:本地卡 3.4% + HK$2.35;用美元结算时 3.4% + $0.30;海外卡 +0.5%;要换汇再 +2%
  • 每年的固定成本:公司秘书、注册地址、年度审计、利得税申报。具体价格各家代理差别大,可以多问几家
  • 用 Stripe 直连以后,各国的消费税要自己处理。可以开 Stripe Tax 帮你算税,但在哪些国家需要登记、怎么申报,还是你自己的事。这一块不想管的话,可以在 Stripe 上开 Managed Payments(香港在支持名单里),代价是再加 3.5% 的费率

美国 LLC + Stripe

  • Stripe Atlas 一次性 $500,包括特拉华州注册费、EIN(税号)和第一年的注册代理,之后每年约 $100。Atlas 只能注册特拉华州的公司,不包含报税
  • 特拉华州的 LLC 每年要交特许税,金额 2026 年 8 月调整过,以州政府的网站为准
  • Form 5472:外国人独资的 LLC 每年都要交,没有收入也要交。截止日是 4 月 15 日,可以延期到 10 月 15 日。没交罚 $25,000,收到通知后 90 天还不交,每 30 天再罚 $25,000。这是外国人开美国 LLC 最常见的坑,一定要找会计做
  • BOI 报告:2025 年 3 月起,在美国注册的公司(包括外国人持有的)不用再向 FinCEN 报送
  • 银行账户:Mercury 等线上银行可以远程开户,政策常变,以官网为准
  • 对中国税务居民来说,单人 LLC 在美国税法上是「透明」的,利润直接算到你个人头上。所以美国 LLC 不能替你免掉中国个税

什么时候值得开公司

粗略算一下:MoR 和 Stripe 直连的费率差大约 2–3 个百分点。

值得开公司 ⇔ 年收入 × 费率差 > 公司每年的固定成本 + 自己处理消费税的成本

公司每年固定成本按 $1,500–3,000 估(代理、会计、审计、特许税),费率差按 2.5% 算,年收入要到 6 万到 12 万美元以上才开始划算。这还没算自己去各国处理消费税的时间。所以一般建议年收入到十万美元以后再考虑。


八、税

税分三层,别搞混:

层 谁的税 谁来处理
用户所在国的消费税(VAT、GST、销售税) 用户付的,卖家代收代缴 用 MoR 的话由 MoR 处理;用 Stripe 直连的话自己处理
主体所在地的所得税 你的公司,或者你以香港身份做的独资经营 香港利得税、美国申报(Form 5472 等),交给会计
中国个税 你本人 你自己

中国个税这一层,现在要认真对待:

  • 中国税务居民要对全球所得纳税,境外收入也要在国内申报。是不是税务居民,看的是住所和一年在内地住了多少天,不看你拿的是身份证、香港身份证还是外国护照(第四节)
  • 钱放在自己控制的海外公司里不分配,也不一定能躲开个税:个人所得税法第八条允许税务机关对设在低税地、无合理经营需要却不分配利润的企业做纳税调整
  • 2026 年 1 月,税务总局公开提醒纳税人自查 2022–2024 年的境外所得;1–5 月,居民个人补缴境外所得税款约 130 亿元。官方用来对账的是 CRS(各国自动交换金融账户信息)的数据
  • 少缴税款的,税务机关三年内可以追征税款和滞纳金;被认定偷税的,追征没有期限,还会罚款
  • 申报渠道是个人所得税 App,每年 3 月 1 日到 6 月 30 日做上一年的年度汇算
  • 软件销售收入算哪一类所得、适用什么税率、怎么扣成本,和你的具体情况有关。第一年找一个懂跨境的税务顾问问清楚,之后照着做

从第一笔钱开始,要留的东西:

  • MoR 后台每月的结算单、打款记录
  • Payoneer、万里汇的入账和结汇记录
  • 服务器、域名、AI 调用等成本的发票和账单

九、拒付和风控

Visa 的新规则(VAMP)

  • 比例 = (欺诈报告 + 拒付) ÷ 当月的线上交易笔数
  • 从 2026 年 4 月 1 日起,美国、欧盟、加拿大、亚太地区的商户上限是 1.5%(以前是 2.2%),同时一个月要达到 1,500 笔以上才算超标。超标后每笔罚 $8 左右
  • 还有一个盗刷测试指标:有人用你的付款页批量试卡,尝试中被认定为盗刷的占 20%、月内超过 30 万次就会超标。这一条跟有没有拒付无关
  • 收单银行自己的要求往往比 Visa 更严

用 MoR 的话,这些风险由 MoR 去面对,但 MoR 会因为你的拒付率太高而冻结你的账户。所以以下几条无论用哪家都要做:

  • 退款政策写清楚,退款处理得痛快。 用户发邮件要退款,当天就退。退款只损失这笔钱,拒付还要额外交 $15–30
  • 账单上的名称要让用户认得出来。 用户看到不认识的扣款就会去申请拒付。MoR 会显示它自己的名字(比如 PADDLE.NET),所以要在付款成功的邮件里提醒用户账单上会显示什么
  • 续费前提醒。 年付续费前 7 天发邮件提醒
  • 取消订阅要容易做到。 取消按钮藏得深,会把用户逼去找银行
  • 免费试用要防盗刷测试。 免费试用要求绑卡的话,在付款页前加验证码或者限制频率,不然你的页面可能被人拿去批量试卡

十、做 App:App Store 和 Google Play

App 里卖数字内容,原则上要走应用商店的内购。开发者账号怎么注册、付费协议和税表怎么填、以后怎么换成香港公司,见 iOS 出海上架。

  • Apple 小型企业计划:上一年收入不到 100 万美元的开发者可以申请,内购抽成 15%。要自己去申请,批准之前的收入不按 15% 算。订阅满一年后,标准档的抽成也降到 15%
  • Google Play:每年前 100 万美元收入抽 15%,订阅从第一天起就是 15%
  • 美国的外部付款链接:2025 年 4 月法院裁决以后,美国区的 App 可以加外部付款链接,Apple 目前不收佣金。但 Apple 2026 年 8 月已经向法院提出要收 5%–15%,最高法院本期还要审,这个 0% 不一定能长期维持
  • 欧盟:Apple 改成了统一的费率表,内购 26%,第三方支付 20%,外部链接 15%(小型企业和满一年的订阅降到 10%)。欧盟的规则这两年改得很频繁,上架前去 Apple 开发者网站看最新的
  • 应用商店的钱可以用万里汇这类平台收,代申报以后结汇不占个人额度

如果你同时有网页版和 App,常见的做法是:App 里走内购,网页版走 MoR,账号体系打通,用户在哪里买都能用。


十一、接入流程(以 MoR 为例)

1. 注册前准备

  • 网站已经上线,有定价页、服务条款、隐私政策、退款政策、联系方式。MoR 审核时会看这些,缺了大概率被拒
  • 产品是软件或数字产品,不涉及 MoR 禁止的品类(成人、博彩、加密货币投资等)
  • 网站上的产品名、价格和你在 MoR 后台填的要一致

2. Creem

  1. 在 creem.io 注册,完成身份验证
  2. 提交店铺审核:网站地址、产品描述
  3. 在后台建产品和价格(一次性或订阅)
  4. 在打款设置里绑定支付宝(个人)或本地银行账户(公司),等审核通过
  5. 用测试模式走一遍付款,确认 Webhook 能收到事件
  6. 切到正式模式,把付款链接或 Checkout 放到定价页

3. Paddle

  1. 在 paddle.com 注册,先在沙盒(sandbox)里开发
  2. 提交域名审核,必要时做企业验证和身份验证
  3. 建产品和价格,配置 Checkout、税务和支付方式
  4. 填写打款信息:电汇银行账户或 Payoneer;设置起付线(最低 $100)
  5. 提交上线审核,通过后切换到正式环境

4. 代码里要做的事

不管用哪家,核心都是两件事:用户点按钮跳到付款页,以及用 Webhook 在服务端开通权限。不要靠前端的「付款成功」跳转来开通权限,用户可能直接关掉页面,也可以伪造跳转。

定价页 ──点击──▶ MoR 的 Checkout(带上 user_id)
                        │
                        │ 付款成功
                        ▼
            MoR ──Webhook──▶ 你的服务端
                              ├─ 验证签名
                              ├─ 按事件 ID 去重(Webhook 可能重复发)
                              ├─ 更新订阅状态、开通权限
                              └─ 返回 200

Paddle 的 Webhook 签名验证示例(Node.js)。Paddle 在 Paddle-Signature 头里放 ts=…;h1=…,签名内容是 时间戳:原始请求体。其他平台的签名格式不一样,照它们的文档改:

import crypto from 'node:crypto'
import express from 'express'

const app = express()
const SECRET = process.env.PADDLE_WEBHOOK_SECRET!

// 一定要拿原始请求体,JSON 解析过再序列化,签名就对不上了
app.post('/webhooks/paddle', express.raw({ type: 'application/json' }), async (req, res) => {
  const header = req.header('Paddle-Signature') ?? ''
  const parts = Object.fromEntries(header.split(';').map((p) => p.split('=')))
  const ts = parts.ts
  const h1 = parts.h1
  if (!ts || !h1) return res.sendStatus(400)

  // 拒绝 5 分钟以前的请求,防止重放
  if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return res.sendStatus(400)

  const expected = crypto
    .createHmac('sha256', SECRET)
    .update(`${ts}:${req.body.toString('utf8')}`)
    .digest('hex')
  if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(h1))) {
    return res.sendStatus(401)
  }

  const event = JSON.parse(req.body.toString('utf8'))

  // 按 event_id 去重:已经处理过的直接返回 200
  if (await alreadyProcessed(event.event_id)) return res.sendStatus(200)

  switch (event.event_type) {
    case 'subscription.activated':
    case 'subscription.updated':
    case 'subscription.canceled':
      await syncSubscription(event.data) // 以 MoR 的状态为准,写进自己的数据库
      break
    case 'transaction.completed':
      await recordPayment(event.data)
      break
  }

  await markProcessed(event.event_id)
  res.sendStatus(200)
})

几条经验:

  • user_id 要带到 Checkout 里(Paddle 用 custom_data,其他平台叫 metadata 之类),Webhook 回来时才知道是哪个用户付的钱。这一点 工具产品看数据 的埋点部分也讲了
  • 订阅状态以 MoR 为准,自己的数据库只是一份同步的副本。每天跑一次对账,把两边的状态比一下
  • 处理失败要返回非 200,MoR 会重试。但处理逻辑必须是幂等的,同一个事件处理两次结果要一样

十二、上线清单

  • 定价页、服务条款、隐私政策、退款政策、联系方式都在网站上
  • 注册了一家主用 MoR,最好还有一家备用
  • 打款账户已经绑定并通过审核(支付宝 / Payoneer / 万里汇 / 银行)
  • 自己用真实的卡付过一次钱,也退过一次款
  • Webhook 验证了签名、做了去重,处理失败会返回非 200
  • 付款成功的邮件里写了账单上会显示的名称
  • 取消订阅的入口在设置页里一眼能看到
  • 免费试用绑卡的话,付款页做了验证码或限频
  • 开了一个表格,每月记录:收入、MoR 手续费、打款、结汇金额、汇率
  • 问过税务顾问:这类收入怎么申报、能扣哪些成本

参考

MoR 平台

Stripe 与公司

回国与结汇

税

拒付与风控

应用商店

试试「AI」「GitHub」或「发布」
找到下一个行动的起点Tab 切换 · Enter 打开