2009-04-20 94 views
2

防止用户进行重复信用卡交易的最佳方式是什么?通过多次点击提交按钮,或从收据页面导航并再次单击提交按钮即可。信用卡重复交易

+0

我用了下面的答案的组合,所以我upvoted每一个我用。我接受了tehblanx答案,因为我相信它在后端提供了最佳的交易风格完整性。但使用其他建议可以为用户提供更清洁的体验。 – NYSystemsAnalyst 2009-04-22 18:03:47

回答

1

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

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

4

几种方法:

  1. 立即禁用按钮点击之后。

  2. 有一个批处理过程可以在当天晚些时候清除重复结算,所以他们不会收取费用。

  3. 使用某种模式窗口停止用户导航直到处理信用卡交易。 Jquery has block.UI plugin that can work for you.

+1

2已关闭,因为它会阻止用户收取两次费用,但不是我们,因为我们根据每笔交易收取费用,无论是否已完成。 1和3防止用户点击提交两次,但如果他们使用后退按钮? – NYSystemsAnalyst 2009-04-20 19:13:46

+1

块UI不会让你回去 http://malsup.com/jquery/block/ – 2009-04-20 19:16:23

8

您可以生成一个唯一的值,并将其置于隐藏形式。在收取信用卡之前,请确保此唯一值尚未处理完毕。这与CodeToGlory关于禁用按钮的建议相结合可以解决您的两个用例。

3

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

现在,如果您要求预防重复提交,标准方式是Post/Redirect/Get pattern。您也可以将它与停用JavaScript提交按钮结合使用。

你必须:

  1. order_form.aspx,产生唯一订单ID和提交POST
  2. proces_order.aspx做实际工作,排空篮,然后重定向
  3. thankyou.html

现在,如果用户单击重新加载,只重新加载静态thankyou.html。如果他选择点击回来,回到order_form.aspx,但他的篮子已经空了。如果它以某种方式被缓存,它将被缓存相同的订单ID,所以没有两次充电的风险。

0

订购时立即取下篮子物品,并禁用提交按钮。

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

0

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