Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SOAP i https
Forum PHP.pl > Forum > PHP
athabus
Próbuję połączyć się z api jednej z firm kurierskich, ale napotykam pewien problem. Otóż w instrukcji integracji mam:

Cytat
G-Service pracuje zgodnie z zasadami architektury SOAP (https://en.wikipedia.org/wiki/SOAP). Dostęp jest
dozwolony jedynie z wykorzystaniem bezpiecznego protokołu http (HTTPS).


Przy próbie połączenia z localhosta otrzymuję błąd:

Cytat
HTTP to HTTPS communication - Please reconfigure Your client to use HTTPS secured communication on port 443


Jak pozbyć się tego błędu? Należy coś zmodyfikować w wywołaniu samego SoapClient, czy chodzi o ustawienie serwera? Próbowałem na szybko odpalić skrypt na serwerze produkcyjnym ze skonfigurowanym certyfikatem SSL i również otrzymuję ten sam błąd. W Google znalazłem tylko jeden podobny problem, ale u tego człowieka problem leżał po stronie udostępniającego API.

Mój kod wygląda mniej więcej tak:
  1. $url='https://gclient.etlogistik.com/GServiceTest/GService.svc?wsdl';
  2. $oSoapClient = new SoapClient ($url );
  3. $oSoapClient->ServiceList(...);

O dziwo $oSoapClient->__getFunctions(); zwraca listę dostępnych w API funkcji. Same wywołania funkcji zwracają już powyższy błąd.

Będę wdzięczny za każdą poradę.
viking
A nie przypadkiem
https://gclient.etlogistik.com:443/GService...ervice.svc?wsdl

lub opcje w konstruktorze.
athabus
Nie rozumiem Twoje odpowiedzi. Adres, który wkleiłeś jest identyczny jak url, którego użyłem. Co do drugiego członu to też podejrzewam, że chodzi o jakieś opcje w konstruktorze, tylko jakie ;-) Próbowałem już kilku różnych wersji znalezionych w sieci, ale poruszam się po omacku i rezultat zawsze jest ten sam. Rzadko mam styczność z SOAP i nigdy nie spotkałem się z takim problemem.
viking
Zerknąłem w dokumentację. RequestHeader wymaga podania Password i CustomerCode i Language zgodnie z dokumentacją http://www.etlogistik.com/etl/support/file...f?1483976869187.
Pyton_000
Musisz się łączyć z HTTPS, a lokalnie pewnie odpalasz po HTTP
athabus
Cytat(viking @ 9.01.2017, 16:51:28 ) *
Zerknąłem w dokumentację. RequestHeader wymaga podania Password i CustomerCode i Language zgodnie z dokumentacją http://www.etlogistik.com/etl/support/file...f?1483976869187.


Tak te dane oczywiście podaję w wywołaniu metody ServiceList (te ... , żeby nie zaciemniać kodu) , ale komunikat błędu dotyczy braku SSL, a nie błędu w autoryzacji.

@Python_000
Lokalnie mam certyfiakt self-signed, ale próbowałem też na serwerze produkcyjnym ze zwykłym certyfikatem RapidSSL. Może jakieś dodatkowe parametry trzeba dodać w konstruktorze, aby brał pod uwagę ten cerfyfikat?
viking
Po czymś takim dostawałem wczoraj internal error więc pewnie logowanie:
  1. $context = stream_context_create(array('ssl' => array('verify_peer' => false, 'allow_self_signed' => true), 'http'=> ['header'=>'Content-type:text/xml; charset=utf-8']));
  2. $url='https://gclient.etlogistik.com/GServiceTest/GService.svc?wsdl';
  3. $oSoapClient = new SoapClient ($url, array('ssl_method'=> SOAP_SSL_METHOD_SSLv23, 'trace'=>true, 'exceptions'=>true, 'stream_context' => $context, 'location' => 'https://gclient.etlogistik.com/GServiceTest/GService.svc?wsdl'));


Czytałem że dla SSL ważne jest location.
athabus
Hej viking - zdaje się, że działa - co prawda teraz dostaję inny błąd (nie mam teraz czasu do tego usiąść), ale dotyczy już samego wywołania, więc zdaje się, że problem z ssl można rozwiązać tak jak to opisałeś. W przyszłym tygodniu wracam do tematu tego api. Wielkie dzięki.
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.