веб-сервисы — Как вызвать SOAP API через клиент SOAP в Stack Overflow

Я успешно получаю ответ SOAP API от некоторых инструментов, таких как SoapUI.
Я работаю над API Deltek.

Ниже приведен формат кода, который я использую в SoapUI

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:del="http://tempuri.org/Deltek.Vision.WebServiceAPI.Server/DeltekVisionOpenAPIWebService">
<soap:Header/>
<soap:Body>
<del:GetSchema>
<!--Optional:-->
<del:ConnInfoXML><![CDATA[<VisionConnInfo>
<databaseDescription>Example_Test (TEST_001)</databaseDescription>
<userName>test</userName>
<userPassword>test123</userPassword>
<integratedSecurity>Y</integratedSecurity>
</VisionConnInfo>]]> </del:ConnInfoXML>

<!--Optional:-->
<del:InfoCenter><![CDATA[User]]></del:InfoCenter>
</del:GetSchema>
</soap:Body>
</soap:Envelope>

Но когда я вызываю API через клиент SOAP в php. Я получаю эту ошибку:

stdClass Object
(
[GetSchemaResult] => ErrLoginValInvalid login. Please change the username or password and try again.Value cannot be null.
Parameter name: sGetSchema.validateVisionLogin.VisionWSUtil.ValidateVisionLogin
)

Ниже мой PHP-код:

$apiURL = 'http://example.com/Vision/VisionWS.asmx?wsdl';
$client = new SoapClient($apiURL, array('trace' => 1, 'exceptions' => 1));

$conninfo = array(
'ConnInfoXML' => array(
'VisionConnInfo' => array(
"databaseDescription"  => 'Example_Test (TEST_001)',
"userName" => "test",
"userPassword" => 'test123',
"integratedSecurity" => "Y")
)
);

$userinfo  = array('InfoCenter' => 'User');

try {

$result = $client->GetSchema($conninfo, $userinfo);
} catch (SoapFault $fault) {
print_r($fault);
}

echo '<pre>';
print_r($result);

Пожалуйста, предложите? где я ошибаюсь?

0

Решение

Если вы внимательно посмотрите на запрос, вы можете увидеть, что элемент del:ConnInfoXML содержит строку

Чтобы это работало, вы должны установить ConnInfoXML как строка тоже:

'ConnInfoXML' => '<VisionConnInfo>...</VisionConnInfo>';

При программном создании строки обязательно экранируйте значения, чтобы результирующий XML был действительным.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]