我们有一个使用Authorize.net
作为支付网关的电子商务网站。
我们最近遇到了人们提交付款确认的问题,然后再次点击提交。这导致双重产品情况和/或双重付款。
需要考虑的一些事项:
预防作品
我们有一个多步骤结帐表格,遵循以下流程:
该流程的每个步骤都会执行对服务的调用,该服务会检查用户是否拥有具有以下几种状态之一的当前“订单”:started
,processing
或{{1} }。
如果订单是complete
,它会将它们重定向到结帐流程的第一页。
如果订单为started
,它会将它们重定向到占位符页面,该页面每2秒执行一次ajax请求以检查订单的状态。订单完成后,会将其重定向到processing
页面。
如果订单为receipt
,则会立即将其重定向到complete
页面。
问题
由于此功能实际上仅在处理事务需要更长时间时才有效,因此在测试时会给我们带来问题 - 原因如下:
receipt
更有可能在应用程序呈现页面之前响应我们的请求。Authorize.net
伪装响应,它会阻塞线程并且没有任何运行,我们和[1]在同一条船上。我们希望
我不知道是否有办法让sleep()
通过某个参数以较慢的方式响应请求,或者是否有其他方法可以实现此目的。我欢迎任何和所有的想法!
答案 0 :(得分:1)
您不应该直接针对Authnet进行测试。制作自己的Authnet“服务器”并让它延迟对您的响应。对于我为Authnet库编写的单元测试,我创建了自己的假服务器,它发回了我需要测试的相应响应。您可以执行相同操作,并在发回响应之前让“服务器”等待您需要的时间。对于您来说,测试延迟不一定是真实的。