做AI产品的人最容易卡在哪一步
不是技术,不是产品设计,是收钱。
很多独立开发者产品做完了,卡在支付接入上拖了一两周。功能都ready了,用户也来了,结果付费流程没跑通,眼看着用户流失。这篇就来解决这件事,从零跑通Stripe订阅支付。
为什么选Stripe
市面上支付方案不少,Stripe在开发者体验上确实领先。API设计干净,文档清楚,测试环境完善。对于做海外市场的AI产品来说,Stripe几乎成了默认选择。
据Stripe官方定价页面(stripe.com/pricing),美国地区标准费率是每笔成功交易2.9%加$0.30,没有月费和setup fee。具体费率因国家而异,比如日本是3.6%。这个费率在支付行业属于正常水平。
订阅制还是按量计费
AI产品常见两种收费模式。订阅制适合功能明确的产品,比如每月$19用AI写作工具。按量计费适合API类产品,按token或请求次数收费。
Stripe Billing原生支持订阅制。如果你做按量计费,需要用Stripe的Usage Records API配合订阅功能实现。本文重点讲订阅制接入,因为这是大多数AI产品创业者的第一选择。
Stripe订阅生命周期
理解订阅状态机是接入的基础。据Stripe官方文档(docs.stripe.com/billing/subscriptions/overview),订阅有几个关键状态:
- incomplete:刚创建,等待首次支付完成
- active:支付成功,用户可正常使用产品
- past_due:续费扣款失败,进入自动重试流程
- canceled:订阅被取消,用户失去访问权限
Stripe会自动处理续费扣款和失败重试。你只需要通过webhook监听状态变化,然后更新用户在数据库里的权限状态就行。这个设计帮你省了大量重复逻辑。
接入步骤
1. 创建产品和价格
在Stripe Dashboard里先建好Product和Price。Product对应你的AI产品,Price对应一个定价方案。比如你的产品有Free、Pro、Team三个档位,就建三个Price。
也可以通过API创建:
import stripe
stripe.api_key = "sk_test_xxx"
product = stripe.Product.create(name="AI Writer Pro")
price = stripe.Price.create(
product=product.id,
unit_amount=1900, # $19.00
currency="usd",
recurring={"interval": "month"}
)
unit_amount的单位是分,1900就是$19.00。recurring里的interval设为month就是月付,year就是年付。
2. 创建Checkout Session
用户点”升级”按钮时,后端创建一个Checkout Session,返回URL让用户跳转到Stripe托管的支付页面。这是最简单的方式,不需要你自己处理信用卡表单,PCI合规问题也省了。
session = stripe.checkout.Session.create(
mode="subscription",
line_items=[{"price": "price_xxx", "quantity": 1}],
success_url="https://yourapp.com/success?session_id={CHECKOUT_SESSION_ID}",
cancel_url="https://yourapp.com/pricing",
customer_email=current_user.email
)
return redirect(session.url)
success_url里的{CHECKOUT_SESSION_ID}是Stripe自动替换的占位符,你用它来确认支付完成并获取session详情。
3. 处理Webhook
支付成功后Stripe会往你的webhook endpoint发事件。这是更新用户权限的关键环节,不能靠前端跳转来判断支付成功,因为用户可能关掉浏览器。
from flask import Flask, request
@app.route("/webhook", methods=["POST"])
def webhook():
event = stripe.Webhook.construct_event(
request.data,
request.headers["stripe-signature"],
"whsec_xxx"
)
if event["type"] == "checkout.session.completed":
session = event["data"]["object"]
customer_id = session["customer"]
activate_subscription(customer_id)
elif event["type"] == "customer.subscription.deleted":
deactivate_subscription(customer_id)
elif event["type"] == "invoice.payment_failed":
# 续费失败,标记用户进入宽限期
mark_grace_period(customer_id)
return "", 200
必须验证签名来防止伪造请求。这是安全底线,跳过这步等于把支付后台暴露给任何人。
4. 测试
Stripe提供测试模式,用测试卡号模拟各种场景。常用的几个:
- 4242 4242 4242 4242:成功支付
- 4000 0027 6000 3184:需要3DS验证
- 4000 0000 0000 9995:余额不足
在Stripe Dashboard的Developers > Events里可以看到所有webhook事件的日志。如果webhook没收到,用Stripe CLI本地转发调试,命令是stripe listen --forward-to localhost:8000/webhook。
上线前检查清单
切换到生产环境前,这几件事必须确认:
- API密钥换成sk_live开头的生产密钥
- Webhook endpoint注册到Stripe Dashboard,且签名密钥正确
- success_url和cancel_url指向生产域名
- 测试过续费失败场景(past_due状态处理逻辑)
- 测试过用户主动取消订阅的完整流程
- 检查币种设置是否匹配目标市场
- 确认税务设置(卖到欧盟需要处理VAT,可以用Stripe Tax)
关于Stripe Connect
如果你的平台需要替用户收款,比如多租户AI平台让用户各自定价,需要用Stripe Connect。据Stripe官方文档(docs.stripe.com/connect/standard-accounts),Standard connected account让用户拥有自己的Stripe账户,你的平台通过API创建关联后可以代为发起支付。
这块比直接订阅复杂不少。建议先用普通订阅模式跑通自己的收费,再考虑Connect方案。
成本计算
假设你的AI产品定价$19/月,100个付费用户:
- 月收入:$1,900
- Stripe手续费(2.9% + $0.30/笔):约$85
- 实际到账:约$1,815
用户量到1000时,月收入$19,000,手续费约$850。Stripe的费率不随量降低,除非你申请Custom方案。据Stripe官方说明,Custom方案通常面向月流水$50,000以上的企业,可以谈volume discount。
小结
Stripe订阅接入的核心就四步:建产品价格、创建Checkout Session、处理Webhook、测试验证。跑通这个流程一个下午够了。卡住的时候翻官方文档,比任何教程都靠谱。
支付接入不是产品上线的最后一公里,它就是第一公里。收钱通道跑通了,你的产品才真正开始验证商业价值。
