2013-01-03 58 views
0

我有一個表單來創建一個新的事件。在創建新事件後,我想將表單信息發送到PayPal PayFlow並將用戶發送到PayPal網站以完成付款。我沒經驗的猜測是做一個after_create回調來渲染一個單獨的視圖來發布paypal payflow表單信息。但它似乎不是正確的解決方案。表單提交後付款

你能提出更多'Rails方式'來做到這一點嗎?

以下是有關貝寶Payflow過程的詳細信息: 我通過一些PARAMS

`curl https://pilot-payflowpro.paypal.com -kd "TRXTYPE=S&AMT=23.45&CURRENCY=USD&CREATESECURETOKEN=Y&SECURETOKENID=9a9ea8208de1413abc3d60c86cb1f4c5"` 

和接收安全令牌 RESULT=0&RESPMSG=Approved&SECURETOKEN[25]=Fj+1AFUWft0+I0CUFOKh5WA==&SECURETOKENID=9a9ea8208de1413abc3d60c86cb1f4c5

然後我可以張貼值到PayPal像這樣:

<body> 
    <form method="post" action="https://payflowlink.paypal.com"> 
    <input type=hidden value="Fj+1AFUWft0+I0CUFOKh5WA==" name=SECURETOKEN/> 
    <input type=hidden value="9a9ea8208de1413abc3d60c86cb1f4c5" name=SECURETOKENID/> 
    </form> 
</body> 

回答

0

我在這個鏈接中找到了答案:Rails, How to submit PayPal requests from controller, instead of a form, URL encoding

因爲我使用Payflow,所以我添加了一些代碼來使用安全令牌。

events_controller.rb

def create 
    @event = Event.new(params[:event]) 

    respond_to do |format| 
     if @event.save! 
      format.html { redirect_to @event.send_to_paypal } 
      format.json { render json: @event, status: :created, location: @event } 
     else 
      format.html { render action: "new" } 
      format.json { render json: @event.errors, status: :unprocessable_entity } 
     end 
    end 
end 

event.rb

def send_to_paypal 
    token = UUIDTools::UUID.random_create.to_s 
    response = Rack::Utils.parse_nested_query(`curl https://pilot-payflowpro.paypal.com -kd "#{GATEWAY.to_param}&TRXTYPE=S&AMT=23.45&CURRENCY=USD&CREATESECURETOKEN=Y&SECURETOKENID=#{token}"`) 

    if response['SECURETOKENID'] != token || response['RESULT'] != "0" || response['SECURETOKEN'].blank? 
     raise StandardError, response['RESPMSG'] 
    else 
     URI.encode("https://pilot-payflowlink.paypal.com?MODE=test&SECURETOKENID=#{token}&SECURETOKEN=#{response['SECURETOKEN']}") 
    end 
end 

網關是一個配置我payflow網關參數(恆定。

我最初得到了一些模糊的錯誤,在payflowlink.paypal提交測試數據。 com。與此鏈接類似,PayPal's Payflow Gateway SDK Example not working這是由於通過PARMLIST在URI.encode(...)。將PARMLIST取出並加入MODE=test後,一切都按預期工作。希望這可以幫助其他使用Payflow的人。