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

Rails 7跳转Stripe结账URL出现302错误及URL异常问题排查

Rails 7中Stripe结账URL跳转末尾加反斜杠的问题排查与解决

问题原因

Rails的redirect_to方法默认会对URL做规范化处理,哪怕是Stripe这类外部服务的结账链接,部分场景下会自动给无末尾反斜杠的URL添加上反斜杠。而Stripe的结账URL不兼容末尾反斜杠,一旦被添加就会导致页面解析失败,触发CheckoutInitError: apiKey is not set这类错误。

解决方法

以下是几个直接可行的方案,按推荐优先级排序:

1. 手动去除URL末尾反斜杠后跳转

在subscriptions_controller.rb的payment方法里,生成Stripe结账URL后先手动清理末尾反斜杠,再执行跳转:

def payment
  # 生成Stripe结账会话的原有逻辑
  session = Stripe::Checkout::Session.create(
    # 你的会话参数配置
  )
  # 移除URL末尾的反斜杠
  stripe_checkout_url = session.url.chomp('/')
  redirect_to stripe_checkout_url, allow_other_host: true
end

chomp('/')只会移除URL末尾的单个反斜杠,不会改动URL其他部分,安全可靠。

2. 禁用单个跳转的URL规范化

如果你的Rails版本≥7.0.4,可以直接在redirect_to时传入skip_trailing_slash参数,禁用自动添加反斜杠的逻辑:

def payment
  session = Stripe::Checkout::Session.create(...)
  redirect_to session.url, allow_other_host: true, skip_trailing_slash: true
end

这个方法无需手动处理字符串,更简洁直接。

3. 全局禁用路由末尾反斜杠(谨慎使用)

如果你的整个应用都不需要自动添加末尾反斜杠,可以在config/application.rb中添加全局配置:

config.action_controller.default_url_options = { trailing_slash: false }

注意:该配置会影响所有路由的生成与跳转,若应用内有依赖末尾反斜杠的页面,可能引发异常,仅在确认全局无需求时使用。

验证方式

修改后可以在控制器中用puts stripe_checkout_url打印跳转地址,或查看终端输出的302跳转URL,确认末尾无反斜杠即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:22:21