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
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://%5Bdomain%5D/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
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
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