V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
HaibaraDP
V2EX  ›  Stripe

如何接入 Stripe?

  •  
  •   HaibaraDP · 39 天前 · 1328 次点击
    这是一个创建于 39 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看了几天的 Stripe 文档和其他产品的逻辑( cursor.com/readdy.ai ),也问了很多次 AI ,还是有很多疑问,想请求下经常性付款的订阅(订阅开始时发放额度)的最佳实践,比如:

    1. 用户创建多个 Checkout Session 之后每个都付款,出现多个订阅怎么办?
    2. WebHook 事件不可靠,只能作为可有可无的通知?轮询 Stripe API 可能服务器有限流?
    3. 订阅升级是否应该退款? readdy.ai 以前是先删掉当前订阅,再走新订阅流程,买过 starter ,用了几天不好用,点升级后提示会取消当前订阅,体验不好,最近看升级和降级政策好像变了。cursor 是按照当前订阅周期剩余使用天数退款,好像是 stripe 上的功能,我的 pro 用了 3 天换成 plus 退了 15 美元,plus 换成 ultra 退了 38 美元,虽然是正常使用,但是感觉也在薅羊毛。

    github 是否有相关的代码库呢?

    15 条回复    2025-08-15 17:59:58 +08:00
    wogogoing
        1
    wogogoing  
    PRO
       38 天前   ❤️ 1
    我的产品正好接入了 stripe ,回答你一下:

    1.看业务逻辑是否允许,如果仅允许存在一个,那么应该在商户侧,也就是你自己的代码逻辑里面处理,后者覆盖前者就行了,具体操作就是关闭用户除最后一个订阅外的所有订阅即可。
    2.Webhook 有重试机制,整体的交付率还是可以的,但避免停服/宕机导致状态没有同步,建议商户做一个超时主动查询的兜底方案。比如超过 1 天都还没支付成功的订单,主动去 stripe 查询一下支付状态。
    3.这一点看产品的定位和定价。

    之前也有不少人在问如何支持支付宝和微信,我写了篇文章,op 可以参考下:

    https://blog.keepchen.com/a/How-to-get-Stripe-to-support-Alipay-and-WeChat-Pay.html
    CoderGeek
        2
    CoderGeek  
       38 天前
    接入 stripe ,一般国内和国外有些 app 是取消订阅不会退款 用到金额没了为止
    还有的策略是按照天算出一个退款金额到 stripe 用户账户,
    除非选择原路返回退款到用户支付方式,
    WebHook 要接,他是最重要的 如果失败他可以重试的 ,你可以接到了存到本地的 db 或者 MQ 再走你自己逻辑。
    用户退款要记录 失败的要调接口或者手动触发 stripe 的 API

    主要是看你的订阅支持什么模式,还有可以同时生成多个订阅 都是 API 文档
    jchnxu
        3
    jchnxu  
       38 天前
    @wogogoing 学习了。感谢老板
    wogogoing
        4
    wogogoing  
    PRO
       38 天前
    @jchnxu 您客气。
    HaibaraDP
        5
    HaibaraDP  
    OP
       38 天前
    @CoderGeek 取消订阅走当前周期结束时取消也就是不退款更合适些。
    我的产品是像 cursor/readdy 这种订阅周期开始时发放额度或积分的,订阅按天计算退款不合适。
    订阅模式是预付费,没有试用期,应该是不支持多个订阅?
    CoderGeek
        6
    CoderGeek  
       38 天前
    @HaibaraDP 每个产品不一样 国外有些产品就是要退还费用 还是看你的定位 。有些 VIP 之类的 肯定是取消自动续费 当前已生效的不退还
    CoderGeek
        7
    CoderGeek  
       38 天前
    @HaibaraDP 有这些规则的话 也可以考虑是否根据用量模式 stripe 也有 还有你可以规则都是你自己的 你去接 stripe 的 api
    他主要是支付工具 订阅模型 可以用他的也可以是你自己的
    HaibaraDP
        8
    HaibaraDP  
    OP
       38 天前
    问:用户创建多个 Checkout Session 之后每个都付款,出现多个订阅怎么办?
    答:开启每位用户限一个订阅 此时用户结账会出现“您已订阅我们的服务”或“您的付款未能处理”(您似乎已经在我们这里购买了订阅。登录以管理您的账户。),文档: https://docs.stripe.com/payments/checkout/limit-subscriptions
    yimity
        9
    yimity  
       37 天前
    1. 这个时候你自己的系统里面要限制。是否 stripe 能够限制没有研究过。
    2. 这个是不可靠,而且顺序次数都不可靠,所以你要选择性的处理一些事件,自己要存库写逻辑。
    3. 我的策略是只能有一个订阅,但是多个订阅可以升级降级,升级降级时设置 stripe 将对应的金额进行退费或者收取。
    HaibaraDP
        10
    HaibaraDP  
    OP
       35 天前
    @CoderGeek 接 stripe api 的话如何保证调用 api 拿到的是最新的数据呢?感觉不在一个事务内拿到数据无法保证准确啊
    XTTX
        11
    XTTX  
       22 天前
    stripe api update subscription 可以用 proration_behavior , 自动计算订阅升级差额。 第二条路就是创建新的订阅,然后 webhook 接受新的订阅,再处理 prorated refund 。

    好一点的 AI 应该对这些 api 很熟悉了
    HaibaraDP
        12
    HaibaraDP  
    OP
       21 天前
    @XTTX 按比例退款不合适(订阅是购买的用量,像 cursor 一样分配额度,不是 claude code 那种),有办法让 stripe 根据我的用量计算吗(定时上报这种不太准确的也行)?第二种创建订阅再退款感觉处理并发和事务很复杂。我用 cursor 接的 stripe mcp ,写的代码都有不满意的地方
    XTTX
        13
    XTTX  
       21 天前
    @HaibaraDP 那你就 1. 创建新的订阅 2. webhook 接创建成功 event , 查有没有其他有效订阅, 有就取消, 然后在取消成功 event 里再处理退款。 stripe 这么成熟了, 不行你就换一个 AI
    HaibaraDP
        14
    HaibaraDP  
    OP
       21 天前
    @XTTX sonnet 4.1 opus 很快就能写出来,但前提是没有并发、分布式事务,尤其是分布式事务,没有银弹,中间遇到超时、停机、快照之类问题很难处理,补偿的逻辑又非常复杂,很浪费时间。可能是我写后端的,考虑的比较多
    XTTX
        15
    XTTX  
       21 天前
    @HaibaraDP 那可真够复杂的了。 以前我还写 go 后台, 现在直接 supabase + edge function+ ts 撸一切。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   893 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 21:09 · PVG 05:09 · LAX 14:09 · JFK 17:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.