我原来的问题(下面)可能过于具体,所以我会问一些更普遍的问题!
有人能指出我使用Active Merchant Integrations 来支持offsite payment gateway的教程,示例或文档的方向吗?< / p>
Active Merchant的rdoc列出了以下所有支持的非现场支付网关,但我没有找到任何有关如何使用的教程或示例ActiveMerchant::Billing::Integrations
尽可能好,peepcode和rails casts只考虑网关,而不是整合。
非常感谢!
我的公司正在从PayPal Express Checkout转向WorldPay Business 网关(托管付款页面)。我们正在使用Rails和Active Merchant。
- Active Merchant是否支持WorldPay Business Gateway(托管付款页面)?我认为确实如此,从the rdoc
来判断- 我必须向ActiveMerchant提供什么参数:: Billing :: Integrations :: WorldPay.new?
醇>由于
答案 0 :(得分:10)
我制作了一个简单的应用程序来演示Worldpay和Rails / Activemerchant的异地付款如何协同工作。
Demo Rails App - https://github.com/daemonsy/Worldpay-Rails--Off-Site--Integration-Example
对于World Pay托管付款,基本上需要post
到其付款网址。将test-
添加到secure.worldpay.com以获取测试模式。 WP需要金额,货币,安装ID和cartId才能将页面呈现给客户。
<form action="https://test-secure.worldpay.com/wcc/purchase" method=POST>
<!-- This next line contains the testMode parameter - it specifies that the submission is a test submission -->
<input type="hidden" name="testMode" value="100">
<!-- This next line contains a mandatory parameter. Put your Installation ID inside the quotes after value= -->
<input type="hidden" name="instId" value="Your installation ID ">
<!-- Another mandatory parameter. Put your own reference identifier for the item purchased inside the quotes after value= -->
<input type="hidden" name="cartId" value="Your ID for the product ">
<!-- Another mandatory parameter. Put the total cost of the item inside the quotes after value= -->
<input type="hidden" name="amount" value="The cost of the product ">
<!-- Another mandatory parameter. Put the code for the purchase currency inside the quotes after value= -->
<input type="hidden" name="currency" value="currency code e.g. GBP, USD ">
<!-- This creates the button. When it is selected in the browser, the form submits the purchase details to us. -->
<input type=submit value=" Buy This ">
资料来源:http://www.worldpay.com/support/kb/bg/htmlredirect/rhtml.html
这会创建一个简单的button
,将您的订单带到World Pay,客户将输入信用卡详细信息并完成购买。我已将上述代码嵌入到订单控制器的show
页面中。 e,g,<input type="hidden" name="amount" value="<%=@order.amount"%>>
。因此,您可以在提交订单后点击buy this
。有很多方法可以实现POST
到世界薪酬。
之后,World Pay可以显示购物者回复页面,向您发送payment response
等。对于工作的付款响应,您可以将付款响应callback URL
设置为其中一个控制器。例如=&GT; http://mysite.com/payment-backend
这将是POST
请求,因此您必须设置控制器来处理它。这是Activemerchant
开始的地方。例如,
class BackendsController < ApplicationController
include ActiveMerchant::Billing::Integrations
protect_from_forgery :except=>[:worldpay_return]
#in routes => match '/payment-backend'=>'backends#worldpay_return'
def worldpay_return
notification = WorldPay::Notification.new(request.raw_post)
order = Order.find(notification.item_id)
if notification.acknowledge
begin
if notification.complete?
order.status = 'success'
end
rescue
order.status = "failed"
raise
ensure
order.save
end
end
render :text =>"Order status for #{order.id} is #{order.status}"
end
end
因此Notification对象将读取request.raw_post
中的参数并将它们设置为您可以查询的对象。我发现活跃的商家文档对于告诉它所映射的返回参数是有用的。
请注意,此控制器是一个非常粗略的例子。 World Pay提供了一些验证响应的方法,Active Merchant支持这种方法。
WorldPay上的ActiveMerchant文档::通知 http://rdoc.info/github/Shopify/active_merchant/master/ActiveMerchant/Billing/Integrations/WorldPay 世界付款响应文档 http://www.worldpay.com/support/kb/bg/paymentresponse/payment_response.html