2017-11-03 3 views
2

Navision Webサービスにコマンドを送信しようとしています。できるだけ全体の接続を理解するために、最初に単純なcURLコマンドを使用したいと考えています。Navision SOAPサービスへのコマンドの送信

私は簡単なGETリクエストをURL https://IP:PORT/.../Codeunit/Webservicesで試してみました。そこには、すべてのコマンドを含む非常に長いXML構造があります。リストの一部は簡単なエコーコマンドで、ここで文字列を送信して戻すことができます。

これはそれのdiscriptionです:

<schema elementFormDefault="qualified" targetNamespace="urn:microsoft-dynamics-schemas/codeunit/Webservices" xmlns="http://www.w3.org/2001/XMLSchema"> 
    <element name="SoundCheck"> 
    <complexType> 
     <sequence> 
     <element minOccurs="1" maxOccurs="1" name="p_Text" type="string"/> 
     </sequence> 
    </complexType> 
    </element> 
    <element name="SoundCheck_Result"> 
    <complexType> 
     <sequence> 
     <element minOccurs="1" maxOccurs="1" name="return_value" type="string"/> 
     </sequence> 
    </complexType> 
    </element> 
... 

今私の問題は、私は、コマンドを送信する方法がわからないということです。

私は彼らのapproches何も作品を試してみました:私はこれらの二つの特別なSOAPライブラリに見えました。私のコードスニペットは、次のようになります。

$headers = [ 
    'Method: GET', 
    'Connection: Keep-Alive', 
    'User-Agent: PHP-SOAP-CURL', 
    'Content-Type: text/xml; charset=utf-8', 
    'SOAPAction: "' . $action . '"', 
]; 

$ch = curl_init($url); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 

$response = curl_exec($ch); 

return $response; 

私は$actionの様々な値を送信しようとしたが、私はいつもこのエラーが出る:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault> 
    <faultcode xmlns:a="urn:microsoft-dynamics-schemas/error">a:System.ArgumentNullParametername: input</faultstring> 
    <detail><string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Der Wert darf nicht NULL sein.\nParametername: input</string></detail> 
</s:Fault></s:Body></s:Envelope> 

は、たぶん私はNavisionのと全体のSOAPプロセスを誤解するだけでなく、Iウェブ上に本当に良いチュートリアルは見つかりませんでした。私は間違って何をしていますか?手伝ってくれてありがとう!

答えて

0

実際のWSDLからPHPジェネレータを試してみると、SOAP Webサービスの消費が楽になるはずです。どのように動作するのか理解したいのは素晴らしいことですが、適切なクラスを使用することから始めてください。

まず、curlを直接使用しないでください。ネイティブPHP SoapClientクラスを使用する必要があります。これはWSDL urlを使用する開始点であり、SoapClientインスタンスの__getTypesと__getFunctionsを呼び出して、SOAP Webサービスが期待していることを知ります。

次に、PackageGeneratorプロジェクトなどのWSDLからPHPジェネレータを試してください。基本的には、WSDLで宣言された「型」と「関数」を読み込み、それらを基本クラスとメソッドにラップして、簡単に要求を送信して応答を受け取ることができます。

関連する問題