我无法验证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@address.com", $e->getMessage(), $e->getTraceAsString());
throw new Exception("Could not validate payment.")
die();
}
不幸的是,当我测试此WorldPay处理付款成功但订单未完成其余代码。我检查了我的日志文件,但无法看到任何异常或错误。
从这里采取的最佳方法是什么?我该如何处理这个问题呢?
答案 0 :(得分:0)
以下是我如何解决这个问题,以防万一遇到类似的问题并在将来偶然发现:
当我检查$ _POST的内容时,我意识到它正在接收“Y \ n”而不是简单的“Y”,这是它所期待的。这是我用
替换代码的内容if (strpos($_POST['transStatus'], 'Y') !== FALSE) { /* Order is verified */ } else { /* Order is not verified */ }
尽可能地,现在代码检查在响应中的任何位置是否找到“Y”。这是有效的,因为worldpay只会发送三种可能的响应:'Y','N','C'。