2016-07-13 21 views
0

SoapUIのようないくつかのツールでSOAP APIの応答がうまくいきました。 私はdeltek APIに取り組んでいます。続きPHPでSOAPクライアントからSOAPクライアントを呼び出す方法

は私が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> 

に使用していますが、私はPHPでSOAPクライアントを介してAPIを呼び出していたときにコード形式です。私はこのエラーを取得しています:

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

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

提案してください?どこで私は間違っているのですか?

答えて

0

要求を注意深く見れば、要素del:ConnInfoXMLに文字列が含まれていることがわかります。

それを動作させるために、あなたはあまりにも文字列としてConnInfoXMLを設定する必要があります。

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

プログラムで文字列を作成し、結果のXMLが有効であるので、値をエスケープしてください。

関連する問題