SaaS2026年3月26日

用 Claude 写 SaaS 订阅,绕不开的 3 个问题。

Claude Code 很强,但订阅逻辑不是一次就能写对的。AI 会漏边界、不懂业务逻辑、覆盖不到竞态条件——这些恰恰是支付最容易出事的地方。

01

"现在 CC 这么厉害,直接让它写订阅逻辑不就行了?"

我理解这个想法,做订阅之前,我也是这么想的。

因为之前我做的是一次性支付的纯积分制,买 N 次收一定钱,永不过期,这其实很简单,没有周期、没有权限重置、没有等级重置,AI 写起来确实够用,描述清楚丢给它,很快就出来了,看起来能跑,看起来没问题。

毕竟现在 Claude 写代码确实很强,但订阅不一样。订阅有生命周期,有状态流转,有复杂的业务逻辑链条,不是数据库正确、看起来不报错就行,还要看是否和支付平台的用户订阅对准了。

Pay4SaaS 的 2 个订阅模块,是用 AI 开发的,但质量是我一点点抠出来的,不是它一次给到位的。

每一个边界情况,每一个异常场景,都是我反复结合行业常规做法、业务逻辑,用户体验三个维度,和它确认、修改、再测试,来来回回,才最终定下来的。

02

不敢完全信任 CC,是因为,只要我们频繁用 CC,就能发现的以下问题。

一、AI 会丢三落四。

很多社群朋友都吐槽过,说 CC 有丢三落四的毛病。

其实,做一些所见即所得、逻辑闭环简单的,是没问题的,比如,像做个页面,引入 fumadocs 做 docs/blog,统计分析,这些不到半天都能搞定的很好,但一旦牵涉关联多、逻辑复杂起来,它的丢三落四就开始显现了。前面漏一个判断,后面链条就断了,而且断的地方你不一定能马上找到。

这个丢三落四就像一个偶尔粗心、幻觉的同事一样,而在支付这么严肃的事情上,我们心里就更要打一个问号了。可怕的是什么呢?

就那么 1、2 次的丢三落四,足以让一个订阅链条走不完全。走不完全,就大概率会出错,这是必然的嘛。

它给我们说测试通过了,但其实,测的时候还是一堆问题的。AI 的工作在它输出代码的那一刻就结束了,后面所有的责任,都是我们的了。

二、AI 不知道我们的业务逻辑。

比如,降级是立即生效还是下个周期生效?AI 大概率直接改 plan_type,但用户这个月付的是高级套餐的钱,立即降级等于吃了用户的差价啊。

我用 pending_plan_* 字段记下来,等续费 webhook 到了才切换——这个 AI 想不到,是我反复测,反复修,才得以正确实现。

而有些问题呢,没有标准答案,取决于我们自己的产品策略。AI 只能猜,猜错了,代码跑起来了,逻辑是歪的,用户感受到了,我们还不一定知道哪里出了问题。

三、AI 覆盖不到边界场景。

而边界场景恰恰是支付最容易出事的地方。

它生成的代码看起来能跑,逻辑上也说得通,但边界情况它不一定想得到。比如——

  • 它不知道 Paypal 和 Creem 的试用期产品,其实是需要创建 2 个的,否则就会让用户陷入无限试用。

  • 两个请求几乎同时到达,一个是续费成功的 Webhook,一个是用户手动取消订阅的请求,AI 没考虑这种竞态条件,最终状态取决于谁后写入数据库——纯靠运气。

这些场景它没覆盖到,而我们也不一定发现,直到用户真的遇到了,才知道出问题了。那时候已经晚了。

03

既然 AI 靠不住,那就只能我们自己来。

支付是产品最后一道门,用户把钱给我们的那一刻,是信任度最高的时刻,也是最脆弱的时刻。这道门出了问题,前面所有的努力都白搭。

用户对支付问题的容忍度几乎是零,没有人愿意在钱的问题上将就。

04

其实,在工作中,真实的标准开发流程其实也是如此啊,需求、产品、UI、开发、测试,测试通过了才能上线,开发完不算结束。

而支付的测试呢,不是随便点几下看看能不能跑。光是订阅部分,正常流程要测,异常流程要测,边界情况要测,Webhook 要测,升降级要测,年付转月付要测,试用期各种情况要测。

我自己整理下来,光订阅部分就有 60 多个测试用例,每一个都要过,一个都不能跳过。

只有完成这些,才是真正的做完且做对。