• 欢迎访问少将全栈,学会感恩,乐于付出,珍惜缘份,成就彼此、推荐使用最新版火狐浏览器和Chrome浏览器访问本网站。
  • 吐槽,投稿,删稿,交个朋友
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏少将全栈吧

AI产品收款不难:Stripe订阅支付从零接入指南

独立开发商业化 admin 51分钟前 1次浏览 已收录 扫描二维码

做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、测试验证。跑通这个流程一个下午够了。卡住的时候翻官方文档,比任何教程都靠谱。

支付接入不是产品上线的最后一公里,它就是第一公里。收钱通道跑通了,你的产品才真正开始验证商业价值。

喜欢 (0)赏
[🍬谢谢你请我吃糖果🍬🍬~]
分享 (0)
关于作者:
少将,关注Web全栈开发、项目管理,持续不断的学习、努力成为一个更棒的开发,做最好的自己,让世界因你不同。