Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> SOAP i https
athabus
post 9.01.2017, 16:03:07
Post #1





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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ę.
Go to the top of the page
+Quote Post
viking
post 9.01.2017, 16:24:25
Post #2





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


A nie przypadkiem
https://gclient.etlogistik.com:443/GService...ervice.svc?wsdl

lub opcje w konstruktorze.


--------------------
Go to the top of the page
+Quote Post
athabus
post 9.01.2017, 16:35:53
Post #3





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
viking
post 9.01.2017, 16:51:28
Post #4





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Zerknąłem w dokumentację. RequestHeader wymaga podania Password i CustomerCode i Language zgodnie z dokumentacją http://www.etlogistik.com/etl/support/file...f?1483976869187.


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 9.01.2017, 17:26:46
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Musisz się łączyć z HTTPS, a lokalnie pewnie odpalasz po HTTP
Go to the top of the page
+Quote Post
athabus
post 10.01.2017, 10:05:06
Post #6





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
viking
post 10.01.2017, 10:42:00
Post #7





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
athabus
post 11.01.2017, 12:05:18
Post #8





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.

Ten post edytował athabus 11.01.2017, 12:06:04
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 05:45