Z używaniem SOAP-a przez proxy w PHP bywają problemy, o czym już pisałem. Dzisiaj w podobnej sytuacji natknąłem się na inną zagwostkę. Podczas pisania integracji z usługą eraty.pl prosty kod z instrukcji:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $identyfikacja [ 'login' ] = 'ERatyTest' ; $identyfikacja [ 'haslo' ] = 'ERatyTest!1' ; $identyfikacja [ 'numerSklepu' ] = 13010005; $identyfikacja [ 'typProduktu' ] = 0; $identyfikacja [ 'wariantSklepu' ] = 1; try { $result = $client ->pobierzLinieKredytowe( $identyfikacja ); } catch (\Exception $e ) { echo $e ->faultstring; } |
rzucał mi wyjątkiem „Could not connect to host”. Oczywiście zarówno firewall i proxy zezwałały na dostęp do eraty.pl, a ten sam kod uruchomiony na innym serwerze działał bez zająknięcia. Nad znalezieniem rozwiązania trochę musiałem posiedzieć, aż w końcu w stack trace’ie zauważyłem, że metoda SoapClient::__doRequest()
jako drugi parametr dostaje http://www.eraty.pl:8080/eRatyWSService/eRatyWS
(hint: numer portu). Nie mam pojęcia skąd to się bierze, zakładam, że to coś linii PHP-Squid, ale z tą wiedzą rozwiązanie było proste. Wystarczyło wymusić poprawną lokalizację usługi przy tworzeniu obiektu SoapClient
:
1 2 3 | ); |