gpt4 book ai didi

php - 如何使用 php Soap 库向 SoapHeader 节点添加属性

转载 作者:行者123 更新时间:2023-12-04 16:57:54 25 4
gpt4 key购买 nike

如何使用 php 的 Soap 库将属性添加到 Soap header 中的节点上?

尝试了所有可用的示例(包括 StackOverflow 和 php.net(示例、评论等)。

$a = ['_'=> 'bar', 'id' => 1, 'val' => 'foo'];
$x = new SoapVar($a,SOAP_ENC_OBJECT);
$h = new SoapHeader('http://www.w3.org/2003/05/soap-envelope','FFS', $x);

这导致:
    <env:FFS>
<_>bar</_>
<id>1</id>
<val>foo</val>
</env:FFS>

附加:属性应该是命名空间的。将命名空间节点添加到没有属性的正文和/或标题中不是问题。向节点添加属性是一个问题。

我需要在最后得到的结果节点应该看起来像
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:nsx="http://example.com">
<env:Header>
<node nsx:foo="bar">
<nsx:baz>bam</nsx:baz>
</node>
</env:Header>
<env:Body>
[ snip ]
</env:Body>
</env:Envelope>

注意 :由于到目前为止我发现的所有示例/技巧都建议手动构建节点或使用 RAW XML,因此我必须强调以下几点:
  • 我不想使用 XSD_ANYXML,
  • 我不想使用 SimpleXML 和/或 DOMElement 来创建节点。
  • 我将接受对其他 SOAP 库的建议,这些建议使我能够轻松构建调用。
  • 最佳答案

    在 WSDL 模式下找到了一种方法:

    class FromSystemId {
    protected $_ = "Bla bla bla";
    protected $ID = "999";
    }

    class Auth {
    /**
    * @var FromSystemId
    */
    protected $FromSystemId;

    /**
    * @var string
    */
    protected $UserName;

    /**
    * @var string
    */
    protected $Password;

    /**
    * Auth constructor.
    * @param FromSystemId $FromSystemId
    * @param string $UserName
    * @param string $Password
    */
    public function __construct(FromSystemId $FromSystemId, $UserName, $Password)
    {
    $this->FromSystemId = $FromSystemId;
    $this->UserName = $UserName;
    $this->Password = $Password;
    }
    }

    try {

    $soap = new SoapClient("some.wsdl", [
    "location" => "some soap api url",
    "soap_version" => SOAP_1_1,
    "trace" => true,
    "cache_wsdl" => WSDL_CACHE_NONE,
    "classmap" => [
    "Auth" => "Auth",
    "FromSystemId" => "FromSystemId",
    ]
    ]);


    $auth = new Auth(new FromSystemId(), "user", "password");
    $soap->__setSoapHeaders(new SoapHeader("ns", "Auth", $auth));

    结果将是:
    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:ns1="aa"
    xmlns:ns2="bb">
    <SOAP-ENV:Header>
    <ns2:Auth xsi:type="ns1:Auth">
    <ns1:FromSystemId ID="999">Bla bla bla</ns1:FromSystemId>
    <ns1:UserName>user</ns1:UserName>
    <ns1:Password>password</ns1:Password>
    </ns2:Auth>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
    <ns1:GetCountriesRQ/>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

    关于php - 如何使用 php Soap 库向 SoapHeader 节点添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23494119/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com