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 に答える