php 如何从调用中删除SOAP命名空间

xpcnnkqh  于 2022-12-02  发布在  PHP
关注(0)|答案(3)|浏览(165)

我正在尝试使用PHP SOAP连接到WSDL Web服务。现在我需要从发送的XML中删除SOAP元素。现在我得到的是以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
               xmlns:ns1="http://service.com">
<SOAP-ENV:Body>
    <ns1:Calculate>
        //Content
    </ns1:Calculate>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我想要的是以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<ns1:Calculate xmlns:ns1="http://service.com">
    //Content
</ns1:Calculate>

有什么方法可以完成这个任务吗?SOAP是我需要发送这样的请求的方法吗?

5q4ezhmt

5q4ezhmt1#

SOAP是一个协议,如果你想要SOAP请求,客户端和服务器端都必须根据这个协议接受和发送请求。只需检查以下设置:

$client = new SoapClient("some.wsdl", array('soap_version'   => SOAP_1_2));

服务器可能使用1_2或1_1版本。您应该与Web服务提供商联系以获取有关Web服务实现的文档。

tp5buhyn

tp5buhyn2#

用自定义的__doRequest重写SoapClient类。新方法从XML中删除命名空间引用,然后调用父级的__doRequest,用修改后的XML完成请求。这是一个简单但有效的解决方案。

class MySoapClient extends SoapClient
{
        public function __doRequest($request, $location, $action, $version, $one_way=0)
        {
             $request = str_replace('ns1:', '', $request);
             parent::__doRequest($request, $location, $action, $version, $one_way);
        }
}

# Invoke derived class instead of base class SoapClient
$client = new MySoapClient($wsdl, $options);
wfauudbj

wfauudbj3#

如果你想发出一个SOAP请求,这些标签是必需的。你的对面真的是SOAP服务器在试图发出请求吗?

相关问题