信用卡重复交易

时间:2009-04-20 19:07:36

标签: asp.net credit-card

防止用户进行重复信用卡交易的最佳方法是什么?可以通过单击提交按钮太多次,或者从收据页面返回并再次单击提交按钮来实现。

6 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:4)

几种方式:

  1. 点击后立即停用该按钮。

  2. 有一个批处理过程可以在当天晚些时候从结算中删除重复项,因此不会向他们收费。

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

答案 2 :(得分:3)

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

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

你有:

  1. order_form.aspx ,生成唯一订单ID并通过 POST 提交至
  2. proces_order.aspx 执行实际工作,清空购物篮,然后重定向
  3. thankyou.html
  4. 现在,如果用户点击重新加载,则只重新加载静态thankyou.html。如果他选择回击,请回到order_form.aspx,但他的篮子已经空了。如果它以某种方式被缓存,它将被缓存使用相同的订单ID,因此没有在那里充电两次的风险。

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

订购后立即移除购物篮项目并禁用提交按钮。

在这种情况下,即使用户回来,刷新等也无法购买两次,因为购物篮中没有任何东西可以购买。

答案 5 :(得分:0)

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