2

SoapClient に問題があります。サービスを承認する必要がありますが、生成された XML はサーバーが期待するものとは異なります。

私の認証コード:

$options = array( 
  'soap_version' => SOAP_1_1, 
  'exceptions' => true, 
  'trace' => 1, 
  'cache_wsdl' => WSDL_CACHE_NONE,
  'uri' => 'http://tempuri.org/'
);

$client = new SoapClient("http://serviceurl/basic.asmx?wsdl", $options);
$client -> Authorize(
    new SoapParam('testdomain', "domainName"),
    new SoapParam('testuser', "user"),
    new SoapParam('testpassword', "password")
);

サービスを承認するには、次のような XML が必要です。

POST /service/basic.asmx HTTP/1.1
Host: testcloud.testhost.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/Authorize"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
    <Authorize xmlns="http://tempuri.org/">
        <domainName>string</domainName>
        <user>string</user>
        <password>string</password>
    </Authorize>
</soap:Body>
</soap:Envelope>

それを達成する方法は?SoapVar、SoapHeaders を使用してさまざまな方法を試しましたが、うまくいきませんでした。

4

1 に答える 1

1

以下の例のようなオブジェクトを使用して問題を解決します。

$client = new SoapClient("http://serviceurl/basic.asmx?wsdl", $options);

$object = new stdClass;
$object->domainName = 'testdomain';
$object->user       = 'testuser';
$object->password   = 'testpassword';

$client->Authorize($object);

それは私にとって完璧に機能します。XML 出力は期待どおりです。

于 2013-06-12T16:08:48.057 に答える