2

防止用户重复信用卡交易的最佳方法是什么?无论是多次单击提交按钮,还是从收据页面返回并再次单击提交按钮。

4

6 回答 6

8

您可以生成一个唯一值,并将其置于隐藏形式中。在您向信用卡收费之前,请确保尚未处理此唯一值。再加上 CodeToGlory 的禁用按钮的建议应该可以解决您的两个用例。

于 2009-04-20T19:17:38.093 回答
4

几种方法:

  1. 单击后立即禁用该按钮。

  2. 有一个批处理程序可以在当天晚些时候从结算中删除重复项,这样他们就不会被收费。

  3. 使用某种模式窗口来阻止用户导航,直到信用卡交易被处理。Jquery 有可以为你工作的 block.UI 插件。

于 2009-04-20T19:10:39.123 回答
3

大多数银行要求您提供唯一的订单 ID,因此无法为同一订单收取两次费用。

现在,如果您要求防止重复提交,标准方法是Post/Redirect/Get 模式。您还可以将其与使用 JavaScript 停用提交按钮结合起来。

你会有:

  1. order_form.aspx,生成唯一的订单 ID 并通过POST提交到
  2. proces_order.aspx做实际工作,清空购物篮,然后重定向
  3. 谢谢你.html

现在,如果用户点击重新加载,只会重新加载 static thankyou.html。如果他选择点击返回,则返回order_form.aspx,但他的篮子已经空了。如果它以某种方式被缓存,它将使用相同的订单 ID 进行缓存,因此没有收取两次费用的风险。

于 2009-04-20T20:00:23.250 回答
1

将某种同步机制添加到您的后端系统,以便在任何一个时间点只有一个线程可以将“待收费”记录处理到您的基础数据源中。在此同步区域内,添加检查以确保数据源中不存在即将处理的费用。如果确实发生了这样的错误,请确保向客户输出某种优雅的消息——至少在后端不会是致命的。

正如 CodeToGlory 所建议的,它还有助于在 UI 级别添加第二层保护。这将最大限度地减少这种情况发生的次数。

于 2009-04-20T19:16:45.257 回答
0

订购后立即删除购物篮物品并禁用提交按钮。

在这种情况下,即使用户回来,刷新等也不能买两次,因为篮子里没有东西可以买。

于 2009-04-20T20:33:33.247 回答
0

您可以在客户进入第一个结帐页面时创建会话,然后在按下提交按钮时强制会话超时。这样,客户必须重新开始结帐过程。

于 2011-02-14T10:20:30.367 回答