2014-03-06 82 views
0

我无法验证WorldPay针对电子商务网站的回叫。如何正确验证worldpay的回拨回复

根据the documentation对于成功的交易,WorldPay应该发布名为“transStatus”的值为“Y”的参数。

这似乎很简单,所以我写了一个简单的验证功能查找此值:

private function validateRequest() { 
    if ($_POST['transStatus'] == "Y"){ 
      return true; 
     } else { 
      throw new Exception("Transaction failed"); 
      die(); 
     } 
    } 
} 

,并运行回调页面时,这个函数被调用了尝试,像这样:

try {$this->validateRequest()} 
    catch (Exception $e) { 
     mail("[email protected]", $e->getMessage(), $e->getTraceAsString()); 
     throw new Exception("Could not validate payment.") 
     die(); 
    } 

不幸的是,当我测试这个WorldPay成功处理付款,但订单没有完成我的其他代码。我检查了我的日志文件,但无法查看任何异常或错误。

什么是从这里采取的最佳方法?我应该如何着手解决这个问题?

回答

0

以下是我解决了这个万一有人在将来遇到过这个类似的问题和绊:

当我检查的$ _ POST我意识到,这是接收“Y \ n”,而不是简单的内容“Y”,它期望。下面是我取代了代码

if (strpos($_POST['transStatus'], 'Y') !== FALSE) { /* Order is verified */ } else { /* Order is not verified */ } 

就可以了,现在的代码检查是否“Y”在响应任何地方被发现。这是有效的,因为worldpay只会发送三种可能的响应:'Y','N','C'。