Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PHP + SOAP
gerffi
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 4.03.2015

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


Witam, mam problem z uruchomieniem SOAP w PHP..
Próbując wywołać metodę dostaję błąd:
Fatal error: Uncaught SoapFault exception: [HTTP] Internal Server Error

wywołuję metodę Zaloguj
- logowanie udane- zwracany jest 20 znakowy identyfikator sesji
- logowanie nieudane- zwracany jest pusty ciąg

tak samo dzieje się przy PobierzCaptcha;
- jeśli wymagane jest wprowadzenie kodu - obrazek 5 znakowego ciągu, liter i cyfr, zakodowany w formacie BASE64
- jeśli niewymagane jest wprowadzenie kodu
- pusty ciąg , jeśli wygasła sesja - ciąg „-1”

Mój kod:
  1. $client = new SoapClient('https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/wsdl/UslugaBIRzewnPubl.xsd',
  2. "encoding"=>"UTF-8",
  3. "exceptions" => 1,
  4. "soap_version" => SOAP_1_2
  5. )
  6. );
  7.  
  8. $test = $client->Zaloguj('sapodasdpadsad');
  9. print $rest;

Może ktoś pomoże, bo walczę dwa dni i stoję w miejscu ....
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 31)
morthan
post
Post #2





Grupa: Zarejestrowani
Postów: 50
Pomógł: 4
Dołączył: 15.06.2010

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


Polecam do HEADERA dodać:
  1. "trace" => TRUE,


i poczytać o

http://php.net/manual/pl/soapclient.call.php

W razie pytań CALL ME (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
gerffi
post
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 4.03.2015

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


Cytat(morthan @ 4.03.2015, 14:30:11 ) *
Polecam do HEADERA dodać:
  1. "trace" => TRUE,


i poczytać o

http://php.net/manual/pl/soapclient.call.php

W razie pytań CALL ME (IMG:style_emoticons/default/wink.gif)

Dodane i to samo...
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





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

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


Jakiś problem z serwerem API
Go to the top of the page
+Quote Post
gerffi
post
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 4.03.2015

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


Cytat(Pyton_000 @ 4.03.2015, 16:11:28 ) *
Jakiś problem z serwerem API

Raczej nie (IMG:style_emoticons/default/smile.gif) Bo to serwer GUSu...
Go to the top of the page
+Quote Post
Pyton_000
post
Post #6





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

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


No to tym bardziej (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
gerffi
post
Post #7





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 4.03.2015

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


Cytat(Pyton_000 @ 4.03.2015, 16:21:23 ) *
No to tym bardziej (IMG:style_emoticons/default/tongue.gif)

HE he (IMG:style_emoticons/default/smile.gif) nie no dzwoniłem do nich i zapewniają że działa poprawnie.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #8





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

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


Błąd jednak wskazuje na problem serwera, więc poproś ich o jakiś przykładowy kod czy coś.
Go to the top of the page
+Quote Post
gerffi
post
Post #9





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 4.03.2015

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


Cytat(Pyton_000 @ 4.03.2015, 16:45:43 ) *
Błąd jednak wskazuje na problem serwera, więc poproś ich o jakiś przykładowy kod czy coś.

Raczej nie podeślą przykładu w PHPie.. Bo serwer SOAP jest na Windows więc przykład jak coś podeślą pewnie w ASP. Jedynie co mi podesłali to przykładowe żadanie:

  1. <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ns="http://CIS/BIR/PUBL/2014/07">
  2. <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
  3. <wsa:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/Zaloguj</wsa:Action>
  4. <wsa:To>https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</wsa:To>
  5. </soap:Header>
  6. <soap:Body>
  7. <ns:Zaloguj>
  8. <!--Optional:-->
  9. <ns:pKluczUzytkownika>tutaj kluczużytkownika...</ns:pKluczUzytkownika>
  10. </ns:Zaloguj>
  11. </soap:Body>
  12. </soap:Envelope>


Ten post edytował gerffi 4.03.2015, 16:51:52
Go to the top of the page
+Quote Post
Pyton_000
post
Post #10





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

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


Ja nadal twierdzę że coś jest nie tak po Ich stronie (IMG:style_emoticons/default/wink.gif)

Ew. potrzebne są jakieś dane autentykacyjne które trzeba podać przy każdym requeście.
Go to the top of the page
+Quote Post
gerffi
post
Post #11





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 4.03.2015

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


Nie dane auth nie są wymagane.. Metody bez problemu mogę odczytać jakie są w tym soap..
Go to the top of the page
+Quote Post
Pyton_000
post
Post #12





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

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


Niech podeślą przykład wywołania Zaloguj
Go to the top of the page
+Quote Post
gerffi
post
Post #13





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 4.03.2015

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


Raczej gotowego przykładu w PHP mi nie podeślą ;-)
Go to the top of the page
+Quote Post
Pyton_000
post
Post #14





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

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


Jakikolwiek może być nawet w Assemblerze (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
gerffi
post
Post #15





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 4.03.2015

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


he he (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Pawel1074809
post
Post #16





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 2.11.2013

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


Witaj,

jak odpytasz
$client = new SoapClient('https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/wsdl/UslugaBIRzewnPubl.xsd');
$client->__doRequest($xml, 'https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc', 'Zaloguj', 2);

to otrzymasz kod sesji.
Potem ten kod sesji musisz dokładać do nagłówka HTTP przy następnych żądaniach.

Ja aktualnie utknąłem nad strukturą XML PobierzCaptcha - dwie pokazane w dokumentacji przykładowej działają a ta wywala mi błędy składni.


Posiada ktoś może gotową strukturę XML dla następnego kroku - czyli metody PobierzCaptcha ?
Go to the top of the page
+Quote Post
Olbrych
post
Post #17





Grupa: Zarejestrowani
Postów: 10
Pomógł: 2
Dołączył: 1.02.2010

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


Witam.

Mam ten sam problem. Czy jest rozwiązanie na komuniakcje z tym API. U mnie nawet nie działa zaloguj. Pytanie w $xml podajesz to przykłądowe wywołanie z dokumentacji ?
Go to the top of the page
+Quote Post
mkola
post
Post #18





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 13.05.2015

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


Witam!

Czy udało się komuś z tą usługą faktycznie połączyć? U mnie nieustannie jest: Internal Server Error
  1. <?php
  2. try {
  3. $serviceUrl = 'https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/wsdl/UslugaBIRzewnPubl.xsd';
  4. $client = new SoapClient($serviceUrl, array('soap_version' => SOAP_1_2, 'trace' => true, 'style' => SOAP_DOCUMENT));
  5. $client->Zaloguj(array('pKluczUzytkownika' => 'moj_klucz'));
  6. } catch (SoapFault $fault) {
  7. trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
  8. }
  9.  
  10.  
  11.  
Go to the top of the page
+Quote Post
Pyton_000
post
Post #19





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

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


Trzaśnij coś takiego:
  1. $client->__doRequest('<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ns="http://CIS/BIR/PUBL/2014/07">
  2. <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
  3. <wsa:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/Zaloguj</wsa:Action>
  4. <wsa:To>https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</wsa:To>
  5. </soap:Header>
  6. <soap:Body>
  7. <ns:Zaloguj>
  8. <!--Optional:-->
  9. <ns:pKluczUzytkownika>aaaaaabbbbbcccccdddd</ns:pKluczUzytkownika>
  10. </ns:Zaloguj>
  11. </soap:Body>
  12. </soap:Envelope>', 'https://Wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc', 'http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/Zaloguj', SOAP_1_2);
Go to the top of the page
+Quote Post
mkola
post
Post #20





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 13.05.2015

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


Cytat(Pyton_000 @ 13.05.2015, 12:44:47 ) *
Trzaśnij coś takiego


Trzasnąłem (IMG:style_emoticons/default/smile.gif)
Dzięki, byłem tak blisko a jednocześnie tak daleko! (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
extreme-dh
post
Post #21





Grupa: Zarejestrowani
Postów: 21
Pomógł: 3
Dołączył: 25.05.2008

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


Witam wszystkich.
Niemożliwe że nie potrafią napisać porządnej dokumentacji (albo nawet porządnego API) bo widać że każdy ma z tym cholerstwem problem.
Ale do rzeczy, ja również się z tym bujam. Logowanie udało się prawidłowo, dostaję token, ale już pobieranie Captcha nie działa jak powinno.
Moje zapytanie wygląda tak, ktoś ma pomysł co moze być nie tak?

Kod
POST /wsBIR/UslugaBIRzewnPubl.svc HTTP/1.1
Host: wyszukiwarkaregontest.stat.gov.pl
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.4.32
Content-Type: application/soap+xml; charset=utf-8; action="http://CIS/BIR/2014/07/IUslugaBIR/PobierzCaptcha"
Content-Length: 437
Sid: 4p9p2g6d4f7v3f8t4c2r

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://CIS/BIR/2014/07" xmlns:ns2="http://www.w3.org/2005/08/addressing">
  3. <env:Header>
  4. <ns2:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/PobierzCaptcha</ns2:Action>
  5. <ns2:To>https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</ns2:To>
  6. </env:Header>
  7. <env:Body>
  8. <ns1:PobierzCaptcha/>
  9. </env:Body>
  10. </env:Envelope>

Response
Kod
HTTP/1.1 500 Internal Server Error
Connection: Keep-Alive
Content-Length: 941
Date: Mon, 18 May 2015 18:39:13 GMT
Content-Type: multipart/related; type="application/xop+xml";start="<http://tempuri.org/0>";boundary="uuid:68818fb7-ddb6-4368-8c77-d9b40e1eea29+id=114";start-info="application/soap+xml"
Server: Microsoft-IIS/7.5
Cache-Control: private
X-AspNet-Version: 2.0.50727
MIME-Version: 1.0
X-Powered-By: ASP.NET


PS.
Podejrzane wydaje mi się action w nagłówku http "http://CIS/BIR/2014/07/IUslugaBIR/PobierzCaptcha", adres jest nieco inny niż przy metodzie Zaloguj

Przy okazji, wie ktoś moze jaki jest adres produkcyjnego wsdl?
https://wyszukiwarkaregon.stat.gov.pl/wsBIR...BIRzewnPubl.xsd nie działa

Ten post edytował extreme-dh 20.05.2015, 20:17:02
Go to the top of the page
+Quote Post
mkola
post
Post #22





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 13.05.2015

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


Również utknąłem na pobieraniu niemniej temat rozwojowy więc dzielę się tym, co z GUSu niemal siłą wyszarpałem (IMG:style_emoticons/default/wink.gif)
  1. <!-- Metody uslugi sieciowej BIR1 (alfabetycznie) -->
  2.  
  3. <!-- DaneKomunikat ------------------------------------------------------------->
  4. <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ns="http://CIS/BIR/PUBL/2014/07">
  5. <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
  6. <wsa:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/DaneKomunikat</wsa:Action>
  7. <wsa:To>https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</wsa:To>
  8. </soap:Header>
  9. <soap:Body>
  10. <ns:DaneKomunikat/>
  11. </soap:Body>
  12. </soap:Envelope>
  13. <!-- DanePobierzPelnyRaport ------------------------------------------------------------->
  14. <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ns="http://CIS/BIR/PUBL/2014/07">
  15. <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
  16. <wsa:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/DanePobierzPelnyRaport</wsa:Action>
  17. <wsa:To>https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</wsa:To>
  18. </soap:Header>
  19. <soap:Body>
  20. <ns:DanePobierzPelnyRaport>
  21. <ns:pRegon>000331501</ns:pRegon>
  22. <ns:pNazwaRaportu>PublDaneRaportPrawna</ns:pNazwaRaportu>
  23. </ns:DanePobierzPelnyRaport>
  24. </soap:Body>
  25. </soap:Envelope>
  26. <!-- DaneSzukaj ------------------------------------------------------------->
  27. <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ns="http://CIS/BIR/PUBL/2014/07" xmlns:dat="http://CIS/BIR/PUBL/2014/07/DataContract">
  28. <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
  29. <wsa:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/DaneSzukaj</wsa:Action>
  30. <wsa:To>https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</wsa:To>
  31. </soap:Header>
  32. <soap:Body>
  33. <ns:DaneSzukaj>
  34. <ns:pParametryWyszukiwania>
  35. <!--Optional:-->
  36. <dat:Krs></dat:Krs>
  37. <!--Optional:-->
  38. <dat:Krsy></dat:Krsy>
  39. <!--Optional:-->
  40. <dat:Nip></dat:Nip>
  41. <!--Optional:-->
  42. <dat:Nipy></dat:Nipy>
  43. <!--Optional:-->
  44. <dat:Regon>142396858</dat:Regon>
  45. <!--Optional:-->
  46. <dat:Regony14zn></dat:Regony14zn>
  47. <!--Optional:-->
  48. <dat:Regony9zn></dat:Regony9zn>
  49. </ns:pParametryWyszukiwania>
  50. </ns:DaneSzukaj>
  51. </soap:Body>
  52. </soap:Envelope>
  53. <!-- GetValue ------------------------------------------------------------->
  54. <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ns="http://CIS/BIR/2014/07">
  55. <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
  56. <wsa:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/GetValue</wsa:Action>
  57. <wsa:To>https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</wsa:To>
  58. </soap:Header>
  59. <soap:Body>
  60. <ns:GetValue>
  61. <ns:pNazwaParametru>StatusUslugi</ns:pNazwaParametru>
  62. </ns:GetValue>
  63. </soap:Body>
  64. </soap:Envelope>
  65. <!-- PobierzCaptcha ------------------------------------------------------------->
  66. <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ns="http://CIS/BIR/2014/07">
  67. <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
  68. <wsa:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/PobierzCaptcha</wsa:Action>
  69. <wsa:To>https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</wsa:To>
  70. </soap:Header>
  71. <soap:Body>
  72. <ns:PobierzCaptcha/>
  73. </soap:Body>
  74. </soap:Envelope>
  75. <!-- SprawdzCaptcha ------------------------------------------------------------->
  76. <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ns="http://CIS/BIR/2014/07">
  77. <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
  78. <wsa:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/SprawdzCaptcha</wsa:Action>
  79. <wsa:To>https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</wsa:To>
  80. </soap:Header>
  81. <soap:Body>
  82. <ns:SprawdzCaptcha>
  83. <ns:pCaptcha>aaaaa</ns:pCaptcha>
  84. </ns:SprawdzCaptcha>
  85. </soap:Body>
  86. </soap:Envelope>
  87. <!-- Wyloguj ------------------------------------------------------------->
  88. <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ns="http://CIS/BIR/PUBL/2014/07">
  89. <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
  90. <wsa:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/Wyloguj</wsa:Action>
  91. <wsa:To>https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</wsa:To>
  92. </soap:Header>
  93. <soap:Body>
  94. <ns:Wyloguj>
  95. <ns:pIdentyfikatorSesji>k4r3h2y8r6w5h4d4n7d4</ns:pIdentyfikatorSesji>
  96. </ns:Wyloguj>
  97. </soap:Body>
  98. </soap:Envelope>
  99. <!-- Zaloguj ------------------------------------------------------------->
  100. <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ns="http://CIS/BIR/PUBL/2014/07">
  101. <soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
  102. <wsa:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/Zaloguj</wsa:Action>
  103. <wsa:To>https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</wsa:To>
  104. </soap:Header>
  105. <soap:Body>
  106. <ns:Zaloguj>
  107. <ns:pKluczUzytkownika>theUsersKey</ns:pKluczUzytkownika>
  108. </ns:Zaloguj>
  109. </soap:Body>
  110. </soap:Envelope>
  111. <!-- ------------------------------------------------------------->
Go to the top of the page
+Quote Post
ikario
post
Post #23





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 24.01.2012

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


Witam,
po wielu bojach, udało mi się przedrzeć przez API GUS, z wykorzystaniem podstawowych metod klasy SoapClient. Gdyby ktoś był zainteresowany takim rozwiązaniem, bez wchodzenia w CURLe i inne niskopoziomowe __doRequest() z zabawą w tworzenie całych zapytań XML, to (pozwolę sobie również podsumować wcześniejsze spostrzeżenia w tym wątku):

1. Internal Server Error otrzymujemy, kiedy stosujemy domyślną wersję SOAP 1.1, należy zmienić ją koniecznie na SOAP 1.2

  1. $options['soap_version'] = SOAP_1_2;


2. Wyjątek pt. "looks like we got no XML document" związany jest z faktem, że SoapClient nie jest na tyle elastyczny, aby przetworzyć odpowiedź wygenerowaną przez server SOAP GUS, zawierającą dodatkowe dane (nagłówki). Konieczne jest więc niestety stworzenie własnej klasy dziedziczącej po SoapClient, nadpisującej metodę __doRequest(), wyciągającej do przetworzenia sam kod XML:
  1. class SoapClientGUS extends \SoapClient {
  2. public function __doRequest($req, $location, $action, $version = SOAP_1_2) {
  3. $location = "https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc"; // o tej linii w dalszej części wątku
  4. $response = parent::__doRequest($req, $location, $action, $version);
  5. //odpowiedź z serwera GUS musimy pozbawić innych elementów, pozostawiając jedynie kopertę SOAP w XML
  6. $matches = array();
  7. preg_match("/<s:Envelope.*<\/s:Envelope>/s", $response, $matches); //szybkie, niekoniecznie optymalne
  8. return $matches[0];
  9. }
  10. }


3. Serwer GUS wymaga, aby dodać do zapytania XML dwa nagłówki:
  1. $soap = new SoapClientGUS("https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/wsdl/UslugaBIRzewnPubl.xsd", $options);
  2. $header[]= new SoapHeader('http://www.w3.org/2005/08/addressing', 'Action', URL_WYBRANEJ_MEDOTY, 0);
  3. $header[]= new SoapHeader('http://www.w3.org/2005/08/addressing', 'To', "https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc", 0);
  4. $soap->__setSoapHeaders($header);

URL_WYBRANEJ_MEDOTY (np. http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/Zaloguj) można pobrać i sparsować XML z pliku WSDL lub zdefiniować na stałe dzięki uprzejmości kolegi mkola, post 22 (niestety, nie każda metoda ma ten sam początek adresu http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/).

4. Z tak skonstruowanym zapytaniem, możemy śmiało się logować:
  1. $result = $soap->Zaloguj(array('pKluczUzytkownika'=>'aaaaaaaaaaaaaaaaaaaa'));
  2.  
  3. //identyfikator sesji powinien się znaleźć w
  4. echo $result->ZalogujResult;


5. Po zalogowaniu (otrzymaniu identyfikatora sesji), należy ten identyfikator dodawać do każdego następnego zapytania:
  1. $options['stream_context'] = stream_context_create(array('http' => array('header' => 'sid: '.$otrzymanyIdentyfikatorSesji)));


6. Przejście na środowisko produkcyjne. Na dzień dzisiejszy, przy przejściu na środowisko produkcyjne, zmienia się klucz użytkownika oraz adres usługi, nie zmienia się natomiast adres pliku WSDL. Dodatkowo, klient SoapClient, bez względu na powyżej wprowadzone parametry, nadal pobiera adres usługi z pliku WSDL (a więc testowy). Skutkiem takiego stanu rzeczy będzie błąd autoryzacji, jako że klient będzie łączył się z usługą testową z wykorzystaniem klucza produkcyjnego. Dlatego też konieczne jest "brutalne" nadpisanie parametru adresu usługi w naszej klasie dziedziczącej.
  1. $location = "https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc"; //po przejściu na środowisko produkcyjne zmieniamy zawartość tego parametru na adres otrzymany od konsultantów GUS
Go to the top of the page
+Quote Post
Pyton_000
post
Post #24





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

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


Tak jakby nie dało się zrobić normalnego API RESTfull (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
a_kawecki
post
Post #25





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 19.11.2013

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


Witam,

Skorzystałem z porad i udało mi się poprawnie zalogować.
Jednak mam problem z wykonaniem kolejnych operacji np. pobranie danych o statusie.

  1. class SoapClientGUS extends \SoapClient {
  2. public function __doRequest($req, $location, $action, $version = SOAP_1_2) {
  3. $location = "https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc";
  4. $response = parent::__doRequest($req, $location, $action, $version);
  5. $matches = array();
  6. preg_match("/<s:Envelope.*<\/s:Envelope>/s", $response, $matches);
  7. return $matches[0];
  8. }
  9. }
  10.  
  11. $contextOptions = array('http' => array('header' => 'sid: 2c2d7d3s7c7t5h2n2k4b'));
  12. $stream_context = stream_context_create($contextOptions);
  13.  
  14.  
  15. $soap = new SoapClientGUS("https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/wsdl/UslugaBIRzewnPubl.xsd", array('stream_context' => $stream_context, 'soap_version'=>SOAP_1_2));
  16. $header[]= new SoapHeader('http://www.w3.org/2005/08/addressing', 'Action', "http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/GetValue", 0);
  17. $header[]= new SoapHeader('http://www.w3.org/2005/08/addressing', 'To', "https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc", 0);
  18. $soap->__setSoapHeaders($header);
  19.  
  20. $result = $soap->GetValue(array('pNazwaParametru'=>'StatusUslugi'));
  21. echo $result->GetValueResponse;


Zapytanie zwraca błąd

  1. Notice: Undefined offset: 0 in E:\baza\htdocs\testy\gus_captcha.php on line 12
  2.  
  3. Fatal error: Uncaught SoapFault exception: [HTTP] Internal Server Error in E:\baza\htdocs\testy\gus_captcha.php:9 Stack trace: #0 E:\baza\htdocs\testy\gus_captcha.php(9): SoapClient->__doRequest('<?xml version="...', 'https://wyszuki...', 'http://CIS/BIR/...', 2) #1 [internal function]: SoapClientGUS->__doRequest('<?xml version="...', 'https://wyszuki...', 'http://CIS/BIR/...', 2, 0) #2 E:\baza\htdocs\testy\gus_captcha.php(25): SoapClient->__call('GetValue', Array) #3 E:\baza\htdocs\testy\gus_captcha.php(25): SoapClientGUS->GetValue(Array) #4 {main} thrown in E:\baza\htdocs\testy\gus_captcha.php on line 9


Prośba o jakieś wskazówki.

Pozdrawiam,
Go to the top of the page
+Quote Post
ikario
post
Post #26





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 24.01.2012

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


Witam,
z góry przepraszam, popełniłem gafę w moim poście pisząc, że można pobrać adresy URL metod z postu #22. Jak przyjrzałem się teraz głębiej, okazuje się, że właściwy plik WSDL zawiera inne adresy tych metod, i tak dla przykładu właśnie GetValue ma adres http://CIS/BIR/2014/07/IUslugaBIR/GetValue, a nie tak jak kolega wprowadził w swoim kodzie http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/GetValue. To tak na szybko, pierwszy wykryty błąd.
Go to the top of the page
+Quote Post
a_kawecki
post
Post #27





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 19.11.2013

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


Witam,

Dziękuję za szybką odpowiedź.

Faktycznie po zmianie adresu i małej poprawce w zwracanej wartości, zaczęło działać.
Powoli zacznę wszystko zbierać w całość i podrzucę na forum.

Pozdrawiam,

  1. class SoapClientGUS extends \SoapClient {
  2. public function __doRequest($req, $location, $action, $version = SOAP_1_2) {
  3. $location = "https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc";
  4. $response = parent::__doRequest($req, $location, $action, $version);
  5. $matches = array();
  6. preg_match("/<s:Envelope.*<\/s:Envelope>/s", $response, $matches);
  7. return $matches[0];
  8. }
  9. }
  10.  
  11. $contextOptions = array('http' => array('header' => 'sid: '.$sesja));
  12. $stream_context = stream_context_create($contextOptions);
  13.  
  14.  
  15. $soap = new SoapClientGUS("https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/wsdl/UslugaBIRzewnPubl.xsd", array('stream_context' => $stream_context, 'soap_version'=>SOAP_1_2));
  16. $header[]= new SoapHeader('http://www.w3.org/2005/08/addressing', 'Action', "http://CIS/BIR/2014/07/IUslugaBIR/GetValue", 0);
  17. $header[]= new SoapHeader('http://www.w3.org/2005/08/addressing', 'To', "https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc", 0);
  18. $soap->__setSoapHeaders($header);
  19.  
  20. $result = $soap->GetValue(array('pNazwaParametru'=>'StatusSesji'));
  21.  
  22. echo $result->GetValueResult;
Go to the top of the page
+Quote Post
denis95x
post
Post #28





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 21.02.2015
Skąd: Bielsko-Biała

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


Czy udalo się komuś z tym poradzić w końcu ?
Go to the top of the page
+Quote Post
deomike
post
Post #29





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 5.08.2016

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


Z tego co wiem to w lipcu 2016r. API do GUS znowu uległo zmianie.... Szczegóły opisali w dokumentacji, ale jak tak dalej pójedzie, to raz na pół roku trzeba będzie grzebać w kodzie żeby dostosować się do wprowadzanych przez nich zmian.. (IMG:style_emoticons/default/sad.gif)
Na github.com albo sourceforge.com masz gotowe, darmowe biblioteki, które umożliwiają wykorzystanie GUS API, np:
https://sourceforge.net/projects/nip24-pl-gus-api/files/

Z tego co widzę to są na bieżąco aktualizowane.
Go to the top of the page
+Quote Post
kitaboy
post
Post #30





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 18.11.2016

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


Dzień Dobry!

Potrzebuję na mojej stronie skorzystać z wyszukiwarki danych z GUS po NIP-ie i gdy podany nip będzie prawidłowy uzupełni mi pola tekstowe takie jak Nip, Kod-pocztowy, miasto itp. Potrzebuję jakiegoś kodu php, żebym miał się na czym wzorować.

Z poważaniem.
Go to the top of the page
+Quote Post
margdoc
post
Post #31





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 6.07.2017

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


Witam,

Próbuję się dostać do testowych danych GUS i wygląda to tak: udaje mi się zalogować (dostaję identyfikator sesji), ale nie potrafię wyciągnąć nic, co wymaga podania tego identyfikatora.
Jeśli zapytam przez GetValue o KomunikatUslugi lub StatusUslugi - dostaję odpowiedź (usługa dostepna). Ale te parametry nie wymagają podania sid.
Kiedy pytam o StatusSesji - dostaję 0 (czyli wg instrukcji "sesja nie istnieje").
Wygląda to tak, jakbym nie podawał prawidłowo identyfikatora, chociaż wszystko robiłem na podstawie Waszych postów:

  1. $options['soap_version'] = SOAP_1_2;
  2. //tu klasa SoapClientGUS i logowanie
  3. //...
  4. $options['stream_context'] = stream_context_create(array('http' => array('header' => 'sid: '.$otrzymanyIdentyfikatorSesji)));
  5.  
  6. $soap = new SoapClientGUS("https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/wsdl/UslugaBIRzewnPubl.xsd", $options);
  7. $header[]= new SoapHeader('http://www.w3.org/2005/08/addressing', 'Action', "http://CIS/BIR/2014/07/IUslugaBIR/GetValue", 0);
  8. $header[]= new SoapHeader('http://www.w3.org/2005/08/addressing', 'To', "https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc", 0);
  9. $soap->__setSoapHeaders($header);
  10.  
  11. $result = $soap->GetValue(array('pNazwaParametru'=>'StatusSesji'));
  12.  
  13. echo $result->GetValueResult;


Może czegoś tu jednak brakuje? Czegoś, co jest dla Was oczywiste? (IMG:style_emoticons/default/smile.gif)

Go to the top of the page
+Quote Post
Zajec
post
Post #32





Grupa: Zarejestrowani
Postów: 1 086
Pomógł: 8
Dołączył: 10.12.2003

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


Odgrzebuję ten stary temat, bo to jedyne miejsce gdzie znalazłem dyskusję i pomocne informacje na temat używania SoapClient do komunikacji z REGON API. Korzystając z powyższych doświadczeń napisałem swoją klasę rozszerzającą SoapClient.

Zalety:
  1. Domyślnie wybiera SOAP 1.2
  2. Obchodzi problem braku obsługi Multipart messages
  3. Automatycznie dodaje nagłówki WS-Address bez potrzeby ręcznego podawania URL
  4. Pozwala na wygodne dodanie sid (identyfikatora sesji) po zalogowaniu


  1. // SPDX-License-Identifier: Unlicense
  2. class SoapClientGUS extends \SoapClient {
  3. protected $stream;
  4.  
  5. function __construct(?string $wsdl, array $options = [])
  6. {
  7. $this->stream = stream_context_create();
  8.  
  9. $options = array_merge([
  10. // Use SOAP 1.2 to avoid: Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'multipart/related; type="application/xop+xml"'.
  11. 'soap_version' => SOAP_1_2,
  12. // Custom stream to allow adding HTTP headers
  13. 'stream_context' => $this->stream,
  14. ], $options);
  15.  
  16. return parent::__construct($wsdl, $options);
  17. }
  18.  
  19. public function __doRequest($request, $location, $action, $version, $one_way = null)
  20. {
  21. // GUS requires WS-Addressing
  22. $dom = new DomDocument('1.0');
  23. $dom->loadXML($request);
  24. $header = $dom->createElementNS('http://www.w3.org/2003/05/soap-envelope', 'Header');
  25. $header->appendChild($dom->createElementNS('http://www.w3.org/2005/08/addressing', 'Action', $action));
  26. $header->appendChild($dom->createElementNS('http://www.w3.org/2005/08/addressing', 'To', $location));
  27. $dom->documentElement->insertBefore($header, $dom->documentElement->firstChild);
  28. $request = $dom->saveXML();
  29.  
  30. $response = parent::__doRequest($request, $location, $action, $version);
  31.  
  32. // Get just an XML from the multipart message response (SoapClient doesn't support it)
  33. return preg_replace('/.*\n(<.*>).*/s', '\1', $response);
  34. }
  35.  
  36. public function __setSid($sid)
  37. {
  38. stream_context_set_option($this->stream, [
  39. 'http' => [
  40. 'header' => 'sid: '. $sid,
  41. ]
  42. ]);
  43. }
  44. }


Do tego dosyć kompletny przykład użycia:

  1. // SPDX-License-Identifier: Unlicense
  2. define('GUS_REGON_WSDL', 'https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/wsdl/UslugaBIRzewnPubl-ver11-test.wsdl');
  3. define('GUS_REGON_KEY', 'abcde12345abcde12345');
  4.  
  5. //define('GUS_REGON_WSDL', 'https://wyszukiwarkaregon.stat.gov.pl/wsBIR/wsdl/UslugaBIRzewnPubl-ver11-prod.wsdl');
  6. //define('GUS_REGON_KEY', 'putyoursecretkeyhere');
  7.  
  8. try {
  9. $gus = new SoapClientGUS(GUS_REGON_WSDL);
  10.  
  11. /* Sign in */
  12.  
  13. $result = $gus->Zaloguj([
  14. 'pKluczUzytkownika' => GUS_REGON_KEY,
  15. ]);
  16. if (empty($result->ZalogujResult)) {
  17. throw new Exception('Failed to login');
  18. }
  19.  
  20. $sid = $result->ZalogujResult;
  21. $gus->__setSid($result->ZalogujResult);
  22.  
  23. /* Search */
  24.  
  25. $result = $gus->DaneSzukajPodmioty([
  26. 'pParametryWyszukiwania' => [
  27. 'Nip' => '5261040828',
  28. ],
  29. ]);
  30. var_dump($result->DaneSzukajPodmiotyResult);
  31.  
  32. /* Report */
  33.  
  34. $result = $gus->DanePobierzPelnyRaport([
  35. 'pRegon' => '000331501',
  36. ]);
  37. var_dump($result->DanePobierzPelnyRaportResult);
  38.  
  39. /* Sign out */
  40.  
  41. $result = $gus->Wyloguj([
  42. 'pIdentyfikatorSesji' => $sid,
  43. ]);
  44. } catch (Exception $e) {
  45. echo $e->getMessage();
  46. }
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 16:49