2016-07-13 28 views
0

Ich bekomme erfolgreich Antwort der SOAP-API durch die einige Tools wie SoapUI. Ich arbeite an der Deltek API.So rufen Sie SOAP-API über SOAP-Client in PHP

Es folgt das Code-Format, die ich in 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> 

bin mit aber wenn ich die API über das SOAP-Client in PHP nenne. Ich erhalte diese Fehlermeldung:

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

Es folgt mein PHPcode:

$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); 

Bitte vorschlagen? Wo mache ich Fehler?

Antwort

0

Wenn Sie sich die Anfrage genau ansehen, können Sie sehen, dass das Element del:ConnInfoXML eine Zeichenfolge enthält.

, damit es funktioniert, haben Sie auch die ConnInfoXML als String zu setzen:

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

Wenn die Zeichenfolge programmatisch erstellen, müssen Sie die Werte zu entkommen, so dass die resultierende XML gültig ist.