0

我在验证电子商务网站的 WorldPay 回调时遇到问题。

根据文档, 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 成功处理付款但我的其余代码未完成订单时。我检查了我的日志文件,但看不到任何异常或错误。

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

4

1 回答 1

0

以下是我解决此问题的方法,以防将来有人遇到类似问题并偶然发现:

当我检查 $_POST 的内容时,我意识到它正在接收“Y\n”而不是它所期望的简单的“Y”。这是我用代码替换的内容

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

您可以,现在代码检查是否在响应中的任何位置找到“Y”。之所以可行,是因为 worldpay 将发送的响应只有三个:“Y”、“N”、“C”。

于 2014-03-10T11:32:08.290 回答