代码之家  ›  专栏  ›  技术社区  ›  DCNYAM

信用卡重复交易

  •  2
  • DCNYAM  · 技术社区  · 16 年前

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

    6 回复  |  直到 14 年前
        1
  •  1
  •   AndreiM    16 年前

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

    它也有助于在用户界面级别添加第二层保护,正如codetoglory所建议的那样。这将最小化发生这种情况的次数。

        2
  •  8
  •   JoshBerke    16 年前

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

        3
  •  4
  •   Srikar Doddi    16 年前

    几种方式:

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

    2. 在当天晚些时候进行批处理以从结算中删除重复项,这样就不会收取费用。

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

        4
  •  3
  •   vartec    16 年前

    大多数银行都要求你提供 独特的 订单号,所以同一订单不可能收取两次费用。

    现在,如果您要求防止重复提交,标准方法是 Post/Redirect/Get pattern . 您也可以将其与禁用提交按钮和JavaScript结合起来。

    你会有:

    1. 有序的形式 生成 独特的 订单编号和提交人
    2. 采购订单.aspx 做实际的工作,清空篮子,然后 重定向
    3. 谢谢!

    现在,如果用户单击“重新加载”,则只重新加载静态 thankyou.html . 如果他选择单击“上一步”,则返回 order_form.aspx 但是他的篮子已经空了。如果以某种方式缓存它,它将使用相同的订单ID进行缓存,因此不会有在那里两次收费的风险。

        5
  •  0
  •   dr. evil    16 年前

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

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

        6
  •  0
  •   MacDaemon    14 年前

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

    推荐文章