Webservice via php nutzen -

Bild Microsoft Dynamics NAV 2013 (aka "NAV 7")

Webservice via php nutzen -

Beitragvon DgaAtMakro » 4. September 2018 11:18

Hallo Community,

ich möchte den Webservice von Navision nutzen, um einen Webshop anzubinden. Trotz vieler Suchstunden im Internet komme ich leider nicht weiter... :-(

Den Webservice im Navision habe ich aktiviert (wie in den Internetbeispielen Page,21,Kunde usw.). Der SOAP-Webservice lässt sich auch im Browser öffnen und gibt eine entsprechende XML-Struktur zurück, beim OData kommt es lustigerweise als Newsfeed (ohne Daten, aber mit der richtigen Anzahl der Kunden).

Wenn ich versuche den SOAP-Webservice zu benutzen...

Code: Alles auswählen
$context = stream_context_create([
 'ssl' => [
 // set some SSL/TLS specific options
 'verify_peer' => false,
 'verify_peer_name' => false,
 'allow_self_signed' => true
 //'crypto_method' => STREAM_CRYPTO_METHOD_TLS_CLIENT
 ]
]);

$options = array(
    'encoding' => 'UTF-8',
    'verifypeer' => false,
    'verifyhost' => false,
    'soap_version' => SOAP_1_2,
    'trace' => 1,
    'exceptions' => 1,
    'connection_timeout' => 180,
//                'cache_wsdl'=>WSDL_CACHE_NONE,
 "login" => $login,
 "password" => $password,
 "features" => SOAP_SINGLE_ELEMENT_ARRAYS,
 "stream_context" => $context);

$page = new SoapClient($baseUrl, $options);


...kommt beim AusfĂĽhren der letzten Zeile folgende Fehlermeldung:

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'xxx' : failed to load external entity "xxx" in C:\Installation\xampp\htdocs\phptest\index.php:76 Stack trace: #0 C:\Installation\xampp\htdocs\phptest\index.php(76): SoapClient->SoapClient('http://....', Array) #1 {main} thrown in C:\Installation\xampp\htdocs\phptest\index.php on line 76


Das Internet reagiert mit wüsten Anpassungen der $context- und $options-Variablen (wie man oben sieht), was leider nichts hilft. $baseUrl stimmt, direkt vom Navision übernommen und im Browser getestet. Interessanterweise kann ich sowohl bei $baseUrl, $login und $password reinschreiben, was ich will, die Fehlermeldung ändert sich nicht > d.h. irgendetwas anderes ist faul, nur was?

Mit OData-Webservice und Curl habe ich es auch probiert...

Code: Alles auswählen
$ch = curl_init();
       
curl_setopt($ch, CURLOPT_URL, $baseUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   
curl_setopt($ch, CURLOPT_USERPWD, 'xxx');   
curl_setopt($ch, CURLOPT_HTTPHEADER, [
//        'Method: GET',
//      'User-Agent: PHP-SOAP-CURL',
//        'Content-Type: text/xml; charset=utf-8',
//      'SOAPAction: Read',
        'Connection: Keep-Alive',   
        'Accept: application/json',         
        'Content-Type: application/json; charset=utf-8',   
        "Accept:*"                       
]);   


$res = curl_exec($ch);

if( $res === false ) {
   echo 'Curl-Fehler (OData-Abfrage): ' . curl_error($ch).'<br />';
}
else {
   echo $res;
   $response = json_decode($res);
   echo json_encode($response, JSON_PRETTY_PRINT);
}
/* $response = json_decode(curl_exec($ch), TRUE);
echo json_encode($response, JSON_PRETTY_PRINT); */

// Close handle
curl_close($ch);


... hier kommt zwar kein Fehler zurĂĽck, aber immer NULL.

Seht Ihr vielleicht auf den ersten Blick etwas oder habt einen Diagnose-Tipp oder Link, der mir weiterhilft?

Viele GrĂĽĂźe,
Dga

Navision: 2013 R2
Php 7.1.11 (Xampp)
DgaAtMakro
 
Beiträge: 5
Registriert: 4. September 2018 10:24
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2013 R2

Re: Webservice via php nutzen -

Beitragvon MarkusWeiland » 4. September 2018 13:08

Hast du mal versucht mittels https://www.soapui.org auf den Webservice zuzugreifen?
Welche Authentifizierung nutzt du denn am ServiceTier?
MarkusWeiland
 
Beiträge: 205
Registriert: 18. Januar 2017 10:01
Realer Name: Markus Weiland
Arbeitsort: SaarbrĂĽcken
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: Webservice via php nutzen -

Beitragvon DgaAtMakro » 4. September 2018 13:44

SoapUI hat das gemeldet:

Error loading WDSL
There was something wrong with the WDSL you are trying to import
Error loading [http://xxx]: org.apache.xmlbeans.XmlException: org.apache.xmlbeans.XmlException: error: Unexpected end of file after nul


Wir benutzen unsere Domänenanmeldung, d.h. Windows-Authentifizierung...

Ich habe grade in der Benutzerkarte noch den Punkt Webdienstzugriff gefunden und dort einen WebdienstzugriffsschlĂĽssel erstellt... Muss ich so etwas vielleicht noch benutzen?
DgaAtMakro
 
Beiträge: 5
Registriert: 4. September 2018 10:24
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2013 R2

Re: Webservice via php nutzen -

Beitragvon DgaAtMakro » 4. September 2018 13:58

Bei einem Rest-Projekt im SoapIU kommt folgende Fehlermeldung:

HTTP/1.1 401 Unauthorized
Content-Length: 0
Server: Microsoft-HTTPAPI/2.0
WWW-Authenticate: NTLM
Date: Tue, 04 Sep 2018 11:55:01 GMT


... habe noch nicht herausbekommen, in welcher Form ich die Anmeldedaten in den Request einbauen muss...

Edit: doch, habs herausgefunden, jetzt habe ich via OData/REST im SoapUI Zugriff...

Edit2: habe jetzt auch via SOAP im SoapUI Zugriff > beide Male musste ich unseren Domänennamen (die Kurzvariante, da blicke ich nicht durch) noch hinzufügen...
DgaAtMakro
 
Beiträge: 5
Registriert: 4. September 2018 10:24
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2013 R2

Re: Webservice via php nutzen -

Beitragvon DgaAtMakro » 4. September 2018 14:32

Ok, kurze Zusammenfassung:

das Verbinden mittels SoapUI hat nun funktioniert > die Schnittstelle seitens Navision ist erstmal ok...

Wie kann ich das nun im php verwerten?

Kann/Muss ich da irgendwo die Domäne angeben? Ich habe es vor dem Benutzernamen versucht mit allen Slash-/Backslash-Kombinationen), hat nicht funktioniert - Fehler identisch wie im ersten Post.
Sehe ich irgendwo die Zugriffsparameter, mit denen das SoapUI die Verbindung korrekt hergestellt hat?
DgaAtMakro
 
Beiträge: 5
Registriert: 4. September 2018 10:24
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2013 R2

Re: Webservice via php nutzen -

Beitragvon MarkusWeiland » 4. September 2018 17:39

Wenn du von außerhalb deiner Domäne zugreifen willst musst du dir ein ServiceTier aufsetzen, dass NavUserPassword unterstützt.
Hier kannst du dich dann per BasicAuth authentifizieren. Du brauchst hierfür aber auch später einen Benutzer mit Benutzernamen / Kennwort.
Die Windowsbenutzer kannst du nicht nutzen.
MarkusWeiland
 
Beiträge: 205
Registriert: 18. Januar 2017 10:01
Realer Name: Markus Weiland
Arbeitsort: SaarbrĂĽcken
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: Webservice via php nutzen -

Beitragvon DgaAtMakro » 5. September 2018 09:20

Hallo zusammen,

@MarkusWeiland: Nein, ich will nicht von außerhalb der Domäne zugreifen, die Verbindung zum Webshop funktioniert nach außen... und vielen Dank für Deine schnellen Antworten.

Ich habe es soeben mit OData und NTLM hinbekommen:

Code: Alles auswählen
$baseUrl = "xxx"; // Pfad aus Navision Web Service
$usrpwd = "yyy"; // "user:pwd" > Domäne ist nicht mehr notwendig

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $baseUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM);
curl_setopt($ch, CURLOPT_USERPWD, $usrpwd);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Connection: Keep-Alive',   
        'Accept: application/json',     
        'Content-Type: application/json; charset=utf-8'
]);   

$res = curl_exec($ch);

if ( curl_errno($ch) ) {
   print 'Curl-Fehler (OData-Abfrage):' . curl_error($ch);
}
else {
   $response = json_decode($res);
   curl_close($ch);
   
   echo '<br /><br /><pre>';
   print_r($response);
   echo '</pre><br /><br />';
   
}


Sehr wichtig war die Option: curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_NTLM); da das NTLM im Navision aktiviert war (hatte ich gestern testweise aktiviert) - ich weiĂź jetzt nicht ob es ohne auch geht...
DgaAtMakro
 
Beiträge: 5
Registriert: 4. September 2018 10:24
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2013 R2


ZurĂĽck zu NAV 2013

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast