我制作了一个简单的应用程序来演示 Worldpay 和 Rails/Activemerchant 的异地支付如何协同工作。
演示 Rails 应用程序-
https://github.com/daemonsy/Worldpay-Rails--Off-Site--Integration-Example
对于 World Pay 托管支付,基本上post
需要他们的支付 URL。添加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
订单控制器的页面中。例如,例如,<input type="hidden" name="amount" value="<%=@order.amount"%>>
。所以您可以buy this
在提交订单后点击。有很多方法可以实现POST
to World Pay。
之后,World Pay 可以显示购物者响应页面、发送给您payment response
等。要使付款响应正常工作,您可以将付款响应设置callback URL
到您的控制器之一。例如 => 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 文档::Notifications
http://rdoc.info/github/Shopify/active_merchant/master/ActiveMerchant/Billing/Integrations/WorldPay
World Pay 支付响应文档
http://www.worldpay.com/support/kb/bg /paymentresponse/payment_response.html