Płatności masowe - BGZ - klient SOAP - WSDL + SSL
Witam! Koledzy - moze ktoś się interesował i podpowie coś o zbudowaniu klienta soap ver. 1.0. Mam płatności masowe w BGZ i oprócz logowania się ręcznego na stronę i pobierania plików z raportami dziennymi, jest jeszcze możliwość pobierania z serwisu Web Services i zautomatyzowaniu operacji. Jest to na potrzeby LMS oczywiście. Ogólne zadanie polega na tym, że skrypt ma pobierać codziennie o 19.30 następny plik w serwisu banku i zapisywać go na moim serwerku w katalogu /home/bank Mam potrzebne loginy i hasła oczywiście. Mam opis pliku WSDL - oraz opis zmiennych, in0, in1, in2, in3. Trzeba zbudować klienta w php 5. Zacząłem już conieco - i wbrew pozorom nie było łatwo coś znaleźć dla soap ver 1.0- zwłaszcza jak dla mnie - ja się tym soap-em wcale nie interesowałem .... do tej pory.. Zrobiłem jak narazie coś takiego: <?php $client = new SoapClient("https://transferbgz.pl/bgz.blc.loader/WebService?wsdl"); $return_val = $client->getDocuments('login', 'haslo', 'iden'); echo $return_val; ?> Lecz to nie chce mi się połączyć .... przeglądarka wywala błąd : Fatal error: Uncaught SoapFault exception: [HTTP] Could not connect to host in /moj_serwer/plik.php:3 Stack trace: #0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://transfer...', '', 1, 0) #1 [internal function]: SoapClient->__call('getDocuments', Array) #2 /moj_serwer/plik.php(3): SoapClient->getDocuments('login', 'haslo', 'iden') #3 {main} thrown in /moj_serwer/plik.php on line 3 Problem prawdopodobnie jest w połączeniu https. Zgodnie ze wskazówkami z banku - połaczenie jest https i jest jako bezpieczne w ssl v.3 Trzeba coś tu przerobić, aby skrypt potrafił się w tym https połączyć... Nie wiem jak to zrobić - w sieci jest niewiele materiałów. Ie6 - podczas wyświetlenia strony https://transferbgz.pl/bgz.blc.loader/WebService?wsdl z opisem tych funkcji - prosi o instalacje certyfikatu - więc pewnie jakoś trzeba to też dołączyć do tego skryptu... Portu szczególnego w instrukcji nie znalazłem opsianego. Może ktoś podpowie jak taki skrypt przygotować i jak zrobić to połączenie w https - oraz potem pobranie pliku do katalogu /home/bank Pozdrawiam. Jacek serwis@mikrochip.pl GG: 5200746 -- Pozdrowienia, SERWIS MIKROCHIP !DSPAM:4a5c8db8132231711816961!
W dniu 14 lipca 2009 15:52 użytkownik SERWIS MIKROCHIP <serwis@mikrochip.pl> napisał:
Witam!
Zacząłem już conieco - i wbrew pozorom nie było łatwo coś znaleźć dla soap ver 1.0- zwłaszcza jak dla mnie - ja się tym soap-em wcale nie interesowałem .... do tej pory..
Jest sporo o tym na sieci.
$client = new SoapClient("https://transferbgz.pl/bgz.blc.loader/WebService?wsdl");
$return_val = $client->getDocuments('login', 'haslo', 'iden');
echo $return_val;
Ja bym sugerował raczej coś takiego: $soap_client_url = "https://[domain]/ws/api/Session.wsdl"; $my_session = new SoapClient( $soap_client_url, array( "trace" => true, "exceptions" => true, "proxy_host" => PROXYHOST, "proxy_port" => PROXYPORT, "stream_context" => $stream_context, "local_cert" => CERTIFICATE ) ); CERTIFICATE niech wskazuje na odpowiedni .pem I tunelować np przez stunnel (kiedyś miałem problem z openssl w php.
Fatal error: Uncaught SoapFault exception: [HTTP] Could not connect to host in /moj_serwer/plik.php:3 Stack trace: #0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://transfer...', '', 1, 0) #1 [internal function]: SoapClient->__call('getDocuments', Array) #2 /moj_serwer/plik.php(3): SoapClient->getDocuments('login', 'haslo', 'iden') #3 {main} thrown in /moj_serwer/plik.php on line 3
A pokaż ten WSDL czy bank aby na pewno mówi w WSDLu o https a nie http, bo to: <?xml version="...', 'http://transfer...', '', 1, 0 to jasno mówi: szukaj mnie na http (nie httpS).
Nie wiem jak to zrobić - w sieci jest niewiele materiałów.
Jest sporo :) Obejżyj tego WSDLa i poszukaj czy jest http czy https, jak to pierwsze to 0-800-Twój opiekun i powiedz że mają coś nie tak.. ps. zakładam że masz dobrze skonfigurowane i skompilowane php ze wsparciem dla SSLa !DSPAM:4a5c99a4143578616076440!
$client = new SoapClient("https://transferbgz.pl/bgz.blc.loader/WebService?wsdl");
transferbgz.pl używa nieprawidłowego certyfikatu bezpieczeństwa. Ten certyfikat jest prawidłowy tylko dla www.transferbgz.pl. (Kod błędu: ssl_error_bad_cert_domain) To też bym uwzlędnił... !DSPAM:4a5da3b315821310814384!
Witam! No właśnie Na tym mi się zatrzymało akurat ;) Przerobiłem wg. Twoich wskazówek - własnie na tym certyfikacie stoi. Dodałęm do skryptu dostępne zmienne... Pobrałem certyfikat za pomocą przeglądarki ie6 - i dałem tam export do pliku ale wyeksportowało mi go jako plik *.cer .pem pisałeś - ale nie wiem jak to zrobić To pokazuje przeglądarka - po odpaleniu skryptu Warning: SoapClient::SoapClient() [function.SoapClient-SoapClient]: Unable to set local cert chain file `cert.cer'; Check that your cafile/capath settings include details of your certificate and its issuer in A jak uruchomię w linuksie np. w przelądarce w3m - to własnie mi się pokazuje ten błędny certyfikat - ale strona sięwyśiwetla - tylko dopiero po trzech potwierdzeniach w3m https://transferbgz.pl/bgz.blc.loader/WebService?wsdl 1- unable to get local issuer certificate: accept? (y/n) y 2- Bad cert ident www.transferbgz.pl from transferbgz.pl: accept? (y/n) y 3- Accept unsecure SSL session:Bad cert ident www.transferbgz.pl from transferbgz. y i dopiero wyświetla się strona..... W jaki sposób zawrzeć to w skrypcie ? Aktualnie mam tak: ----------------------------------------------------------------------------- <?php #Pobieranie pliku z BGZ #Dane wejściowe $pLogin = "jan.kowalski"; $pPassword = "haslo"; $pIden = "12345678"; $pId = " " ; $pSystem = " " ; $client = "https://transferbgz.pl/bgz.blc.loader/WebService?wsdl"; $stream_context = "https" ; $cer = "cert.cer"; #Opcje pobierania $g1 = "getDokuments"; $g2 = "getDokumentsForSystem"; $g3 = "getDokument"; $g4 = "getBase64Document"; $g5 = "getSystems"; #Zmienne do opcji $z1 = "'pLogin', 'pPassword', 'pIden'"; $z2 = "'pSystem', 'pLogin', 'pPassword', 'pIden'"; $z3 = "'pId', 'pLogin', 'pPassword', 'pIden'"; $z4 = "'pId', 'pLogin', 'pPassword', 'pIden'"; $z5 = "'pLogin', 'pPassword', 'pIden'"; #Sesja $my_session = new SoapClient( $client, array( "trace" => true, "exceptions" => true, "proxy_host" => PROXYHOST, "proxy_port" => PROXYPORT, "stream_context" => $stream_context, "local_cert" => $cer )); #Przykład odbioru #$return_val = $client->getSystems('pLogin', 'pPassword', 'pIden'); $return_val = $client->$g1($z1); echo $return_val; ?> ------------------------------------------------------------------------- I to wywala błąd Jak to uwzględnić ? i w którym miejscu ? W liście datowanym 15 lipca 2009 (11:38:59) napisano:
$client = new SoapClient("https://transferbgz.pl/bgz.blc.loader/WebService?wsdl");
transferbgz.pl używa nieprawidłowego certyfikatu bezpieczeństwa. Ten certyfikat jest prawidłowy tylko dla www.transferbgz.pl. (Kod błędu: ssl_error_bad_cert_domain)
To też bym uwzlędnił...
_______________________________________________ lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
-- Pozdrowienia, SERWIS MIKROCHIP !DSPAM:4a5dbdc487299031758699!
W dniu 15 lipca 2009 13:30 użytkownik SERWIS MIKROCHIP <serwis@mikrochip.pl> napisał:
w3m https://transferbgz.pl/bgz.blc.loader/WebService?wsdl
1- unable to get local issuer certificate: accept? (y/n) y 2- Bad cert ident www.transferbgz.pl from transferbgz.pl: accept? (y/n) y 3- Accept unsecure SSL session:Bad cert ident www.transferbgz.pl from transferbgz. y
Zadzwoń sobie do nich i niech się nauczą pisać WSDLe zgodnie ze standardami? albo niech ta firemka (bodajze jakis max.com.pl) niech to im zrobi porządnie, czemu masz w kodzie obchodzić ich ewidentne błędy w WSDLu? !DSPAM:4a5dbf5f93936908914954!
Ja już gadałem z nimi .... kilka dni temu.... Niezbyt uprzejma była rozmowa - i chłopaki nie chcieli mi za bardzo pomóc. Prosiłem ich tylko o jakiś wzór pliku w php do połączenia się z tym servisem i pobrania pliku. W końcu nie każdy jest programistą - a ja akurat zajmuje się czymś innym - moja wiedza jest raczej podstawowa... Niestety dostałem odpowiedź - radź sobie sam. Tak więc teraz czuje się jakbym conajmniej próbował się "włamać" do ich systemu po swoje pliki... A dla banku przecież płace za tą usługę .... zeby nie dali wzorcowych plików - to wydaje mi się conajmniej dziwne.... Ale przecież chłopaki to pisali..... to ile to dla nich dać mi po prostu wzór w php do przeróbki ... I ja bym nie marnował czasu na zbędne nauczki - i oni by mieli problem z głowy... A teraz to nie wiem w sumie co tu zrobić.... Moge spróbować pisać do nich - ale pewnie i tak nic to nie da.... Może po prostu pominąć to i już..... W liście datowanym 15 lipca 2009 (13:37:04) napisano:
W dniu 15 lipca 2009 13:30 użytkownik SERWIS MIKROCHIP <serwis@mikrochip.pl> napisał:
1- unable to get local issuer certificate: accept? (y/n) y 2- Bad cert ident www.transferbgz.pl from transferbgz.pl: accept? (y/n) y 3- Accept unsecure SSL session:Bad cert ident www.transferbgz.pl from transferbgz. y
Zadzwoń sobie do nich i niech się nauczą pisać WSDLe zgodnie ze standardami? albo niech ta firemka (bodajze jakis max.com.pl) niech to im zrobi porządnie, czemu masz w kodzie obchodzić ich ewidentne błędy w WSDLu?
_______________________________________________ lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms
-- Pozdrowienia, SERWIS MIKROCHIP !DSPAM:4a5dc9d1138187818312239!
W dniu 15 lipca 2009 19:47 użytkownik Krzysztof A. Michalski [MaxCon] <k.michalski@maxcon.pl> napisał:
Moge spróbować pisać do nich - ale pewnie i tak nic to nie da.... Może po prostu pominąć to i już.....
Niedawno mialem trochei inny problem z PeKaO - zdziwilem sie ile daje jeden niezbyt mily mail do rzecznika prasowego.
Ech, wystarczy zadzwonić do swojego PeHa (Przedstawiciela Handlowego), a jak nie to do jego kierownika. To już pomaga. Infolinia też jest na ogół pomocna. Kwestia nie obchodzenia czyjejś fuszerki (a to ewidentnie fuszerka podwykonawcy i nieznajomość tematu osoby która odbierała wdrożenie w banku). Jak nie pomoże to krótki artykuł w portalu klasy DI i można się cieszyć osobistym konsultantem do prywatnego użytku w banku. W końcu to Ty za to płacisz czy bank robi Ci łaskę że przyjmuje Twoje pieniądze? A jak już rozmawiasz z kimś wyżej szarego PeHa to nadmień że LMSa używa wielu operatorów w Polsce i to oni powinni Ci oddać koszty poniesione na wdrożenie, a Ty im przekażesz kod na GPLu :) na mBank nie podziałało 'w prost' ale wiele osób im pisało o exporcie i jest chociaż 'CSV'. ps. Mbank mi już nawet nie wysyła samych gołych kubeczków, mam już kilka starterów ichniej telefonii, myszkę, pendrive'ów i w ogóle. A reklamacje dotyczyły z pozoru błahych spraw klasy <= 0.03 pln. Czy też !DSPAM:4a5e360b323281322221663!
uczestnicy (3)
-
Krzysztof A. Michalski [MaxCon] -
Krzysztof Drewicz -
SERWIS MIKROCHIP