私はPHPでSOAPリクエストを作成しようとしています。私の要求は、SOAPサーバのドキュメントに記載されているリクエストと一致しているようですが(少し違いますが)、ヘッダーが含まれていないかのように認証エラーが発生しています。SOAP要求が機能しないのはなぜですか?
ドキュメントの要求サンプル
<?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:Header>
<AuthHeader xmlns="http://novosolutions.com/">
<SessionId>string</SessionId>
</AuthHeader>
</soap:Header>
<soap:Body>
<ViewTicket xmlns="http://novosolutions.com/">
<Id>int</Id>
</ViewTicket>
</soap:Body>
</soap:Envelope>
要求私のPHPコードの出力:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://novosolutions.com/">
<SOAP-ENV:Header>
<ns1:AuthHeader>
<SessionId>623</SessionId>
</ns1:AuthHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:ViewTicket>
<Id>1355110</Id>
</ns1:ViewTicket>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
私のPHPコードはかなり単純です。私は何か間違っているのですか?
$url = URL_BASE . URL_TICKET . '?WSDL';
$soapStruct = new SoapVar(array('SessionId' => SESSION_ID), SOAP_ENC_OBJECT);
$header = new SoapHeader('http://novosolutions.com/', 'AuthHeader', $soapStruct, false);
try {
$client = new SoapClient($url, array('trace' => 1));
}
catch (SoapFault $exception) {
echo 'Exception='.$exception;
}
$client->__setSoapHeaders(array($header));
var_dump($client);
$soapData = new SoapVar(array('Id' => 1355110), SOAP_ENC_OBJECT);
$result = $client->__soapCall('ViewTicket', array('parameters' => $soapData));
var_dump($result);
echo $client->__getLastRequest();
EDIT:カールとの要求をテストすることにより 、私はPHPののSoapClientは、名前空間の変数を使用しているという事実にそれを絞り込むました。 SoapServerでは受け入れられませんが、これで、SoapClientが変数を使用しないようにする方法を理解する必要があります。
解決策はまだ見つかりませんか?私は正確な問題を持っています。 – slhsen
はい - セッションIDに間違った#が含まれていました。セッションIDはレスポンスヘッダではなく、レスポンスボディにあります。それを取得するには、$ responseHeaders = array();を使用します。$ result = $ client - > __ soapCall( 'Login'、array( 'parameters' => $ bodyVar)、null、null、$ responseHeaders); $ sessionid = $ responseHeaders ['AuthHeader'] - > SessionId; –