我正在尝试找出处理付款处理的最佳方法,以防止重复付款提交。我正在使用PHP(特别是CakePHP 2.3.8)和平衡付款来处理付款处理。
我注意到在我的服务器日志中,我已经在一秒钟内提交了多个请求,这些请求通常与wordpress或phpmyadmin相关,例如
ip.address.here - [08/Jul/2014:15:03:12 -0400] "GET / HTTP/1.1" 302 320 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"
ip.address.here - [08/Jul/2014:15:03:12 -0400] "GET / HTTP/1.1" 302 320 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"
ip.address.here - [08/Jul/2014:15:03:12 -0400] "GET / HTTP/1.1" 302 320 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"
ip.address.here - [08/Jul/2014:15:03:13 -0400] "GET / HTTP/1.1" 302 320 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"
我担心有人会尝试类似的事情(意外与否),但要付款。处理上述情况的最有效方法是什么,其中多个请求非常快速地进入,无论它是“黑客”还是系统中的打嗝?如果我使用像this one, speficially for CakePHP这样的排队系统,我如何跟踪以前处理的条目以检测重复的提交?
说我有3个条目的队列。在处理条目1时,我会检查条目2和3以确保它们不是重复信息吗?如果是,那就删除它们吧?
答案 0 :(得分:0)
根据我的经验,您应该只保存一个会话标识符,该标识符在事务完成或被取消之前保持不变。通常,支付网关会使用该会话标识符来检查您是否没有复制该交易。
此外,支付网关应检测重复(即相同的卡信息,在短时间内相同的金额)并将向您返回错误,让您知道发生了什么。
因此,您只需记住跟踪您的唯一ID并在事务完成后重置它。如果您要保留购物袋并且过期,请使交易ID在同一时间到期。最后,请确保使用javascript禁用提交按钮,这样用户就不会多次点击它。