我有一个表单来创建一个新事件。创建新活动后,我想将表单信息发布到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>
答案 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。