首页 > 解决方案 > 使用 SoapClient 发出请求时如何向元素添加属性

问题描述

我需要进行 SOAP 调用,请求应该如下所示:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="xxxxxx">
   <soapenv:Header/>
   <soapenv:Body>
      <soap:getOptions>
         <arg0 username="?" password="?">
            <getOptionsBusinessData/>
         </arg0>
      </soap:getOptions>
   </soapenv:Body>
</soapenv:Envelope>

PHP SoapClient 有可能吗?

尝试了很多事情,所有这些都导致了 java nullpoint 异常。现在我正在尝试

    $xml_string = '<getOptions>
    <arg0 username="xxxx" password="xxxx">
    <getOptionsBusinessData/>
    </arg0>
    </getOptions>';

    $client = new \SoapClient('https://example.com?wsdl');

    $args = array(new \SoapVar($xml_string, XSD_ANYXML));
    $res  = $client->__soapCall('getOptions', $args);
    return $res;

得到不同类型的错误SoapFault Cannot find dispatch method for {}getOptions。我被困住了!我该如何解开?

标签: phpsoapsoap-client

解决方案


不要将 xml 字符串作为参数传递。SoapClient 应该为您生成 XML。尝试以下调用:

$client = new \SoapClient('https://example.com?wsdl');
$res = $client->getOptions(array('username' => 'xxx', 'password' => 'xxx'));
return $res;

推荐阅读