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

如何在Stripe支付中通过控制器动态生成通用返回URL?

问题:如何在Rails控制器中定义通用return_url供Stripe支付表单调用

你需要用统一表单处理多路径的Stripe支付意图及支付UI,希望把前端JS里硬编码的giftcard_authorised_payments_url改成通用的return_url变量,以下是具体实现步骤:

当前你使用的前端JS代码片段:

<script type="text/javascript">
[...]
  form.addEventListener('submit', async (event) => {
    event.preventDefault();        
    const {error} = await stripe.confirmPayment({
      //`Elements`实例,用于创建Payment Element
      elements,
      confirmParams: {
        return_url: '<%= giftcard_authorised_payments_url(id: @payment.id) %>'
      },
    });
</script>

解决方案

1. 在控制器动作中定义实例变量@return_url

根据不同的支付业务场景,在对应的控制器动作里生成专属的返回URL,赋值给@return_url:

# 礼品卡支付场景的控制器动作示例
def giftcard_payment
  @payment = Payment.find(params[:id])
  @return_url = giftcard_authorised_payments_url(id: @payment.id)
end

# 普通订单支付场景的控制器动作示例
def order_payment
  @order = Order.find(params[:id])
  @return_url = order_authorised_payments_url(id: @order.id)
end

2. 视图JS中替换为通用变量

把原来硬编码的URL助手调用,替换成控制器传递的实例变量:

<script type="text/javascript">
[...]
  form.addEventListener('submit', async (event) => {
    event.preventDefault();        
    const {error} = await stripe.confirmPayment({
      elements,
      confirmParams: {
        return_url: '<%= @return_url %>'
      },
    });
</script>

3. (可选)封装通用方法减少重复代码

如果多个控制器动作都需要生成支付返回URL,可以在ApplicationController里封装通用方法,复用逻辑:

# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  protected

  def set_payment_return_url(record, url_helper)
    @return_url = send(url_helper, id: record.id)
  end
end

# 具体控制器中调用示例
def giftcard_payment
  @payment = Payment.find(params[:id])
  set_payment_return_url(@payment, :giftcard_authorised_payments_url)
end

def order_payment
  @order = Order.find(params[:id])
  set_payment_return_url(@order, :order_authorised_payments_url)
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:22:39