0

我正在尝试在 php 中生成以下 XML 块以将其发送到 SMG 肥皂服务器。我怎样才能做到这一点?

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dom="http://schemas.symantec.com/jaxws/domainProvisioningService">
   <soapenv:Header/>
   <soapenv:Body>
      <dom:AddDomains>
         <dom:domains>
            <domain name="domain1.com" local="true">               
            </domain>
             <domain name="domain2.com" local="true">               
            </domain>
         </dom:domains>
      </dom:AddDomains>
   </soapenv:Body>
</soapenv:Envelope>
4

2 回答 2

0

我执行了以下 php 块并创建了所需的输出:

$xmldom = new DOMDocument(); 
$domainsAttr = $xmldom->createElement( "domains" );
$domainAttr = $xmldom->createElement( "domain" );
$domainAttr->setAttribute( "name", "test.com" );
$domainAttr->setAttribute( "local", "true" );
$domainsAttr->appendChild( $domainAttr );   
$xmldom->appendChild( $domainsAttr );

这是所需的输出:

<domains><domain name="test.com" local="true"/></domains>

我省略了要在此处发布的剩余代码,但是当我执行代码时,出现以下错误:

Cannot find dispatch method for {}domains
于 2021-02-20T06:38:14.903 回答
0

所以#1我讨厌使用肥皂。也就是说,我建议使用 SoapClient ( https://www.php.net/manual/en/book.soap.php )。

您首先实例化一个客户端,然后像这样传入 wsdl:

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

创建soap服务的人会告诉你wsdl在哪里。

现在您可以执行以下操作:

$result = $client->AddDomains(
    array(
        array('name'=>'domain1.com', 'local'=>'true'), 
        array('name'=>'domain2.com', 'local'=>'true')
    )
);

但这可能行不通,因为 WSDL 可能需要一些特定的古怪格式或其他东西。您需要检查响应不是肥皂错误

if (is_soap_fault($result)) {
    echo "REQUEST:\n" . $SOAP->__getLastRequest() . "\n";
    echo "SOAP Fault: (faultcode: {$result->faultcode}, faultstring: {$result->faultstring}";
}

这应该有希望让你走上正轨。

于 2021-02-19T21:39:09.717 回答