PHP SoapClient 在 WSDL 模式下重新映射 SoapAction?

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 存在问题。

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

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

  1. 学习 WSDL url
  2. 保存为本地文件
  3. 并更改那里的方法顺序(那些不好的应该是第一个)

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