0

我正在尝试使用 PHP 的SOAP 扩展重新创建此 XML 请求,但在执行此操作时遇到了问题:

<?xml version="1.0"?>
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.web.stormpost.skylist.com">
  <soapenv:Header>
    <authInfo xmlns:soap="http://skylist.com/services/SoapRequestProcessor" xsi:type="soap:authentication">
      <!--You may enter the following 2 items in any order-->
      <username xsi:type="xsd:string">****@example.com</username>
      <password xsi:type="xsd:string">*******</password>
    </authInfo>
  </soapenv:Header>
  <soapenv:Body>
    <ser:doImportFromTemplate soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
      <impTempId xsi:type="xsd:int">7</impTempId>
      <data xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="soapenc:string">
Joe|Doe|joe@example.com John|Doe|john@example.com </data>
    </ser:doImportFromTemplate>
  </soapenv:Body>
</soapenv:Envelope>

到目前为止,这是我的测试代码:

// set connection params
$wsdl = 'http://api.stormpost.datranmedia.com/services/SoapRequestProcessor?wsdl';
$namespace = 'https://api.stormpost.datranmedia.com/services/SoapRequestProcessor';
$credentials = (object)array(
    'username' => '****@example.com',
    'password' => '*******'
);
$auth_values = new SoapVar($credentials, SOAP_ENC_OBJECT);
$header =  new SoapHeader($namespace, "authInfo", $auth_values);

// set client, headers, and call function
$client = new SoapClient($wsdl, array('trace' => true));
$client->__setSoapHeaders(array($header));
$client->__soapCall("doImportFromTemplate", array(7, 'Joe|Doe|joe@example.com John|Doe|john@example.com'));

除其他外,它似乎没有正确实现authInfo节点。xsi:type="soap:authentication"我应该如何更改我的代码以输出此 XML?我很难找到好的实现示例。

4

1 回答 1

1

不久前,我自己在 php SOAP 客户端上苦苦挣扎,我并没有完全理解,但这对我有用:

$auth_values = array('username' => '****@example.com', 'password' => '*******');
$header =  new SoapHeader($namespace, "authInfo", $auth_values, false);

// set client, headers, and call function
$client = new SoapClient($wsdl, array('trace' => true));
$client->__setSoapHeaders(array($header));
于 2012-10-12T16:10:42.597 回答