防止用户重复信用卡交易的最佳方法是什么?无论是多次单击提交按钮,还是从收据页面返回并再次单击提交按钮。
6 回答
您可以生成一个唯一值,并将其置于隐藏形式中。在您向信用卡收费之前,请确保尚未处理此唯一值。再加上 CodeToGlory 的禁用按钮的建议应该可以解决您的两个用例。
几种方法:
单击后立即禁用该按钮。
有一个批处理程序可以在当天晚些时候从结算中删除重复项,这样他们就不会被收费。
使用某种模式窗口来阻止用户导航,直到信用卡交易被处理。Jquery 有可以为你工作的 block.UI 插件。
大多数银行要求您提供唯一的订单 ID,因此无法为同一订单收取两次费用。
现在,如果您要求防止重复提交,标准方法是Post/Redirect/Get 模式。您还可以将其与使用 JavaScript 停用提交按钮结合起来。
你会有:
- order_form.aspx,生成唯一的订单 ID 并通过POST提交到
- proces_order.aspx做实际工作,清空购物篮,然后重定向到
- 谢谢你.html
现在,如果用户点击重新加载,只会重新加载 static thankyou.html
。如果他选择点击返回,则返回order_form.aspx
,但他的篮子已经空了。如果它以某种方式被缓存,它将使用相同的订单 ID 进行缓存,因此没有收取两次费用的风险。
将某种同步机制添加到您的后端系统,以便在任何一个时间点只有一个线程可以将“待收费”记录处理到您的基础数据源中。在此同步区域内,添加检查以确保数据源中不存在即将处理的费用。如果确实发生了这样的错误,请确保向客户输出某种优雅的消息——至少在后端不会是致命的。
正如 CodeToGlory 所建议的,它还有助于在 UI 级别添加第二层保护。这将最大限度地减少这种情况发生的次数。
订购后立即删除购物篮物品并禁用提交按钮。
在这种情况下,即使用户回来,刷新等也不能买两次,因为篮子里没有东西可以买。
您可以在客户进入第一个结帐页面时创建会话,然后在按下提交按钮时强制会话超时。这样,客户必须重新开始结帐过程。