仅在成功 Stripe Checkout 付款后才提交 Rails 表格

2024-03-30

我正在使用 Rails 4.2,并尝试集成 Stripe Checkout (https://stripe.com/docs/checkout/guides/rails https://stripe.com/docs/checkout/guides/rails)在我的 Rails 应用程序中,有一个我在任何地方都没有看到过的场景。注意:我尝试了许多在线资源的自定义表单集成,但无法使其正常工作,因此选择尝试结账。

在我的 Rails 应用程序中,我有一个订单表,我想要完成的主要任务是拥有一个表单,用户可以在其中提交个人信息(非付款)来下订单。然后,条带结帐集成将允许他们付款;但是,如果没有记录条带费用,则不会在数据库中创建订单记录。我无法使用 stripe 建议的单独的“收费”控制器来完成此操作,并且还尝试将 stripe 代码合并到我的订单控制器中(见下文)。

我应该注意的是,我HAVE能够获得结帐按钮以提交到 stripe 并处理费用,但是HAVE NOT能够在我的数据库中创建订单记录。

我已经广泛搜索了这个问题的答案(目前正在等待条纹支持的回复)。任何建议将不胜感激!

订单控制器.rb

(这是我尝试将他们建议的费用控制器中的条带代码合并到我自己的订单控制器中的示例。我现在不确定在处理费用后要做什么以使其提交表单)

def create
  @order = Order.new(order_params)

  customer = Stripe::Customer.create(
    :email => '[email protected] /cdn-cgi/l/email-protection',
    :card  => params[:stripeToken]
  )

  charge = Stripe::Charge.create(
    :customer    => customer.id,
    :amount      => 5000,
    :description => 'Rails Stripe customer',
    :currency    => 'usd'
  )

  rescue Stripe::CardError => e
    flash[:error] = e.message
    render 'new'
  end

订单/new.html.erb

(我省略了表单中所有其他字段的代码,这仅显示了我的表单提交按钮和条带结账按钮。理想情况下,我可以将这些操作合并到一个按钮中,或者仅在付款成功处理时才进行提交穿过条纹)

<%= form_for @order do |f| %>
    // lots of form fields
<%= f.submit %>

<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
      data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
      data-description="A month's subscription"
      data-amount="500"></script>

通常你会做...

def create
  @order = Order.new(order_params)
  charge_error = nil

  if @order.valid?
    begin
      customer = Stripe::Customer.create(
        :email => '[email protected] /cdn-cgi/l/email-protection',
        :card  => params[:stripeToken])

      charge = Stripe::Charge.create(
        :customer    => customer.id,
        :amount      => 5000,
        :description => 'Rails Stripe customer',
        :currency    => 'usd')

    rescue Stripe::CardError => e
      charge_error = e.message
    end
    if charge_error
      flash[:error] = charge_error
      render :new
    else
      @order.save
      redirect_to (successful page)
    end
  else
    flash[:error] = 'one or more errors in your order'
    render :new
  end
end

这样,除非@order 得到验证,否则不会进行收费,并且除非收费成功,否则不会保存@order。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅在成功 Stripe Checkout 付款后才提交 Rails 表格 的相关文章

随机推荐

  • 如何在 Python 中进行按位非运算?

    为了测试使用更基本的构建块 在我的例子中使用 Nand Or 和 And 构建 Xor 操作 我需要能够执行 Not 操作 内置的not似乎只用单个位来做到这一点 如果我做 x 0b1100 x not x 我应该得到0b0011但我只是得
  • sql查询获取已删除的记录

    你有一张桌子table1其中包含id列 即int 11 not null auto increment并从 1 开始 假设您有 10 000 条记录 可以看出最后一条记录的id是10000 一旦删除了 3 条记录 表中就有 9 997 条记
  • HttpWebRequest 的 URL 被特殊字符截断

    我需要调用的 Web 服务的 URL 包含一个包含自由格式文本的参数 我不知道为什么它是这样设计的 因为它是使用 POST 发送的 并且包含许多字段作为 POST 的一部分 但是 这给我带来了一个问题 对于井号和 等某些字符 URL 在遇到
  • 如何在ireport中为堆积条形图中的条形设置不同的颜色?

    我需要为堆积条形图中的每个条形设置唯一的颜色 无论我在一个条中看到什么颜色 它都不应该在任何其他条或任何其他堆栈中重复 例如 我的报告中有 5 个栏 每个栏有 3 个不同的堆栈 我想将红色相关颜色应用于第一个条形及其堆栈 第二条应该有蓝色相
  • JTextField - setColumns() 方法对我不起作用

    我的问题是我的 JTextField setColumns int field1 setColumns 5 不起作用 我猜这是布局管理器的问题 不过 我正在从练习册上学习 我所知道的唯一布局是 flowLayout borderLayout
  • JQuery同步动画

    在很多情况下我希望动画能够同步执行 特别是当我想制作一系列连续的动画时 有没有一种简单的方法来制作 jQueryanimate函数调用同步 我想到的唯一方法是在动画完成时将标志设置为 true 并等待该标志 jQuery 无法制作同步动画
  • response.sendRedirect() 和 request.getRequestDispatcher().forward(request,response) 有什么区别[重复]

    这个问题在这里已经有答案了 我使用JAVA时出现页面跳转的问题 如果我使用 response sendRedirect login jsp 然后我得到这个网址 http localhost 8080 login jsp 但如果我使用 req
  • Android:寻找不同的 TimePicker 样式

    大家好 一个简短的问题 我一直在寻找这种风格的 TimePicker 但到目前为止没有结果 如图所示 机器人绘图 http www droiddraw org widgetguide html 我开始怀疑这种风格的存在 P 任何知道如何获得
  • 在 Helm 值属性中传递数组

    我想将数组作为 Helm 中 yaml 值文件 中的属性传递 我尝试过的 Attempt elasticsearch uri 127 0 0 1 9200 127 0 0 2 9200 Error ReadString 期望 或n 但发现
  • 阻止设计者调用 getter(VS 2008,WinForms)

    我有一个简单的用户控件 其中包含一个最初为空的组合框 该 CB 的 setter 向其添加项目 而 getter 返回选定的项目 当将此 UC 添加到 Form 时 设计者会自动调用空 CB 的 getter 稍后会调用用项目填充 CB 的
  • 获取下周一的日期

    如何在 JavaScript 中获取下周一 我在互联网上找不到任何相关内容 我也尝试了很多代码并对此有所了解 但我无法真正做到这一点 这是我的代码 var d new Date var day d getDay d new Date d s
  • 访问 PHP 中的活动会话

    如何获取服务器上所有活动 PHP 会话的列表并从一个用户的实例中访问它们 激励案例是显示网站上所有当前活动用户的列表 其中用户名存储在每个用户的 PHP 会话中 注意 我知道我可以通过数据库 甚至文件系统 创建自己的状态 但我正在寻找一种利
  • Elasticsearch - 合并多个文档中的字段

    假设我有一堆这样的文档 foo 1 2 3 foo 3 4 5 对于针对这些文档运行的查询 我正在寻找一种方法来返回所有值的数组foo 最好是唯一的值 但重复也可以 foo 1 2 3 3 4 5 我研究了聚合 API 但我不知道如何实现这
  • 缩略图点击后消失,FancyBox

    我创建了 FancyBox 画廊 但现在 当我单击缩略图时 它会按计划显示图像库 但在后台我可以看到所有缩略图都一一消失 F5 或页面重新加载后 所有缩略图都会恢复 My code a class fancybox title a a cl
  • Visual Studio 2015 预览版中的 Windows Phone 8.0 应用程序打包

    我通过我的学生 Dreamspark 帐户安装了 Visual Studio 2015 Ultimate Preview 我将其安装在更新的 Windows 8 1 之上 工作站 我有 Windows Phone 8 0 应用程序 需要将其
  • 如何冻结所有可冻结的 WPF 对象?

    我想冻结窗口中的所有可冻结对象 以获得更好的性能 为此 我使用了几个像这样的循环 foreach Brush item in FindLogicalChildren
  • 如何绘制方向箭头

    我有很多方向和角度的线条 我使用它们来绘制它们UIBezierpath 我需要在线的一端画一个箭头 动态地取决于给定点 Edit Edit 2 杰克的回答是我的代码 let y2 line point2Y let path UIBezier
  • 将自然数转换为特定基数并将其作为列表返回

    我想将函数的结果显示为列表而不是数字 我的结果是 define lst list define num gt base n b if zero n append lst list 0 append lst list 10 num gt ba
  • 如何在 HBase 中续订过期的 Kerberos 票证?

    我有一个小型 spring 服务 它提供基本功能 例如从 hbase 表中放入 删除 获取 一切似乎都正常 但有一个问题 启动 Tomcat 服务器 10 小时后 我的 kerberos 票证过期 因此我应该更新它 我尝试对 hbase 使
  • 仅在成功 Stripe Checkout 付款后才提交 Rails 表格

    我正在使用 Rails 4 2 并尝试集成 Stripe Checkout https stripe com docs checkout guides rails https stripe com docs checkout guides