我们有一个Authorize.net
用作支付网关的电子商务网站。
我们最近遇到了人们提交付款确认,然后稍后再次单击提交的问题。这会导致双重产品情况和/或双重支付。
需要考虑的一些事项:
- 付款确认页面是在用户提交付款之前加载的 PRG(Post-Redirect-Get)的结果
- 我们有功能可以实际作用于请求的每个部分(请参阅下面的描述)
- 这种情况仅适用于 Authorize.net 交易花费比正常时间更长的情况。
- 这还没有投入生产,我们只是在寻找一种方法来测试这个新功能以防止这种行为。
预防片
我们有一个遵循以下流程的多步骤结帐表格:
- 产品选择
- 付款条目
- 确认订单/提交付款
- 收据
该过程的每个步骤都会调用一个服务来检查用户是否有一个当前的“订单”,该订单具有以下几种状态之一started
:processing
或complete
。
如果订单是started
,它会将他们重定向到结帐流程的第一页。如果订单是processing
,它会将它们重定向到一个占位符页面,该页面每 2 秒执行一次 ajax 请求以检查订单的状态。订单完成后,他们将被重定向到receipt
页面。如果订单是complete
,它们会receipt
立即被重定向到页面。
问题
由于此功能实际上仅在处理事务需要更长的时间时才有效,因此它给我们带来了测试问题 - 出于以下几个原因:
- 我们的开发服务器很慢,而且很可能
Authorize.net
会在应用程序渲染页面之前响应我们的请求。 - 如果我们使用 PHP 函数来模拟响应
sleep()
,它会阻塞线程并且没有任何东西运行,我们与 [1] 处于同一条船上。
我们希望什么
我不知道是否有办法Authorize.net
通过某些参数以较慢的方式响应请求,或者是否有另一种方法来实现这一点。我欢迎任何和所有的想法!