【问题标题】:payment after form submit表单提交后付款
【发布时间】:2012-12-17 12:27:06
【问题描述】:

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

您能否建议一种更“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

然后我可以像这样将值发布到贝宝:

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

【问题讨论】:

    标签: ruby-on-rails forms paypal


    【解决方案1】:

    我在这个链接中找到了答案: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 是一个配置常量,带有我的支付流网关参数 (.

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-21
      • 2014-04-30
      • 2011-05-07
      • 2021-05-21
      • 2016-07-18
      • 2011-08-24
      • 2017-11-17
      • 2013-02-06
      相关资源
      最近更新 更多