3

在用户注册页面之后,Web 客户端会来到这个页面,该页面只包含一个继续按钮。但我想跳过此页面并继续付款页面。有没有办法在控制器中完全执行此操作?

<form method="post" action="https://www.ccavenue.com/shopzone/cc_details.jsp">
    <input type=hidden name=Merchant_Id value="<%= @Merchant_id %>">
    <input type=hidden name=Amount value="<%= @Amount %>">
    <input type=hidden name=Order_Id value="<%= @user_id %>">
    <input type=hidden name=Redirect_Url value="<%= @redirect_url %>">
    <input type=hidden name=Checksum value="<%= @checksum %>">
    <input type="submit" class="Register_button" value="Proceed to payment">
</form>
4

4 回答 4

3

您应该从控制器发出POST请求。

uri = URI.parse("https://www.ccavenue.com/shopzone/cc_details.jsp")
http = Net::HTTP.new(uri.host, uri.port)

form_data = {
  "Merchant_Id" => @Merchant_id,
  "Amount" => @Amount,
  "Order_Id" => @user_id,
  "Redirect_Url" => @redirect_url,
  "Checksum" => @checksum
}

request = Net::HTTP::Post.new(uri.request_uri)
request.set_form_data(form_data)

response = http.request(request)

您可以使用httparty gem 进行发布请求。

于 2012-05-16T08:33:05.120 回答
1

不,不是你想要的方式。

正如其他人所说,您可以从控制器内部发布,并接收响应,但如果您想让浏览器发布到远程页面,则必须通过表单。一个常见的解决方案是通过 javascript 在加载时提交表单。例如

<body onload="document.forms['myform'].submit();">
    <form id="myform">
        …
    </form>
</body>
于 2012-05-17T08:30:20.737 回答
1

这可能是几年后的回应,但如果有人还在寻找,我发现这个Repost 插件可以实现这种行为。

可以像redirect_to控制器中的正常方法一样使用。

redirect_post('https://external-url.io/endpoint', params: {...})
于 2020-09-26T13:13:57.063 回答
0

没有理由不能使用 Ruby 标准库中的 uri 和 net/http 从控制器发布并处理来自服务器的响应。

可以在这里找到一些使用 net/http 的好例子。https://github.com/augustl/net-http-cheat-sheet/blob/master/post_form.rb

不过,这可能不是处理这个问题的最佳方法。

于 2012-05-16T08:33:19.460 回答