Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SOAP] Usługa SOAP dla php
Forum PHP.pl > Forum > Przedszkole
Mercel
Witam
Mam problem ze skonfigurowaniem DHL Webservice eCASOrder

Mam dokument XML o nazwie test.xml
  1. POST /app/ecas/eCASOrderWS.asmx HTTP/1.1
  2. Content-Type: text/xml; charset=utf-8
  3. Content-Length: length
  4. SOAPAction: "eCASOrderWS/DodajZlecenieWS"
  5.  
  6. <?xml version="1.0" encoding="utf-8"?>
  7. <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  8. <soap:Body>
  9. <DodajZlecenieWS xmlns="eCASOrderWS">
  10. <zlecenie>
  11. <Firma>string</Firma>
  12. <Ulica>string</Ulica>
  13. <Numer>string</Numer>
  14. <KodPocztowy>string</KodPocztowy>
  15. <Miasto>string</Miasto>
  16. <NumerSAP>string</NumerSAP>
  17. <Platnik>string</Platnik>
  18. <FormaPlatnosci>string</FormaPlatnosci>
  19. <DataPrzyjazduKuriera>string</DataPrzyjazduKuriera>
  20. <PrzesylkaGotowaOd>string</PrzesylkaGotowaOd>
  21. <ObiorMozliwyDo>string</ObiorMozliwyDo>
  22. <IloscPrzesylekDo31>int</IloscPrzesylekDo31>
  23. <IloscPrzesylekPow31>int</IloscPrzesylekPow31>
  24. <WagaNajciezszej>string</WagaNajciezszej>
  25. <ImieNazwisko>string</ImieNazwisko>
  26. <Email>string</Email>
  27. <TelefonStacjonarny>string</TelefonStacjonarny>
  28. <TelefonKomorkowy>string</TelefonKomorkowy>
  29. <DodatkoweInstrukcje>string</DodatkoweInstrukcje>
  30. <MiejsceNadania>string</MiejsceNadania>
  31. </zlecenie>
  32. </DodajZlecenieWS>
  33. </soap:Body>
  34. </soap:Envelope>



Muszę go wysłać na http://webapps.dhl.com.pl/app/ecas/eCASOrderWS.asmx, jak napisać taki skrypt w php?

Znalazłem w necie coś takiego, próbowałem pod "/https?:\/\/([^\/]*)(.*)/" podstawić adres dhl jednak nic nie działa:

  1. <?php
  2. ini_set('display_errors', "1");
  3.  
  4. $url= "test.xml";
  5.  
  6. echo "url\n$url\n";
  7.  
  8. preg_match("/https?:\/\/([^\/]*)(.*)/", $url, $matches);
  9. $host=$matches[1];
  10. $request=$matches[2];
  11.  
  12. $mxml=fread(STDIN,65536);
  13. $yt =curl_init();
  14. $header = "POST $request HTTP/1.0\r\n";
  15. $header .= "Host: $host\r\n";
  16. $header .= "Content-Type: text/xml\r\n";
  17. $header .= "Content-Length: ".strlen($mxml)."\r\n";
  18. $header .= "Content-Transfer-Encoding: text\r\n";
  19. $header .= "Connection-Close: close\r\n\r\n";
  20.  
  21. echo "header\n$header\n";
  22.  
  23. $header .= $mxml;
  24.  
  25. curl_setopt($yt, CURLOPT_SSL_VERIFYPEER,0);
  26. curl_setopt($yt, CURLOPT_URL, $url);
  27. curl_setopt($yt, CURLOPT_CUSTOMREQUEST, $header);
  28. curl_setopt($yt, CURLOPT_RETURNTRANSFER, true);
  29.  
  30. $rxml=curl_exec($yt);
  31. echo "sent\n$mxml\n";
  32. echo "received\n$rxml\n";
  33.  
  34. echo curl_error($yt);
  35. ?>


Prosiłbym o wskazówki co robię źle.
vokiel
Chcesz korzystać z SOAP przez cURL? Może lepiej z SOAP?
http://php.net/manual/en/book.soap.php
http://devzone.zend.com/article/689
Mercel
Cytat(vokiel @ 21.08.2010, 21:50:49 ) *
Chcesz korzystać z SOAP przez cURL? Może lepiej z SOAP?
http://php.net/manual/en/book.soap.php
http://devzone.zend.com/article/689



Próbowałem prze SOAP, napisałem coś takiego(opierając się na tym drugim linku oraz podobnym wątku na forum):

  1. <?php
  2. $filename = "xml.xml";
  3.  
  4. $soapclient = new SoapClient (null, array('location' => "http://webapps.dhl.com.pl/app/ecas/eCASOrderWS.asmx",'uri' => "http://webapps.dhl.com.pl/app/ecas/eCASOrderWS.asmx");
  5.  
  6. $wynik = $soapclient->__doRequest($filename,"http://webapps.dhl.com.pl/app/ecas/eCASOrderWS.asmx",$action,SOAP_1_2);
  7.  
  8. $handle = fopen("odp.xml", "r+");
  9.  
  10. fwrite($handle, $wynik);
  11. ?>


Jednak wyświetla błąd
Parse error: syntax error, unexpected ';' in /home/j/a/w/jaworzyna/www/xml/start.php on line 4
everth
Już nawet Geshi wychwyciło twój błąd - masz niedomknięty apostrof.

@DOWN: W takim razie niewiele mogę ci pomóc sad.gif. Może ktoś zna Soap bardziej od praktycznej strony.
Mercel
everth dalej wyświetla błąd w 4 linii
  1. <?php
  2. $filename = "xml.xml";
  3.  
  4. $soapclient = new SoapClient (null, array('location' => "http://webapps.dhl.com.pl/app/ecas/eCASOrderWS.asmx",'uri' => "http://webapps.dhl.com.pl/app/ecas/eCASOrderWS.asmx");
  5.  
  6. $wynik = $soapclient->__doRequest($filename,"http://webapps.dhl.com.pl/app/ecas/eCASOrderWS.asmx",$action,SOAP_1_2);
  7.  
  8. $handle = fopen("odp.xml", "r+");
  9.  
  10. fwrite($handle, $wynik);
  11. ?>


To może chociaż jakaś porada jak to zrobić przez cURL?
vokiel
Zrób var_dump($soapclient)

Manual podaje, że konstruktor przyjmuje 2 parametry: $wsdl i $options, więc może przekaż do pierwszego odpowiedni link:
  1. $soapclient = new SoapClient ('http://webapps.dhl.com.pl/app/ecas/eCASOrderWS.asmx?WSDL');


Mercel
Zmieniłem kod, na poniższy

  1. <?php
  2. $filename = "test.xml";
  3.  
  4. $soapclient = new SoapClient ('http://webapps.dhl.com.pl/app/ecas/eCASOrderWS.asmx?WSDL');
  5.  
  6. $wynik = $soapclient->__doRequest($filename,"http://webapps.dhl.com.pl/app/ecas/eCASOrderWS.asmx",$action,SOAP_1_2);
  7.  
  8. $handle = fopen("odp.xml", "r+");
  9.  
  10. fwrite($handle, $wynik);
  11. ?>


Jednak teraz otrzymuje inny błąd:
Cytat
Warning: SoapClient::SoapClient(http://webapps.dhl.com.pl/app/ecas/eCASOrderWS.asmx?WSDL) [soapclient.soapclient]: failed to open stream: Connection refused in /home/j/a/w/jaworzyna/www/xml/start.php on line 4

Warning: SoapClient::SoapClient() [soapclient.soapclient]: I/O warning : failed to load external entity "http://webapps.dhl.com.pl/app/ecas/eCASOrderWS.asmx?WSDL" in /home/j/a/w/jaworzyna/www/xml/start.php on line 4

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://webapps.dhl.com.pl/app/ecas/eCASOrderWS.asmx?WSDL' in /home/j/a/w/jaworzyna/www/xml/start.php:4 Stack trace: #0 /home/j/a/w/jaworzyna/www/xml/start.php(4): SoapClient->SoapClient('http://webapps....') #1 {main} thrown in /home/j/a/w/jaworzyna/www/xml/start.php on line 4
-VonSNAKE-
Boże Widzisz i nie grzmisz:D

A czy nie dojrzeliście przez 3 lata że otwieracie ' i nie zamykacie tego ' przez co nie ma ; ;D
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.