【问题标题】:How to post to external url from rails app without using form如何在不使用表单的情况下从 Rails 应用程序发布到外部 url
【发布时间】:2015-07-01 05:25:28
【问题描述】:

我可以使用 html 表单发布到我的支付网关。但是我有一个新的要求。现在,单击“付款”按钮后,我必须验证项目是否仍可购买,如果可用,则自动将付款表格发布到网关。

也就是说,我想在单击按钮时执行一些 Rails 控制器代码,然后如果验证成功,则希望使用参数重定向到外部 URL(支付网关)。

我读到了,在 rails 中使用 redirect_to 是不可能的。也不能使用 ajax 发布到外部 url。我应该如何实现它?

【问题讨论】:

  • 我就是这样处理的。在结帐页面上 - 我没有生成付款表格,而是生成了一个指向“付款”操作的链接,其中包含远程:true。然后我验证了所有关于“付款”操作的检查。验证失败时重定向到主页,支付成功时渲染payment.js.erb。为付款表单编写了新的部分“_payment_form.html.erb”。现在在 payment.js.erb 中,我即时渲染 payment_form 并将其添加到一些 div 并使用 jquery 提交表单。

标签: ruby-on-rails ajax payment-gateway


【解决方案1】:

你可以像这样使用 Ruby 的Net::HTTP

require "net/http"
require "uri"

uri = URI.parse("http://example.com/search")
params = {"foo" => "value one", "bar" => "value two"}


# Shortcut way
response = Net::HTTP.post_form(uri, params)


# With more control
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new(uri.request_uri)
request.set_form_data(params)
response = http.request(request)


puts response.code             # => 200
puts response.body             # => The body (HTML, JSON, etc)

【讨论】:

  • 实际上,我想在成功验证后重定向到我的支付网关。我通过使用ajax发布(远程:true)然后对控制器的操作(支付)进行所需的验证并呈现payment.js.erb然后在payment.js.erb中呈现一个表单并使用jquery将其提交给支付网关。
  • 感谢您的回答。它帮助我完成了我想要在应用程序本身中捕获响应的退款 API 调用。
猜你喜欢
  • 2018-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
  • 1970-01-01
  • 2011-03-02
  • 1970-01-01
相关资源
最近更新 更多