ruby-on-rails - Net::HTTP.post_form 抛出 EOFError?

标签 ruby-on-rails ruby post paypal

因此,我试图在不创建表单的情况下从 paypal 获取交易详细信息,而只是通过向 url 发送包含必要信息的帖子。这是我的代码片段,我尝试通过表单执行相同的操作并且有效。

<form method=post action="https://www.sandbox.paypal.com/cgi-bin/webscr">
      <input type="hidden" name="cmd" value="_notify-synch">
      <input type="hidden" name="tx" value="<%= subscription.tx %>">
      <input type="hidden" name="at" value="<%= @identity_token %>">
      <input type="submit" value="View Details">
    </form>

Ruby 对象抛出一个 EOFError,我不知道它为什么会这样

paypal_uri = URI.parse('https://www.sandbox.paypal.com/cgi-bin/webscr')
@post_request = Net::HTTP.post_form(paypal_uri , {:tx => @subscription.tx, :at => IDENTITY_TOKEN, :cmd => "_notify-sync"})

最佳答案

URL 是 https,因此您需要在您的 Net::HTTP 上启用 SSL。

require 'openssl'

paypal_uri = URI.parse('https://www.sandbox.paypal.com/cgi-bin/webscr')
req = Net::HTTP::Post.new(paypal_uri.path)
req.set_form_data({:tx => @subscription.tx, :at => IDENTITY_TOKEN, :cmd => "_notify-sync"})
sock = Net::HTTP.new(paypal_uri.host, 443)
sock.use_ssl = true
store = OpenSSL::X509::Store.new
store.add_cert OpenSSL::X509::Certificate.new(File.new('paypal.pem'))
store.add_cert OpenSSL::X509::Certificate.new(File.new('paypal2.pem'))
sock.cert_store = store
sock.start do |http|
  response = http.request(req)
end

要获得 CA 证书 paypal.pem 和 paypal2.pem,只需手动浏览到 PayPal URL,我将针对 FireFox 对其进行描述。单击地址栏左侧的绿色图标,打开对话框,查看证书,详细信息,然后将两个 VeriSign 证书导出为 paypal.pem 和 paypal2.pem。将它们放入与脚本相同的文件夹中。那应该可以解决您的问题!

关于ruby-on-rails - Net::HTTP.post_form 抛出 EOFError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6646550/

相关文章:

ruby-on-rails - Rails 字符串数组和 PostgreSQL

ruby-on-rails - ActionController::UrlGenerationError:没有路由匹配 - 我的错误在哪里?

ruby - 如何使用 Sinatra/Foreman 打印调试消息?

java - 如何在 Java 中发起 HTTPS post 请求?

ruby-on-rails - 是否可以使用 ruby​​ 改进来更改测试中 Controller 操作的行为?

ruby-on-rails - 如何在 Rails 中进行连接查询?

ruby-on-rails - 尝试更新数据库值时,rails update_attributes 返回 false

ruby - Ruby 的 "undef"对象是什么?

php - 发布请求在服务器端获取空?

asp.net-mvc - 将 ssl 与 aspnet mvc 一起使用会在将数据发布到安全页面时产生问题