如何模拟来自authorize.net的扩展处理响应?

时间:2013-04-25 16:55:25

标签: php symfony payment-gateway credit-card authorize.net

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

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

需要考虑的一些事项:

  • 付款确认页面是在用户提交付款之前加载的PRG(重定向后获取)结果
  • 我们有适当的功能,实际上会对请求的每个部分起作用(请参阅下面的说明)
  • 此情况仅适用于Authorize.net交易时间超过正常情况的情况。
  • 这是生产中的 NOT ,我们只是在寻找一种测试这种新功能的方法来防止这种行为。

预防作品

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

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

该流程的每个步骤都会执行对服务的调用,该服务会检查用户是否拥有具有以下几种状态之一的当前“订单”:startedprocessing或{{1} }。

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

问题

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

  1. 我们的开发服务器速度很慢,receipt更有可能在应用程序呈现页面之前响应我们的请求。
  2. 如果我们使用PHP函数Authorize.net伪装响应,它会阻塞线程并且没有任何运行,我们和[1]在同一条船上。
  3. 我们希望

    我不知道是否有办法让sleep()通过某个参数以较慢的方式响应请求,或者是否有其他方法可以实现此目的。我欢迎任何和所有的想法!

1 个答案:

答案 0 :(得分:1)

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