我在尝试使用标准PHP SoapClient访问SoapServer上的方法时遇到问题。问题是SoapServer上的方法被两次列出,并且名称相同,但是操作不同。

例如:SOAP UI显示两次列出的GetStockQuote和GetStockQuote,但是第二个GetStockQuote实际上将调用GetStockQuoteV2。

但是我的PHP SoapClient,如果我调用$ client-> GetStockQuote,它将自动调用第一个。从我的研究中,我不得不做这样的事情。

$client->__soapCall('GetStockQuote', array($request), array('soapaction'=>'GetStockQuoteV2'));

但是当我处于wsdl模式时,它仍然调用GetStockQuote而不是GetStockQuoteV2。

我的结论是,我必须在非wsdl模式下运行并应对这种烦恼。在非wsdl模式下时,上面的__soapCall似乎在调用正确的方法,但是由于我在非wsdl模式下,因此我认为构建服务器所需的适当AuthHeader会出现问题。

我的问题是,我可以在PHP SoapClient wsdl-mode中重新映射soap操作吗?

最佳答案

这是一个丑陋的解决方法,但是正如我们在这里看到的那样,您在另一端有丑陋的Soap服务。

  • 以WSDL网址
  • 将其另存为本地文件
  • 并更改方法顺序(那些不好的应该是1st)

  • 另一个解决方案。您可以扩展SoapClient并在方法A内部实际调用远程方法B。

    10-04 20:28