web services - PHP SoapClient以wsdl模式重新映射SoapAction


web services - PHP SoapClient Remap SoapAction in WSDL-mode?

我有一个问题,我试图使用标准的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存在问题。

我的问题是,我可以重新映射soap动作,而在PHP SoapClient wsdl模式?

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

  1. 获取WSDL url
  2. 保存为本地文件
  3. 并改变这些方法的顺序(那些坏的应该是第一个)

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