您如何正确验证worldpay的回调响应

时间:2014-03-06 16:03:15

标签: php callback e-commerce response 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@address.com", $e->getMessage(), $e->getTraceAsString());
        throw new Exception("Could not validate payment.")
        die();
    }

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

从这里采取的最佳方法是什么?我该如何处理这个问题呢?

1 个答案:

答案 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'。