2017-11-03 7 views
2

Navision 웹 서비스에 명령을 보내려고합니다. 최대한 전체 연결을 이해하려면 처음에는 간단한 cURL 명령을 사용하고 싶습니다.Navision SOAP 서비스에 명령 보내기

나는 URL https://IP:PORT/.../Codeunit/Webservices에 간단한 GET Requests를 실험했다. 거기에는 모든 명령을 가진 매우 긴 XML 구조가 있습니다. 목록의 일부는 간단한 echo 명령으로 문자열을 보내고 되돌릴 수 있습니다.

<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> 
... 

지금 내 문제는 내가 명령을 보내는 방법을 모르겠입니다 :

그것의 discription입니다. 나는이 두 가지 특별한 SOAP 라이브러리에서 보았다 :

  • https://github.com/jamesiarmes/php-ntlm
  • https://github.com/rileydutton/Exchange-Web-Services-for-PHP 나는 그들의 approches을 시도했지만 아무것도 작동하지 않습니다.

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

    어쩌면 내가 내 비전과 전체 SOAP 과정을 오해을뿐만 아니라, I 웹에서 정말 좋은 자습서를 찾지 못했습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 도와 주셔서 감사합니다!

답변

0

실제로 SOAP Web Service의 사용을 쉽게하기 때문에 실제 WSDL to PHP 생성기를 사용해보십시오. 그것이 어떻게 작동하는지 이해하고 싶으면 좋겠지 만 올바른 클래스를 사용하여 시작해야합니다.

먼저 curl을 직접 사용해서는 안되기 때문에 기본 PHP SoapClient 클래스를 사용해야합니다. 이것은 WSDL url을 사용하는 시작점이며, SoapClient 인스턴스의 __getTypes 및 __getFunctions를 호출하여 SOAP 웹 서비스에서 예상되는 내용을 확인합니다.

그런 다음 PackageGenerator 프로젝트와 같은 WSDL에서 PHP 생성기를 사용해보십시오. 기본적으로 WSDL에 의해 선언 된 "유형"과 "함수"를로드하고 기본 클래스와 메소드로 래핑하여 요청을 보내고 응답을받는 데 쉽게 사용할 수 있습니다.