You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Stripe的success_url中添加订阅时长参数?

实现步骤

1. 前端传递订阅方案参数

确保前端在发起创建Checkout Session请求时,将用户选择的方案对应的my_params值(比如方案1传2、方案2传3、方案3传4)与total参数一起提交到CheckoutController#create接口。

2. 修改Create方法注入参数到Success URL

在create方法中先获取前端传来的my_params,再通过Rails的URL Helper生成包含该参数的success_url,同时保留Stripe要求的{CHECKOUT_SESSION_ID}占位符:

def create
    @user = current_user
    @total = params[:total].to_d
    @my_params = params[:my_params] # 获取前端传递的订阅方案标识
    
    @session = Stripe::Checkout::Session.create(
        payment_method_types: ['card'],
        line_items: [
            {
                name: 'Rails Stripe Checkout',
                amount: (@total * 100).to_i,
                currency: 'eur',
                quantity: 1
            },
        ],
        # 用URL Helper生成带参数的成功跳转地址
        success_url: checkout_success_url(my_params: @my_params, session_id: '{CHECKOUT_SESSION_ID}'),
        cancel_url: checkout_cancel_url
    )
    respond_to do |format|
        format.js
    end
end

3. 修复Success方法的逻辑问题

原success方法存在参数类型不匹配、实例变量调用遗漏的问题,修正后代码如下:

def success
    @session = Stripe::Checkout::Session.retrieve(params[:session_id])
    @payment_intent = Stripe::PaymentIntent.retrieve(@session.payment_intent)

    @user = current_user
    my_params = params[:my_params].to_i # 将字符串参数转为整数,避免类型不匹配

    if my_params == 2
        @user.update(sub_lvl: [@user.sub_lvl, 2].max) # 简化等级更新逻辑
        new_end_date = @user.end_sub_date < Time.now ? Time.now + 30.days : @user.end_sub_date + 30.days
        @user.update(end_sub_date: new_end_date)
    elsif my_params == 3
        @user.update(sub_lvl: [@user.sub_lvl, 3].max)
        # 修正原代码中60天的错误,匹配方案2的90天时长
        new_end_date = @user.end_sub_date < Time.now ? Time.now + 90.days : @user.end_sub_date + 90.days
        @user.update(end_sub_date: new_end_date)
    elsif my_params == 4
        @user.update(sub_lvl: [@user.sub_lvl, 4].max)
        new_end_date = @user.end_sub_date < Time.now ? Time.now + 180.days : @user.end_sub_date + 180.days
        @user.update(end_sub_date: new_end_date)
    end
end

额外提示

  • 建议在create方法中添加参数验证,比如检查@my_params是否为允许的2/3/4值,防止非法参数传入
  • 确保前端传递的my_params与订阅方案的对应关系准确(方案1→2、方案2→3、方案3→4)

内容的提问来源于stack exchange,提问作者ffouquet42

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 08:06:29