表格提交后付款

时间:2013-01-03 06:07:43

标签: ruby-on-rails forms paypal

我有一个表单来创建一个新事件。创建新活动后,我想将表单信息发布到PayPal PayFlow并将用户发送到paypal网站以完成付款。我没有经验的猜测是做一个after_create回调来呈现一个单独的视图来发布paypal payflow表单信息。但它似乎不是正确的解决方案。

你能建议更多'Rails方式'吗?

以下是有关PayPal Payflow流程的更多详细信息: 我通过一些参数

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

1 个答案:

答案 0 :(得分: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

GATEWAY是我的payflow网关参数的配置常量(。

我最初在payflowlink.paypal.com上提交测试数据时出现了一些模糊的错误。与此链接类似,PayPal's Payflow Gateway SDK Example not working这是由URI.encode(...)中的PARMLIST传递引起的。在取出PARMLIST并添加MODE=test之后,一切都按预期工作。希望这可以帮助其他人使用Payflow。

相关问题