1

我们有一个Authorize.net用作支付网关的电子商务网站。

我们最近遇到了人们提交付款确认,然后稍后再次单击提交的问题。这会导致双重产品情况和/或双重支付。

需要考虑的一些事项:

  • 付款确认页面是在用户提交付款之前加载的 PRG(Post-Redirect-Get)的结果
  • 我们有功能可以实际作用于请求的每个部分(请参阅下面的描述)
  • 这种情况仅适用于 Authorize.net 交易花费比正常时间更长的情况。
  • 这还没有投入生产,我们只是在寻找一种方法来测试这个新功能以防止这种行为。

预防片

我们有一个遵循以下流程的多步骤结帐表格:

  • 产品选择
  • 付款条目
  • 确认订单/提交付款
  • 收据

该过程的每个步骤都会调用一个服务来检查用户是否有一个当前的“订单”,该订单具有以下几种状态之一startedprocessingcomplete

如果订单是started,它会将他们重定向到结帐流程的第一页。如果订单是processing,它会将它们重定向到一个占位符页面,该页面每 2 秒执行一次 ajax 请求以检查订单的状态。订单完成后,他们将被重定向到receipt页面。如果订单是complete,它们会receipt立即被重定向到页面。

问题

由于此功能实际上仅在处理事务需要更长的时间时才有效,因此它给我们带来了测试问题 - 出于以下几个原因:

  1. 我们的开发服务器很慢,而且很可能Authorize.net会在应用程序渲染页面之前响应我们的请求。
  2. 如果我们使用 PHP 函数来模拟响应sleep(),它会阻塞线程并且没有任何东西运行,我们与 [1] 处于同一条船上。

我们希望什么

我不知道是否有办法Authorize.net通过某些参数以较慢的方式响应请求,或者是否有另一种方法来实现这一点。我欢迎任何和所有的想法!

4

1 回答 1

1

您不应该为此直接针对 Authnet 进行测试。制作您自己的 Authnet “服务器”并让它延迟对您的响应。对于我为我的 Authnet 库编写的单元测试,我创建了自己的假服务器,它发回我需要测试的适当响应。您可以执行相同的操作,让“服务器”等待您需要的时间,然后再发回响应。响应不一定是真实的,您可以测试延迟。

于 2013-04-25T17:53:32.613 回答