Skip to main content
目录 目录(7 节)

wangxiaoming

 · 

用 Stripe 卖用户名:从建账户到能付款的完整流程

接 Stripe 的完整流程分六步:隔开账户、建产品和价格、结账、交付、退款与收回,最后用测试卡从头真买一遍。

defi.io 的短用户名定好价之后,下一步是让人能真的付钱。这是这个系列的第二篇,把接 Stripe 的整个流程按顺序走一遍:从建账户,到用测试卡从头买一次。下一篇再讲切到正式环境、收第一笔真钱。

整个流程分六步:

第一步:给 defi.io 单独开一个账户

我在 Stripe 上已经有别的产品。这次没有直接复用那个账户,而是在同一个组织下给 defi.io 单独开了一个。

这样两个产品的 webhook、密钥、客户、退款记录各管各的。哪天要给 defi.io 换密钥,或者查一笔有争议的付款,不会碰到另一个产品。多开一个账户几乎没有成本,事后再拆就麻烦了。

第二步:建产品和价格

每个短名字或精品名都有两种买法:

  • 按年:订阅,每年自动续费。到期后有 30 天宽限期,只有原主人能续;过了宽限期,名字释放,别人可以买。
  • 终身:一次性付款,之后不再收费。

Stripe 里一共建了 5 个产品、10 个价格:1 到 4 位各一个,加上精品 B 档,每个都有按年和终身两个价格。精品 A 档直接用 2 位名字的价格,不用单独建。

代码不认价格的 ID,只认查找键,比如 username_4_yearly。测试环境和正式环境的价格 ID 不一样也没关系,切换时代码一行都不用改。

第三步:结账

用户选好名字和买法,点「继续付款」,跳到 Stripe 的结账页。这一步有三条规则:

  • 先占住名字 31 分钟。 Stripe 的结账页至少有效 30 分钟,多留一分钟,避免付款完成时名字已经被放回去。
  • 每人只能持有一个付费名字。
  • 结账页写明买的是哪个名字。 Stripe 的产品是按价格档建的,如果不写明,买精品名 long 的人会在结账页看到「2 位用户名」。

1 位名字一开始不在网上卖,只能发邮件走发票,我以为 $12,999 没人会刷卡。后来想通了:结账页处理这个金额没问题,真正的风险是有些银行会拦截大额付款。所以 1 位名字也改成在线买,页面上提醒一句可以先跟银行打招呼,或者改用发票。

第四步:交付名字

付款结果从两条路进来:Stripe 的 webhook,和付款成功后跳回的页面。哪条先到不一定,也可能都到。所以「交付名字」这件事必须是幂等的:同一笔付款处理两次,结果和处理一次一样。

webhook 只认带签名、且标明属于 defi.io 的事件,一共处理 8 种:结账完成、异步付款成功、结账过期、订阅更新、订阅取消、续费成功、退款和争议。

第五步:交付不了就退款,退了款就收回

这一步定下了整个流程里最重要的一条原则:收了钱,就必须交付名字;交付不了,就全额退款。

听起来是废话,但边界情况比想象的多。比如结账页开着,超过 31 分钟才付款,名字已经被放回去,又被别人买走了。钱扣了,名字却给不了。

现在每一笔成功的付款,最后只有两种结局:

  • 交付:名字还空着,你也没有别的付费名字,就照样给你。
  • 退款:否则自动全额退款。如果这笔付款开了订阅,先取消订阅,再退钱。

退款用这笔结账的 ID 做幂等键,webhook 和成功页同时触发,也只会退一次。退款失败时,webhook 返回错误,让 Stripe 稍后重试。

反过来也一样:在 Stripe 后台给一笔付款全额退款,或者付款被发起争议,对应的名字会自动收回,订阅自动取消。每个名字被释放时都会记下原因:占位超时、被新订单替换、结账过期、年费过期、退款、争议、管理员操作。

第六步:用测试卡,从头真买一遍

代码写完,单元测试和请求测试都过了。但测试只能验证想到的情况,所以最后一步是在 Stripe 的测试模式里,像真实用户一样从注册开始一步步点下去。

这一遍走下来,又找出 5 个测试没覆盖到的问题:

  1. 从按年换成终身,记的还是年费。 改为以结账完成时实际收到的金额为准。
  2. 离开结账页,名字被自己的未完成订单占着,再也买不了。 现在再买一次,旧的占位释放,旧的结账页同时作废。
  3. 结账页写着「2 位用户名」。 就是第三步里那条规则的由来。
  4. 点一下价格卡片,就直接跳去付款。 改成先选卡片,再点一个明确的「继续付款」。
  5. 想买短名字,得先注册一个免费的。 现在注册页直接显示价格和购买入口,买完就落到新主页上。

「交付不了就退款」也是在这一步验证的:一个名字已经被别人占了,另一个人还是付了 $4,999 的终身价,结果是自动全额退款,只退了一次。

修完之后,这 5 个问题都补上了测试。现在跑一遍和 Stripe 相关的测试,35 个全部通过:

回头看这六步

前五步是设计,第六步是验证,两者缺一不可。设计决定了流程该怎么走,真买一遍才能确认它真的这么走。

如果你也要在自己的产品里接 Stripe,这六步基本可以照搬:隔开账户,用查找键管价格,结账时先占位,交付做成幂等,交付不了就退款,最后用测试卡从头走一遍。

下一篇讲上线:从测试环境切到正式环境,收第一笔真钱。

#defiio #Stripe #ClaudeCode

Download Pickful App

Better experience on mobile

iOS

Android

APK