2011-07-11 30 views
4

所以我試圖從貝寶獲取交易細節,而不創建表單,只需發送一個帖子到URL與必要的信息。這是我的代碼片段,我已經嘗試通過表單做同樣的工作。Net :: HTTP.post_form拋出EOFError?

<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> 

紅寶石對方拋出一個的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"}) 

回答

5

的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。點擊地址欄左邊的綠色圖標,打開對話框,查看證書,詳細信息,然後將兩個證書導出爲paypal.pem和paypal2.pem。將它們放在與腳本相同的文件夾中。這應該可以治癒你的問題!

+0

浮雕:抱歉,遲到的回覆,但我實際上看到其中3? – denniss

+0

@denniss:沒關係。您會看到PayPal使用的證書,這是該鏈中的最後一個。但是,這是另外兩個,高於您感興趣的PayPal證書。這是您需要下載的兩個VeriSign證書。 – emboss

相關問題