使用WorldPayvalidation付款金额

我们正在使用WorldPay处理分层会员系统的付款,其支付金额取决于所选的会员等级。

付款通过来自多个隐藏字段的表单发送到WorldPay,包括:

 

基本上,表单通过POST提交给WorldPay,用户按照许多步骤处理他们的付款。 完成后,用户将被重定向到指定的确认页面。

这似乎是WorldPay接受付款的典型方式。 这里有一个明显的问题,隐藏字段的价值很容易被任何具有HTML基本知识的人篡改。 表单直接发布到WorldPay,因此我们没有PostBack来validation会员级别的金额。

通过在确认页面之前通过处理程序路由回调,我们可以选择在从WorldPay向我们返回付款通知时validation付款金额; 但是,我想避免用户提交篡改表格,支付不正确的金额并且没有收到会员资格的情况,然后必须联系公司以退还他们的钱。

处理付款之前 ,我们如何validation提交的金额是否正确?

更新

在我看来,我们还有一个额外的问题,即使我们validation服务器端的表单,也没有什么可以阻止恶意用户欺骗直接发送到WorldPay的表单。

这确实是一个漏洞,可以使用签名轻松解决。 看看这个链接:

http://culttt.com/2012/07/25/integrating-worldpay-into-a-database-driven-website/

应该在帮助页面上更好地推广这种方法,太糟糕了。

我能想到的一个解决方案是,捕获form标签的submit

 

然后创建如下所示的JavaScript文件

 var isValidAmount = false; function validatePayment() { if (isValidAmount) { return true; } // in here you want to issue an AJAX call back to your server // with the appropriate information ... I would recommend using // jQuery and so it might look something like this: $.ajax( { type: "POST", url: url, data: { amount: $("#amount").val(), someotherfield: somevalue }, success: function(data, textStatus, jqXHR) { // set the flag so that it can succeed the next time through isValidAmount = true; // resubmit the form ... it will reenter this function but leave // immediately returning true so the submit will actually occur $("myForm").submit(); }, }); // this will keep the form from actually submitting the first time return false; }