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 服务。
- 学习 WSDL url
- 保存为本地文件
- 并更改那里的方法顺序(那些不好的应该是第一个)
另一种解决方案。您可以扩展 SoapClient 并在方法 A 内部实际调用远程方法 B。
我在尝试使用标准 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 服务。
- 学习 WSDL url
- 保存为本地文件
- 并更改那里的方法顺序(那些不好的应该是第一个)
另一种解决方案。您可以扩展 SoapClient 并在方法 A 内部实际调用远程方法 B。