首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP更改SOAP NameSpace

PHP更改SOAP NameSpace
EN

Stack Overflow用户
提问于 2011-05-06 11:32:25
回答 1查看 2.9K关注 0票数 1

我正在尝试更改名称空间,因为它需要与它试图调用的.NET web服务名称空间相匹配,但无法做到。如何更改名称空间?

代码语言:javascript
复制
class MSWCF extends SoapClient
{
    function __doRequest($request, $location, $action, $version, $one_way = 0) 
    {
        /*
         * $request is a XML string representation of the SOAP request
         * that can e.g. be loaded into a DomDocument to make it modifiable.
         */

        $domRequest = new DOMDocument();
        $domRequest->loadXML($request);

        // modify XML using the DOM API, e.g. get the <s:Header>-tag 
        // and add your custom headers
        $xp = new DOMXPath($domRequest);
        $xp->registerNamespace('SOAP-ENV', 'http://schemas.xmlsoap.org/soap/envelope/');
        // fails if no <s:Header> is found - error checking needed
        $envelope = $xp->query('/SOAP-ENV:Envelope')->item(0);

        // now add your custom header
        $header = $domRequest->createElement('SOAP-ENV:header');
        $security = $domRequest->createElement('o:Security');
        $usernameToken = $domRequest->createElement('o:UsernameToken');
        $usernameTokenuid = new DOMAttr('u:Id','uuid-4d9bf7e6-da00-4f72-8383-6037f12a0fb5-5');
        $username = $domRequest->createElement('o:Username','');
        $password = $domRequest->createElement('o:Password','');
        $passwordtype = new DOMAttr('Type','http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText');
        $password->appendChild($passwordtype); 
        $usernameToken->appendChild($username);
        $usernameToken->appendChild($password);
        $usernameToken->appendChild($usernameTokenuid);

    $timestamp = $domRequest->createElement('u:TimeStamp');
    $timestampuid = new DOMAttr('u:Id','_0');

    $interval = new DateInterval("PT5M");
    $dateCreated = new DateTime();
    $dateExpires = new DateTime();
    $dateExpires->add($interval);
    $created = $domRequest->createElement('u:Created', $dateCreated->format(DATE_ISO8601));
    $expires = $domRequest->createElement('u:Expires', $dateExpires->format(DATE_ISO8601));
    $timestamp->appendChild($timestampuid); 
    $timestamp->appendChild($created);  
    $timestamp->appendChild($expires);  

    $security->appendChild($timestamp);
    $security->appendChild($usernameToken);

    $securitymust = new DOMAttr('SOAP-ENV:mustUnderstand','1');
    $securityxml= new DOMAttr('xmlns:o','http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd');
    $security->appendChild($securitymust);
    $security->appendChild($securityxml);

        $header->appendChild($security);
    $envelope->appendChild($header);

        $request = $domRequest->saveXML();

    echo $request;

        return parent::__doRequest($request, $location, $action, $version, $one_way = 0);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2011-05-26 07:37:48

如果您的SOAP消息实际上使用了名称空间,则可以使用SoapVar()来指定特定变量的名称空间。当SoapClient构建消息时,它应该包含名称空间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5906486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档