尝试在Magento中使用Cyber​​source模块时出现SOAP错误

时间:2011-06-02 19:15:24

标签: php soap 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
发生这种情况时我正在尝试提交订单。我已将商品添加到购物车,登录,输入运输数据并查看订单,当我点击提交订单时,它会暂停一段时间并给我这条消息。当我通过代码调试(需要FOREVER)时,我终于到了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);
}

任何想法对于查找内容甚至此消息的含义都非常有帮助。另外,我在使用apache 2.2的Windows环境中运行的PHP 5.3.6中安装并启用了SOAP。

2 个答案:

答案 0 :(得分:7)

感谢Joe,我做了一些挖掘,发现Cyber​​source编写了模块以使用PHP5.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)

这似乎解决了这个错误。感谢Joe帮助您解决此错误。

答案 1 :(得分:4)

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

class Foo {
    public function doSomething() {
      // ...
    }
}

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

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

希望有所帮助!

谢谢, 乔