尝试在Magento中使用Cybersource模块时发生SOAP错误


SOAP Error when trying to use the Cybersource module within Magento

我试图找到一个更具体的答案,但找不到任何关于这个错误的帮助。这可能只是因为我不熟悉Magento或cybersource模块,或两者兼而有之,但无论哪种方式,我都无法理解这条消息试图告诉我什么。

这是一个例外,不仅会在调试时显示,而且如果我捕获了开发机器上的所有SMTP通信,它会显示在失败时收到的电子邮件中。

Exception: Strict Notice: Declaration of Mage_Cybersource_Model_Api_ExtendedSoapClient::__doRequest() 
should be compatible with that of SoapClient::__doRequest()  in
C:'code'app'code'local'Mage'Cybersource'Model'Api'ExtendedSoapClient.php on line 75 
in C:'code'app'code'core'Mage'Core'functions.php on line 245

当这种情况发生时,我正在做的是尝试提交订单。我已经将商品添加到购物车中,登录,输入运输数据并查看订单,当我点击提交订单时,它会阻塞一段时间并给我这个消息。当我调试代码时(这需要永远),我终于到达了cybersource模块试图通过SOAP系统进行授权的地步,然后它抛出了这个错误。

它错误的确切位置是围绕这种方法

protected function getSoapApi($options = array())
{
    $wsdl = $this->getConfigData('test') ? self::WSDL_URL_TEST  : self::WSDL_URL_LIVE;
    return new Mage_Cybersource_Model_Api_ExtendedSoapClient($wsdl, $options);
}

任何想法都将非常有助于寻找什么,甚至这条信息的含义。此外,我在PHP 5.3.6中安装并启用了SOAP,该PHP 5.3.6运行在带有apache 2.2的windows环境中。

多亏了Joe,我做了一些挖掘,发现Cybersource编写的模块可以与PHP.2.1一起使用,在那个版本中,SOAP客户端与PHP 5.3不同。__doRequest方法添加了一个导致不一致的项。所以我将ExtendedSoapClient.php文件中的代码从来自

public function __doRequest($request, $location, $action, $version)

public function __doRequest($request, $location, $action, $version, $oneWay = 0)

这似乎纠正了这个错误。感谢乔对这个错误的帮助。

这实际上是一个关于SoapClient子类化的PHP错误。基本上,当你有这样的东西时,就会发生这种情况:

class Foo {
    public function doSomething() {
      // ...
    }
}
class Bar extends Foo {
    public function doSomething($totallyUnreasonableParameter) {
      // ...
    }
}

您的问题几乎可以肯定是服务器上安装的SOAP版本的问题。我没有特别看到这一点,但它可能与PHP版本(5.3.6)有关,我不知道它是一个受支持的版本。

希望能有所帮助!

谢谢,Joe