Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ PHP _ [PHP/SOAP] eWUS - info o pacjencie

Napisany przez: kufalo 2.01.2013, 13:48:58

Witam,

Probuje przy wykorzystaniu:

Cytat
Definicję testowej usługi autoryzacji można znaleźć pod adresem:
https://ewus.nfz.gov.pl/ws-broker-server-ewus-auth-test/services/Auth?wsdl

Definicję testowej usługi ServiceBroker można znaleźć pod adresem:
https://ewus.nfz.gov.pl/ws-broker-server-ewus-auth-test/services/ServiceBroker?wsdl


pobrac info o pacjencie.

Analizujac xml'e:
Kod
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:auth="http://xml.kamsoft.pl/ws/kaas/login_types">
   <soapenv:Header/>
   <soapenv:Body>
             <auth:login>
                <auth:credentials>
                    <auth:item>
                        <auth:name>domain</auth:name>
                        <auth:value><auth:stringValue>01</auth:stringValue></auth:value>
                    </auth:item>
                    <auth:item>
                        <auth:name>type</auth:name>
                        <auth:value><auth:stringValue>SWD</auth:stringValue></auth:value>
                    </auth:item>
                    <auth:item>
                        <auth:name>idntSwd</auth:name>
                        <auth:value><auth:stringValue>123456789</auth:stringValue></auth:value>
                    </auth:item>
                    <auth:item>
                        <auth:name>login</auth:name>
                        <auth:value><auth:stringValue>TEST</auth:stringValue></auth:value>
                    </auth:item>
                </auth:credentials>
                        <auth:password>qwerty!@#</auth:password>
            </auth:login>
   </soapenv:Body>
</soapenv:Envelope>


Kod
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header>
      <ns1:session id="6F3FE3EA6BE54C5630F4F08E6FD0B803" xmlns:ns1="http://xml.kamsoft.pl/ws/common"/>
      <ns1:authToken id="BSbgyPBVy9Ww0B6al0DFuf" xmlns:ns1="http://xml.kamsoft.pl/ws/common"/>
   </soapenv:Header>
   <soapenv:Body>
      <ns1:loginReturn xmlns:ns1="http://xml.kamsoft.pl/ws/kaas/login_types">3</ns1:loginReturn>
   </soapenv:Body>
</soapenv:Envelope>


udalo mi sie zalogowac za pomoca stworzonego skrypyu:

Kod
<?
$client=new SoapClient('https://ewus.nfz.gov.pl/ws-broker-server-ewus-auth-test/services/Auth?wsdl');

$responce=$client->login(['credentials'=>[['name'=>'domain','value'=>['stringValue'=>'01']],['name'=>'type','value'=>['stringValue'=>'SWD']],['name'=>'idntSwd','value'=>['stringValue'=>'123456789']],['name'=>'login','value'=>['stringValue'=>'TEST']]],'password'=>'qwerty!@#']);

print($responce);
?>


Pytanie co dalej .......jak odebrac stringi session i authToken w naglowka odpowiedzi?
Sa one potrzebne w kolejnym zapytaniu zwracajacym dane pacjenta.

Napisany przez: eMCeH 3.01.2013, 15:23:19

Nie zauważyłem, że założyłeś nowy wątek...

rozwiązanie tkwi chyba w samej definicji __soapCall;
zgodnie z opisem z php.net:


tylko jak to zapisać?
gdy dla kodu:
  1. $parametry = ['credentials'=>
  2. [
  3. ['name'=>'domain','value'=>['stringValue'=>'15']],
  4. ['name'=>'login','value'=>['stringValue'=>$user]]
  5. ],
  6. 'password'=>$pass];

działa:
  1. $sesja = $client->login($parametry);

nie działa:
  1. $sesja = $client->__soapCall('login',$parametry);

zgłaszając błąd:
Kod
Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object has no 'credentials' property in...


no i rozwiązanie:

  1. $user = 'TEST1';
  2. $pass = 'qwerty!@#';
  3. $parametry = ['credentials'=>
  4. [
  5. ['name'=>'domain','value'=>['stringValue'=>'15']],
  6. ['name'=>'login','value'=>['stringValue'=>$user]]
  7. ],
  8. 'password'=>$pass];
  9.  
  10. http://www.php.net/echo 'parametry :';var_dump($parametry);
  11. http://www.php.net/echo '<br />';
  12. $sesja = $client->login($parametry);
  13. http://www.php.net/echo 'sesja:';var_dump($sesja);echo '<br />';
  14. http://www.php.net/echo '<br />';
  15.  
  16. $sesja = $client->__soapCall('login',http://www.php.net/array($parametry), null, null, $header);
  17. http://www.php.net/echo 'sesja2:';var_dump($sesja);echo '<br />';
  18. http://www.php.net/echo '<br />';
  19. http://www.php.net/var_dump($header);
  20. http://www.php.net/echo '<br />';


dalej juz dasz radę?

ja nie daję... jak wyciągnąć te dwie wartości? var_dump:
Kod
HEADER: array(2) { ["session"]=> object(stdClass)#2 (1) { ["id"]=> string(32) "96208C312BB6A5D38C11D7293B4D4F9B" } ["authToken"]=> object(stdClass)#3 (1) { ["id"]=> string(22) "BSoFd_Jmu9iR6wtvx14Dvf" } }

Napisany przez: marekpulawy 5.01.2013, 15:55:07

A rozgryzł już ktoś jak po zalogowaniu sprawdzić ubezpieczenie pacjenta?
Logowanie już opanowane:

  1. <?php
  2. function objectToArray($d) {
  3. if (http://www.php.net/is_object($d)) {
  4. $d = get_object_vars($d);
  5. }
  6. if (http://www.php.net/is_array($d)) {
  7. return http://www.php.net/array_map(__FUNCTION__, $d);
  8. }
  9. else {
  10. return $d;
  11. }
  12. }
  13.  
  14. $client=new SoapClient('https://ewus.nfz.gov.pl/ws-broker-server-ewus-auth-test/services/Auth?wsdl');
  15. $user = 'TEST1';
  16. $pass = 'qwerty!@#';
  17. $parametry = ['credentials'=>
  18. [
  19. ['name'=>'domain','value'=>['stringValue'=>'15']],
  20. ['name'=>'login','value'=>['stringValue'=>$user]]
  21. ],
  22. 'password'=>$pass];
  23.  
  24. $sesja = $client->login($parametry);
  25. $sesja = $client->__soapCall('login',http://www.php.net/array($parametry), null, null, $header);
  26. http://www.php.net/echo 'sesja: '.$sesja.'';
  27. http://www.php.net/echo '<br />';
  28. $array = objectToArray($header);
  29. //var_dump($array);
  30. //echo '<br />';
  31. http://www.php.net/echo 'Session: '.$array['session']['id'].'';
  32. http://www.php.net/echo '<br />';
  33. http://www.php.net/echo 'Token: '.$array['authToken']['id'].'';
  34. ?>

Napisany przez: eMCeH 5.01.2013, 18:50:39

logowanie mamy ale jak się wylogować?

status_cwu sprawdzasz na innym adresie www

Napisany przez: marekpulawy 5.01.2013, 19:06:31

Cytat(eMCeH @ 5.01.2013, 18:50:39 ) *
status_cwu sprawdzasz na innym adresie www

Na innym? A masz już może jakieś pomysły jak wywołać to sprawdzenie pacjenta?

Napisany przez: eMCeH 5.01.2013, 19:11:18

próbowałem:

  1. $wylogowanie = $client->__soapCall('logout',http://www.php.net/array($header), null, null, $header2);
  2. http://www.php.net/var_dump($wylogowanie);

ale wywala błędy

status_cwu sprawdzasz na innym adresie www:
Kod
     https://ewus.nfz.gov.pl/ws-broker-server-ewus-auth-test/services/ServiceBroker?wsdl


cały czas nad tym siedzę (z przerwami na sprawdzenia, rozliczenia itp... wink.gif

Napisany przez: szaitis 6.01.2013, 19:35:08

cześć
Też próbuję zmierzyć się z tym problemem i mam niestety cały czas problem z logowaniem.

używam:
$client=new SoapClient('https://ewus.nfz.gov.pl/ws-broker-server-ewus-auth-test/services/Auth?wsdl');
$user = 'TEST1';
$pass = 'qwerty!@#';
$parametry = ['credentials'=>[['name'=>'domain','value'=>['stringValue'=>'15']],['name'=>'login','value'=>['stringValue'=>$user]]],'password'=>$pass];

i wyrzuca mi błąd:
Parse error: syntax error, unexpected '[' in C:\AppServ\www\victoria2\ewus.php on line 28
czyli jest to błąd w linii $parametry

jak używałam wcześniejszych wywołań z forum to za każym razem mam błąd odnośnie tego nawiasu '['

czy używa ktoś php w wersji 5.2.6? może powinnam podnieść wersję?

będę wdzięczna za jakiekolwiek sugestie

Napisany przez: marekpulawy 6.01.2013, 20:22:10

Wg mnie to jest wina starej wersji PHP. U mnie na wersji 5.4.3 nie wyrzuca tego błędu.
Na drugim serwerze mam 5.2.17 i mam taki sam błąd jak u Ciebie.

Napisany przez: eMCeH 6.01.2013, 20:47:07

kod logowania, który skleił ostatecznie marekpulawy jest 100% działający


logout poddałem się...

próbuję dopisać do tamtego kodu

  1. $clientBroker = new SoapClient('https://ewus.nfz.gov.pl/ws-broker-server-ewus/services/ServiceBroker?wsdl');
  2. $functions = $clientBroker->__getFunctions();
  3. http://www.php.net/echo '<br />';
  4. http://www.php.net/echo 'DOSTĘPNE FUNKCJE:'; http://www.php.net/var_export($functions);
  5. http://www.php.net/echo '<br />';
  6.  
  7. $sesjaReturn = $clientBroker->__soapCall('executeService',http://www.php.net/array($parametry), $header, null, $header2);


Kod
DOSTĘPNE FUNKCJE:array ( 0 => 'ServiceResponse executeService(ServiceRequest $request)', )

ale wyrzuca błąd:
Kod
Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object has no 'location'

Napisany przez: marekpulawy 6.01.2013, 21:12:06

a co masz tym razem w zmiennej $parametry?
bo w zmiennej $header masz session i authToken?

Napisany przez: d_adamkiewicz 6.01.2013, 21:18:20

Hym, wiem niewiele, ale wydaje mi się, że po zalogowaniu najpierw trzeba ustawić nagłówki z session id i authToken id

coś jak

$auth = ['session'=>['id'=>$array['session']['id']], 'authToken'=>['id'=>$array['authToken']['id']]];
$hd = new SoapHeader("http://xml.kamsoft.pl/ws/common", "com", $auth, false);
$return = $client->__setSoapHeaders($hd);

tylko, że to zwraca FALSE a nie TRUE - czyli coś jest nie tak

Napisany przez: eMCeH 6.01.2013, 21:18:30

te same parametry co w przypadku logowania

  1. $parametry = ['credentials'=>
  2. [
  3. ['name'=>'domain','value'=>['stringValue'=>$domain]],
  4. ['name'=>'login','value'=>['stringValue'=>$login]]
  5. ],
  6. 'password'=>$password];


błądzę po omacku
na jednych forach (np. C#) mówią, iż jest bład w pliku definicji wsdl
na innych iż błąd polega na tym, iż są dwie namespace...
Niestety w xml raczkuję - to jest głęboka woda dla mnie i próbuję się nie utopić...

nagłówek przecież wysyłam też przy wywołaniu
  1. __soapCall('executeService',http://www.php.net/array($parametry), $header, null, $header2)

- parametr $header

Napisany przez: d_adamkiewicz 6.01.2013, 21:32:03

Teraz zwraca TRUE, chyba;)


$hd = [
new SoapHeader("http://xml.kamsoft.pl/ws/common", "com", ['session'=>['id'=>$array['session']['id']]], true),
new SoapHeader("http://xml.kamsoft.pl/ws/common", "com", ['authToken'=>['id'=>$array['authToken']['id']]], true),
];

$return = $client->__setSoapHeaders($hd);

if ($return == TRUE) {
echo "<br>TRUE";
}

i to działa;)

$functions = $client->__getFunctions();
var_export($functions);

Napisany przez: eMCeH 6.01.2013, 21:42:16

$client =
Auth czy ServiceBroker?

Napisany przez: d_adamkiewicz 6.01.2013, 21:52:27

Auth

Nie znam się, ale wydaje mi się, że teraz

$response = $client->__doRequest(
"checkCWU",
"https://ewus.nfz.gov.pl/ws-broker-server-ewus-auth-test/services/ServiceBroker?wsdl",
"executeService",
"1.0");

tylko, że to nie działa;)

var_export($response);

daje takie coś

'http://www.w3.org/2005/08/addressing/soap/faultcom.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character \'c\' (code 99) in prolog; expected \'<\' at [row,col {unknown-source}]: [1,1]

Napisany przez: eMCeH 6.01.2013, 22:11:48

w zapytaniu checkCWU musisz przesłać pesel oraz równolegle nazwę i wersję swojego systemu

Napisany przez: d_adamkiewicz 6.01.2013, 22:31:31

Może po

$client->__setSoapHeaders($hd);

trzeba:

$clientBroker = new SoapClient('https://ewus.nfz.gov.pl/ws-broker-server-ewus/services/ServiceBroker?wsdl');

$response = $clientBroker->__soapCall('executeService', ['status_cwu_pyt'=>['numer_pesel'=>49091480757],['system_swiad'=>['nazwa'=>"eWUS", 'wersja'=>"2.0"]]]);


Wprawdzie wywala mi to z błędem:
Fatal error: Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object has no 'location' property in index.php:49 Stack trace: #0 index.php(49): SoapClient->__soapCall('executeService', Array) #1 {main} thrown in index.php on line 49

ale wydaje mi się że nie podałem wszystkich parametrów jako drugi argument

Napisany przez: marekpulawy 6.01.2013, 22:38:58

  1. $response = $clientBroker->__soapCall('executeService', ['status_cwu_pyt'=>['numer_pesel'=>49091480757],['system_swiad'=>['nazwa'=>"eWUS", 'wersja'=>"2.0"]]], null, null, $wynik);


dodałem parametry do soapCall ale mi też wywala błąd

Napisany przez: eMCeH 6.01.2013, 23:09:22

identyczny komunikat dostaję w swoim wywołaniu

  1. $sesjaReturn = $clientBroker->__soapCall('executeService',http://www.php.net/array($parametry), $header, null, $header2);

Napisany przez: d_adamkiewicz 6.01.2013, 23:26:02

  1. $response = $clientBroker->__soapCall('executeService',
  2. ['parameters'=>[
  3. 'location'=>[
  4. 'namespace'=>"nfz.gov.pl/ws/broker/cwu",
  5. 'localname'=>"checkCWU",
  6. 'version'=>"1.0"],
  7. 'date'=>"2008-09-12T09:37:36.406+01:00",
  8. 'payload'=>[
  9. 'status_cwu_pyt'=>[
  10. 'numer_pesel'=>49091480757,
  11. 'system_swiad'=>[
  12. 'nazwa'=>"eWUS",
  13. 'wersja'=>"2.0"
  14. ]
  15. ]
  16. ]
  17. ]
  18. ]
  19. );


Tamte błędy znikły - pojawia się:
Fatal error: Uncaught SoapFault exception: [soapenv:Server] unknown in index.php

Napisany przez: eMCeH 7.01.2013, 00:38:26

  1. $parametry = ['location'=>
  2. [
  3. ['namespace'=>'nfz.gov.pl/ws/broker/cwu'],
  4. ['localname'=>'checkCWU'],
  5. ['version'=>'1.0']
  6. ],
  7. ['date'=>'2008-09-12T09:37:36.406+01:00'],
  8. ['payload'=>[
  9. ['textload'=>[
  10. 'status_cwu_pyt'=>[
  11. ['numer_pesel'=>49091480757],
  12. ['system_swiad'=>[
  13. ['nazwa'=>"eWUS"],
  14. ['wersja'=>"2.0"]
  15. ]
  16. ]
  17. ]
  18. ]
  19. ]
  20. ]
  21. ]
  22. ];
  23. // $hd = [
  24. // new SoapHeader("http://xml.kamsoft.pl/ws/common", "com", ['session'=>['id'=>$array['session']['id']]], true),
  25. // new SoapHeader("http://xml.kamsoft.pl/ws/common", "com", ['authToken'=>['id'=>$array['authToken']['id']]], true),
  26. // ];
  27. // $sesjaReturn = $clientBroker->__soapCall('executeService',array($parametry),$hd,NULL, $header2);
  28.  
  29. $sesjaReturn = $clientBroker->__soapCall('executeService',http://www.php.net/array($parametry),$header,NULL, $header2);


zgłasza mi
Kod
Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object has no 'namespace' property

Napisany przez: marekpulawy 7.01.2013, 13:56:08

Udało się komuś rozgryźć temat zapytania eWUS o ubezpieczenie pacjenta?

I jeszcze jedno: czy w parametrach executeService nie należy podać session i authToken?

Napisany przez: eMCeH 7.01.2013, 14:24:05

trzeba, trzeba... jak widzisz "powyżej" - na dwa sposoby nawet rozwiązane (bezpośrednio w zapytaniu lub definiując wcześniej header

problem - co dalej?

Napisany przez: marekpulawy 7.01.2013, 14:31:04

Fatal error: Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object has no 'namespace' property

Może źle jest zdefiniowana ta tablica $parametry, jeśli krzyczy że jest nieprawidłowe namespace?

Napisany przez: eMCeH 7.01.2013, 14:38:46

ja zrozumiałem, że "nie ma obiektu namespace"; za szybko czytam poprostu - to przez ten eWUŚ, rozliczenia, koniec roku itp. wink.gif

tak jak pisałem - na forach innych języków programowania pisali, że używane są dwa różne namespace ale nikt nie powiedział jak go użyć prawidłowo.

Napisany przez: szaitis 7.01.2013, 15:00:29

Ja próbuję po zalogowaniu się takiego czegoś:

$clientBroker = new SoapClient('https://ewus.nfz.gov.pl/ws-broker-server-ewus-auth-test/services/ServiceBroker?wsdl');
// $functions = $clientBroker->__getFunctions();
// echo '<br />';
// echo 'DOSTĘPNE FUNKCJE:'; var_export($functions);
// echo '<br />';

// $sesjaReturn = $clientBroker->__soapCall('executeService',array($parametry), $header, null, $header2);

$parametry = ['location'=>
[
['namespace'=>'nfz.gov.pl/ws/broker/cwu'],
['localname'=>'checkCWU'],
['version'=>'1.0']
],
['date'=>'2008-09-12T09:37:36.406+01:00'],
['payload'=>[
['textload'=>[
'status_cwu_pyt'=>[
['numer_pesel'=>10101010101],
['system_swiad'=>[
['nazwa'=>"eWUS"],
['wersja'=>"2.0"] ]] ] ] ] ] ] ];

$sesjaReturn = $clientBroker->__soapCall('executeService',array($parametry),$header,NULL, $header2);

i zwraca mi taki komunikat:

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: <message> 'executeServiceRequestMsg' already defined in C:\AppServ\www\ewus\ewus.php:43
Stack trace: #0 C:\AppServ\www\ewus\ewus.php(43): SoapClient->SoapClient('https://ewus.nf...') #1 {main} thrown in C:\AppServ\www\ewus\ewus.php on line 43

Miał ktoś coś podobnego?

Napisany przez: eMCeH 7.01.2013, 15:13:46

ja chyba też tak miałem - na testowej błąd dublowania a na roboczej ok.

Napisany przez: szaitis 7.01.2013, 15:33:58

dzięki smile.gif
rzeczywiście na produkcji ten błąd nie występuje smile.gif

Napisany przez: webdice 7.01.2013, 15:56:37

~szaitis o tagach bbcode słyszałeś? Jeśli nie to poczytaj i popraw swoje posty.

Napisany przez: eMCeH 7.01.2013, 16:49:15

...niestety dalej problem z namespace nierozwiązany...

a wiesz jak się wylogować? co prawda po nowym zalogowaniu lub po zamknięciu przeglądarki sesja ulega zniszczeniu ale ładnie by było wylogowac się wink.gif

Napisany przez: webdice 7.01.2013, 17:04:46

Wiecie że to ma działać od 1 stycznia?

  1. <?php
  2.  
  3. $client = new SoapClient( 'https://ewus.nfz.gov.pl/ws-broker-server-ewus/services/Auth?wsdl', http://www.php.net/array
  4. (
  5. 'trace' => true
  6. ));
  7.  
  8. $response = $client->login( http://www.php.net/array
  9. (
  10. 'credentials' => http://www.php.net/array
  11. (
  12. 'item' => http://www.php.net/array
  13. (
  14. http://www.php.net/array(
  15. 'name' => 'domain',
  16.  
  17. 'value' => http://www.php.net/array
  18. (
  19. 'stringValue' => '06'
  20. )
  21. ),
  22.  
  23. http://www.php.net/array(
  24. 'name' => 'type',
  25.  
  26. 'value' => http://www.php.net/array
  27. (
  28. 'stringValue' => 'SWD'
  29. )
  30. ),
  31.  
  32. http://www.php.net/array(
  33. 'name' => 'idntSwd',
  34.  
  35. 'value' => http://www.php.net/array
  36. (
  37. 'stringValue' => '[identifkator]'
  38. )
  39. ),
  40.  
  41. http://www.php.net/array(
  42. 'name' => 'login',
  43.  
  44. 'value' => http://www.php.net/array
  45. (
  46. 'stringValue' => '[login]'
  47. )
  48. )
  49. )
  50. ),
  51.  
  52. 'password' => '[hasło]'
  53. ));
  54.  
  55. http://www.php.net/print '<pre>' . http://www.php.net/print_r( $client->__getLastResponse(), true ) . '<pre>';


Nauczcie się wreszcie czytać manuale/dokumentacje.

Napisany przez: eMCeH 7.01.2013, 17:28:59

wiesz, logowanie to już jakiś czas temu było zrobione (patrz wcześniejsze posty). ja pytałem o logout.

tak na marginesie - skoro masz działający kod to zamiast się złościć i odsyłać do dokumentacji mógłbyś coś podpowiedzieć w trakcie naszych prób "sklecenia" kodu abyśmy i my zrozumieli...

Napisany przez: marekpulawy 7.01.2013, 17:51:43

webdice mógłbyś zdradzić jak sobie poradziłeś ze sprawdzaniem ubezpieczenia pacjenta? albo podpowiedz gdzie robimy błąd

Napisany przez: eMCeH 8.01.2013, 08:21:12

jeszcze trzeba będzie pilnować czasu od zalogowania zgodnie z komunikatem NFZ:

Kod
http://www.nfz.gov.pl/new/index.php?katnr=9&dzialnr=4&artnr=5278


...umożliwiło też brak wylogowywania się smile.gif

a to 'item' przy logowaniu konieczne?

Napisany przez: szaitis 8.01.2013, 11:34:05

Udało sie już komuś to zapytanie o ubezpieczenie napisać? czy dalej na poziomie logowania są wszyscy?

Napisany przez: marekpulawy 8.01.2013, 11:47:17

niestety, ja dalej na poziomie logowania się zatrzymałem, ale cały czas walczę. jak coś to napiszę

Napisany przez: eMCeH 8.01.2013, 11:58:28

...ja też, niestety ograniczam próby logowania i wysyłki zapytań aby mnie weryfikator Departamentu Informatyki nie nakrył wink.gif
powiem szczerze, że nie wierzę aby nikt z forumowiczów nie miał gotowego rozwiązania tylko nie chce się podzielić z innymi, trudno, wspólnymi siłami coś tam się wymyśli i na pewno to opublikujemy

Napisany przez: gilek 8.01.2013, 12:37:57

Wersja "na chama" (w dodatku bez obsługi wyjątków), własciwie to nie do publikacji, ale lepsze to niż nic.

  1. $params = http://www.php.net/array(
  2. 'credentials' => http://www.php.net/array(
  3. http://www.php.net/array('name' => 'domain', 'value' => http://www.php.net/array('stringValue' => '15')),
  4. http://www.php.net/array('name' => 'login', 'value' => http://www.php.net/array('stringValue' => $user))
  5. ),
  6. 'password' => $pass);
  7.  
  8. $clientAuth = new SoapClient('https://ewus.nfz.gov.pl/ws-broker-server-ewus/services/Auth?wsdl', http://www.php.net/array('trace' => true));
  9. $clientAuth->__soapCall('login', http://www.php.net/array($params), null, null, $loginHeaders);
  10.  
  11. $xml = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://xml.kamsoft.pl/ws/common" xmlns:brok="http://xml.kamsoft.pl/ws/broker">
  12. <soapenv:Header>
  13. <com:session id="' . $loginHeaders['session']->id . '" xmlns:ns1="http://xml.kamsoft.pl/ws/common"/>
  14. <com:authToken id="' . $loginHeaders['authToken']->id . '" xmlns:ns1="http://xml.kamsoft.pl/ws/common"/>
  15. </soapenv:Header>
  16. <soapenv:Body>
  17. <brok:executeService>
  18. <com:location>
  19. <com:namespace>nfz.gov.pl/ws/broker/cwu</com:namespace>
  20. <com:localname>checkCWU</com:localname>
  21. <com:version>2.0</com:version>
  22. </com:location>
  23. <brok:date>2008-09-12T09:37:36.406+01:00</brok:date>
  24. <brok:payload>
  25. <brok:textload>
  26. <ewus:status_cwu_pyt xmlns:ewus="https://ewus.nfz.gov.pl/ws/broker/ewus/status_cwu/v2">
  27. <ewus:numer_pesel>00000000000</ewus:numer_pesel>
  28. <ewus:system_swiad nazwa="eWUS" wersja="2012.07.1.0"/>
  29. </ewus:status_cwu_pyt>
  30. </brok:textload>
  31. </brok:payload>
  32. </brok:executeService>
  33. </soapenv:Body>
  34. </soapenv:Envelope>';
  35.  
  36. $clientBroker = new SoapClient('https://ewus.nfz.gov.pl/ws-broker-server-ewus/services/ServiceBroker?wsdl', http://www.php.net/array('trace' => true, 'exceptions' => true));
  37. $r = $clientBroker->__doRequest($xml, 'https://ewus.nfz.gov.pl/ws-broker-server-ewus/services/ServiceBroker', 'executeService', SOAP_1_1);

Napisany przez: marekpulawy 8.01.2013, 12:57:24

jest mały błąd: </brok:stextload>
powinno być: </brok:textload>,
ale działa. Wielkie dzięki stary. Podaj adres gdzie mam piwo wysłać

Napisany przez: gilek 8.01.2013, 13:03:10

Dzięki, poprawiłem, to też moze sie przydać:

  1. $doc = new DOMDocument();
  2. $doc->loadXML($r);
  3. $xpath = new DOMXpath($doc);
  4. $xpath->registerNamespace('odp','https://ewus.nfz.gov.pl/ws/broker/ewus/status_cwu/v2');
  5.  
  6. $elements = $xpath->query("//odp:status_cwu");
  7. if ($elements->length !== 1)
  8. throw new Exception('OMG');
  9.  
  10. $status = $elements->item(0)->nodeValue;
  11. http://www.php.net/echo ' Status: '.$status;
  12.  

Napisany przez: szaitis 8.01.2013, 13:36:43

Także pozwolę sobie skorzystać i wielkie dzięki smile.gif

Napisany przez: Kris2X 8.01.2013, 22:52:41

A wie ktoś może jak się dobrać do kodu autoryzacji/id_operacji?

Napisany przez: eMCeH 8.01.2013, 22:59:37

w odpowiedzi na zapytanie otrzymujesz string, który musisz odpowiednio podzielić, siedzę nad tym teraz, jak zrobię wrzucę tutaj

ps. dzięki wielkie gilek (z jakiegoś powodu nie mogę dodać Ci "pomógł")

Napisany przez: Kris2X 8.01.2013, 23:01:39

Hmm... no właśnie kroję tego stringa ale kodu autoryzacji nie widzę, a z tego co wiem potrzebne to będzie do sprawozdań.

PS: Oczywiście dołączam się do podziękowań gilek biggrin.gif

Napisany przez: eMCeH 9.01.2013, 01:21:36

po kolei:
35 znaków to adres Brokera (nie wykorzystywany w potwierdzeniu
29 znanów to data i godzina
1 znak to status obecności nr pesel w CWU (1 - jest, 0 - nie ma)
11 znaków to nr pesel
9 znaków to nr świadczeniodawcy
2 znaki to nr NFZ
5 znaków to identyfikator operatora (czy tylko 5 znaków?)
1 znak to status potwierdzenia (1 - NFZ potwierdza, 0 - NFZ nie potwierdza)
16 znaków to data i godzina do kiedy ważne potwierdzenie

tu zaczynają się schodki -
kolejne znaki to
imię i nazwisko (ilość różna)

28 znaków to podpis? (skrót kodu autoryzacyjnego?)
kolejne znaki to kod autoryzacyjny (dla statusu ubezpieczenia 1- 172 znaki, dla 0-154)

nasuwają się pytania:
1. jak utworzyć nazwę pliku (id_operacji)?
2. czy jest jakaś inna metoda wyciągania elementów z komunikatu zwrotnego niż dzielenie stringa na "części"?
jeśli nie to imię i nazwisko trzeba odczytywać od 110 (licząc od początku) do 201 (licząc od końca) lub do 182 (licząc od końca).

Napisany przez: gilek 9.01.2013, 09:30:45

Odpowiedź w zmiennej $r to jest zwykły XML, zatem można po nim wędrować za pośrednictwem XPath. W poprzednim poście pokazałem jak odwołać się do statusu, poniższy kod odwołuje sie do id_operacji. Analogicznie można pobrać wszystkie elementy.

  1. $elements = $xpath->query("//odp:status_cwu_odp");
  2. if ($elements->length !== 1)
  3. throw new Exception('OMG 2');
  4. $id = $elements->item(0)->getAttribute('id_operacji');

Napisany przez: szaitis 9.01.2013, 09:44:52

A czy pacjent ubezpieczony czy nie jest tutaj jako 0 lub 1

$elements = $xpath->query("//odp:status_ubezp");
$status_ubezp = $elements->item(0)->nodeValue;

Napisany przez: gilek 9.01.2013, 09:45:55

dokładnie

Napisany przez: eMCeH 9.01.2013, 10:15:09

jakież to jest łatwe jak się widzi gotowe rozwiązanie... smile.gif

jak mogę odczytać całego XML aby widzieć wszystkie składowe? - nie w postaci stringa tak jak do tej pory.

gilek: wielkie dzięki

ps. gdzie można nauczyć się tak programować te XML'e?

Napisany przez: gilek 9.01.2013, 10:24:36

Jednym z rozwiązań jest skorzystanie z rozszerzenia DOM lub SimpleXML. Na podstawie stringa tworzone jest drzewo. Należy pamiętać, że w wynikowym XML, jest kilka przestrzeni nazw, należy jest zarejestrować, aby móc później wyszukiwać elementy do nich należące.

Przykład z DOM, jest kilka postów wstecz.

Można również dokonać transformacji poprzez XSLT do dowolnego formatu.

p.s. ja się w szkole nauczyłem, to są raczej podstawy, nie jestem wymiataczem...

Napisany przez: Kris2X 9.01.2013, 14:28:59

Wie ktoś może skąd mogę wyłowić informacje o oznaczeniu DN na receptach ?

Nieaktualne
Miałem starą wersję status_cwu.xsd

Napisany przez: eMCeH 10.01.2013, 01:52:16

...jak wyciągnąć nazwę i wersję systemu NFZ?

  1. $systemNFZnazwa = $xpath->query("//odp:system")->item(0)->getAttribute('nazwa');
  2. http://www.php.net/echo '<br />Nazwa systemu: '. $systemNFZnazwa;
  3.  
  4. $systemNFZwersja = $xpath->query("//odp:system")->item(0)->getAttribute('wersja');
  5. http://www.php.net/echo '<br />Wersja systemu: '. $systemNFZwersja;

błąd:
Kod
Call to a member function getAttribute() on a non-object


całość:
  1. function status ($potwierdzenie) {
  2. $doc = new DOMDocument();
  3. $doc->loadXML($potwierdzenie);
  4. $xpath = new DOMXpath($doc);
  5. $xpath->registerNamespace('odp','https://ewus.nfz.gov.pl/ws/broker/ewus/status_cwu/v2');
  6.  
  7. $statusCWU = $xpath->query("//odp:status_cwu")->item(0)->nodeValue;
  8. http://www.php.net/echo '<br /><br /> Status CWU (jest pesel czy nie?) : '.$statusCWU;
  9.  
  10. $statusUbezpieczenia = $xpath->query("//odp:status_ubezp")->item(0)->nodeValue;
  11. http://www.php.net/echo '<br />Status ubezpieczenia : '.$statusUbezpieczenia;
  12.  
  13. $receptaDN = $xpath->query("//odp:status_ubezp")->item(0)->getAttribute('ozn_rec');
  14. http://www.php.net/echo '<br />Oznaczenie recepty: '. $receptaDN;
  15.  
  16. $zwrotnyPesel = $xpath->query("//odp:numer_pesel")->item(0)->nodeValue;;
  17. http://www.php.net/echo '<br />zwrotny pesel: '. $zwrotnyPesel;
  18.  
  19. $pacjentImie = $xpath->query("//odp:imie")->item(0)->nodeValue;;
  20. http://www.php.net/echo '<br />Imię pacjenta: '. $pacjentImie;
  21.  
  22. $pacjentNazwisko = $xpath->query("//odp:nazwisko")->item(0)->nodeValue;;
  23. http://www.php.net/echo '<br />Imię pacjenta: '. $pacjentNazwisko;
  24.  
  25. $systemNFZ = $xpath->query("//odp:system_nfz")->item(0)->nodeValue;;
  26. http://www.php.net/echo '<br />System NFZ: '. $systemNFZ;
  27.  
  28. $swiadczeniodawca = $xpath->query("//odp:swiad")->item(0)->nodeValue;;
  29. http://www.php.net/echo '<br />Świadczeniodawca: '. $swiadczeniodawca;
  30.  
  31. $swiadczeniodawcaID = $xpath->query("//odp:id_swiad")->item(0)->nodeValue;;
  32. http://www.php.net/echo '<br />Świadczeniodawca: '. $swiadczeniodawcaID;
  33.  
  34. $nfzID = $xpath->query("//odp:id_ow")->item(0)->nodeValue;;
  35. http://www.php.net/echo '<br />NFZ: '. $nfzID;
  36.  
  37. $operatorID = $xpath->query("//odp:id_operatora")->item(0)->nodeValue;;
  38. http://www.php.net/echo '<br />Operator: '. $operatorID;
  39.  
  40. $idOperacji = $xpath->query("//odp:status_cwu_odp")->item(0)->getAttribute('id_operacji');
  41. http://www.php.net/echo '<br />ID operacji: '. $idOperacji;
  42.  
  43. $dataCzasOperacji = $xpath->query("//odp:status_cwu_odp")->item(0)->getAttribute('data_czas_operacji');
  44. http://www.php.net/echo '<br />Data i czas operacji: '. $dataCzasOperacji;
  45.  
  46. $dataWaznosciPotwierdzenia = $xpath->query("//odp:data_waznosci_potwierdzenia")->item(0)->nodeValue;
  47. http://www.php.net/echo '<br />Data ważności potwierdzenia : '.$dataWaznosciPotwierdzenia;
  48.  
  49. $systemNFZnazwa = $xpath->query("//odp:system")->item(0)->getAttribute('nazwa');
  50. http://www.php.net/echo '<br />Nazwa systemu: '. $systemNFZnazwa;
  51.  
  52. $systemNFZwersja = $xpath->query("//odp:system")->item(0)->getAttribute('wersja');
  53. http://www.php.net/echo '<br />Wersja systemu: '. $systemNFZwersja;
  54.  
  55. }

Napisany przez: szaitis 10.01.2013, 14:00:51

Powinno być chyba odwołanie do węzła system_nfz a nie system

  1. $systemNFZnazwa = $xpath->query("//odp:system_nfz")->item(0)->getAttribute('nazwa');
  2. http://www.php.net/echo '<br />Nazwa systemu: '. $systemNFZnazwa;

Napisany przez: eMCeH 10.01.2013, 14:32:59

ledwie coś załapię z tych xml'ów to znów "ciemność widzę..."
w status_cwu_2.xsd nie widzę "węzła" o którym mówisz; możesz mi to rozpracować?

  1. <xs:element name="status_cwu_odp">
  2. <xs:annotation>
  3. <xs:documentation>Komunikat z odpowiedzią dla świadczeniodawcy</xs:documentation>
  4. </xs:annotation>
  5. <xs:complexType>
  6. <xs:sequence>
  7. <xs:element name="status_cwu" type="xs:string">
  8. <xs:annotation>
  9. <xs:documentation>Status pozycji w systemie CWU - jest/nie ma</xs:documentation>
  10. </xs:annotation>
  11. </xs:element>
  12. <xs:element name="numer_pesel" type="pesel">
  13. <xs:annotation>
  14. <xs:documentation>Numer PESEL</xs:documentation>
  15. </xs:annotation>
  16. </xs:element>


jedyna wartość dla system_nfz to:

  1. <xs:element name="system_nfz" type="system">
  2. <xs:annotation>
  3. <xs:documentation>Informacja o systemie udzielającym odpowiedzi po stronie NFZ </xs:documentation>
  4. </xs:annotation>
  5. </xs:element>

i dalszy kod:
  1. <xs:element name="swiad" type="swiadczeniodawca">
  2. <xs:annotation>
  3. <xs:documentation>Identyfikacja operatora świadczeniodawcy wysyłającego zapytanie</xs:documentation>
  4. </xs:annotation>
  5. </xs:element>
  6. <xs:element name="pacjent" type="swiadczeniobiorca" minOccurs="0">
  7. <xs:annotation>
  8. <xs:documentation>Wystepuje tylko dla pacjentów zarejestrowanych w CWU</xs:documentation>
  9. </xs:annotation>
  10. </xs:element>
  11. <xs:element ref="dsig:Signature" minOccurs="0"/>
  12. </xs:sequence>
  13. <xs:attribute name="id_operacji" use="required">
  14. <xs:annotation>
  15. <xs:documentation>Unikalny identyfikator operacji sprawdzenia statusu ubezpieczenia</xs:documentation>
  16. </xs:annotation>
  17. <xs:simpleType>
  18. <xs:restriction base="xs:string">
  19. <xs:minLength value="8"/>
  20. <xs:maxLength value="20"/>
  21. </xs:restriction>
  22. </xs:simpleType>
  23. </xs:attribute>
  24. <xs:attribute name="data_czas_operacji" type="xs:dateTime" use="required">
  25. <xs:annotation>
  26. <xs:documentation>Data i czas dokonana sprawdzenia w systemie NFZ</xs:documentation>
  27. </xs:annotation>
  28. </xs:attribute>
  29. </xs:complexType>
  30. </xs:element>



chyba zajarzyłem: system_nfz jest tak jakby "obiektem" klasy "system" dlatego nie można odwoływac się do system tylko trzeba odwołać do system_nfz i wyciągnąć z niego atrybuty nazwa i wersja... dobrze myślę?

Napisany przez: d_adamkiewicz 10.01.2013, 15:10:40

Spójrz w "System eWUS - opis interfejs dostępowego v.1.2.pdf" na końcu masz:
"Komunikat odpowiedzi zawierający informacje o statusie uprawnienia do świadczeń"

tam jest opisane jaki to element

Napisany przez: eMCeH 10.01.2013, 15:18:54

1.2?

wrzuć proszę link do tego dokumentu.

mam podstawową, 1.1, 1.3

...w 1.1 i 1.3 też jest - rzeczywiście moje niedopatrzenie... jak widzę jeszcze sporo nauki przede mną... w pierwszej kolejności prawidłowo zapisać potwierdzenie do pliku smile.gif

Napisany przez: szaitis 10.01.2013, 16:06:48

Ja właśnie korzystałam z dokumentacji i tam znalazłam, że to system_nfz
a do pliku można zrzucać cały XML zwrotny
czyli po wywyłaniu loadXML i ustawieniu zmiennych np.

  1. $doc->loadXML
  2. $doc->save('C:/AppServ/www/ewus/'.$numer_pesel.'-'.$kod.'.xml');

Napisany przez: eMCeH 10.01.2013, 16:25:09

zapisujesz to w innej postaci niż potwierdzenia z NFZ - choć to nie jest problem bo id_operacji uzyskujemy z odpowiedzi;
podpis i jego skrót też zapisujesz do pliku?
jak go uzyskujesz skoro

  1. $sygnatura = $xpath->query("//odp:Signature")->item(0)->nodeValue;;
  2. http://www.php.net/echo '<br />Sygnatura: '. $sygnatura;


daje błąd
Kod
Trying to get property of non-object


mimo, że w specyfikacji 13 jest co_jest.gif

Napisany przez: d_adamkiewicz 10.01.2013, 16:28:47

  1. $xpath->registerNamespace('ds', 'http://www.w3.org/2000/09/xmldsig#');
  2.  
  3. $SignatureValue = $xpath->query("//ds:SignatureValue")->item(0)->nodeValue;;
  4. http://www.php.net/echo '<br />SignatureValue: '. $SignatureValue;
  5.  
  6. $DigestValue = $xpath->query("//ds:DigestValue")->item(0)->nodeValue;;
  7. http://www.php.net/echo '<br />ValueDigest: '. $DigestValue;

Napisany przez: eMCeH 10.01.2013, 16:53:59

no tak, podpis jest przecież opisany w:

Kod
xmldsig-core-schema.xsd


jak widzę macie duże doświadczenie w "automatach"; czy każdy serwis ma tak skomplikowaną strukturę, że trzeba korzystać z:
opisu sesji testowej,
opisu interfejsu v.1.0
opisu interfejsu v.1.3
plików .xsd (2x)
plików xml (2x)



Napisany przez: d_adamkiewicz 10.01.2013, 18:21:20

Można tak ($responseXML zawiera to co zrobił gilek):

  1. $doc = new DOMDocument();
  2. $doc->loadXML($responseXML);
  3. $match = $doc->getElementsByTagName('status_cwu_odp');//
  4. $foundXML = $doc->saveXML($match->item(0));
  5. $xpath = new DOMXpath($doc);
  6. $xpath->registerNamespace('odp','https://ewus.nfz.gov.pl/ws/broker/ewus/status_cwu/v2');
  7. $operId = $xpath->query("//odp:status_cwu_odp")->item(0)->getAttribute('id_operacji');
  8. file_put_contents($operId . '.xml', $foundXML);


Napisany przez: eMCeH 12.01.2013, 15:29:27

u "gilek"

Kod
$r


uzupełniony kod o zapis do folderów z 3-lit nazwą miesiąca:

  1. $doc = new DOMDocument();
  2. $doc->loadXML($r);
  3. $match = $doc->getElementsByTagName('status_cwu_odp');//
  4. $foundXML = $doc->saveXML($match->item(0));
  5. $xpath = new DOMXpath($doc);
  6. $xpath->registerNamespace('odp','https://ewus.nfz.gov.pl/ws/broker/ewus/status_cwu/v2');
  7. $operId = $xpath->query("//odp:status_cwu_odp")->item(0)->getAttribute('id_operacji');
  8.  
  9. http://www.php.net/setlocale(LC_ALL, 'pl_PL', 'pl', 'Polish_Poland.28592');
  10. $folderPotwierdzen = './potwierdzenia/' . http://www.php.net/strftime('%Y') . '/' . http://www.php.net/substr(http://www.php.net/strftime('%B'), 0, 3) . '/';
  11. if (!http://www.php.net/file_exists($folderPotwierdzen))
  12. http://www.php.net/mkdir($folderPotwierdzen, 0777, true);
  13.  
  14. file_put_contents($folderPotwierdzen. $operId . '.xml', $foundXML);


W przypadku podania błędnego nr pesel np. 00000000000 serwer zwraca :
Kod
soapenv:ServerNiepoprawny numer PESEL.nfz.gov.pl/ws/broker/cwucheckCWU2.0Client.InputExceptionBłędne dane wejściowe.pl.kamsoft.app.ws.broker.cwu.BrokerServiceAuth


jak to przechwycić do wyjątku?

  1. try {
  2. $clientBroker = new SoapClient($path . '?wsdl', http://www.php.net/array('trace' => 1, 'exceptions' => true));
  3. $potwierdzenie = $clientBroker->__doRequest($xml, $path, 'executeService', SOAP_1_1);
  4. }
  5. catch (Exception $e) {http://www.php.net/echo 'BŁĄD: ' . $e->getMessage().'<br>';}


przepuszcza i nie wyrzuca wyjątku

Napisany przez: gilek 14.01.2013, 08:04:23

Jeśli zwróci element Fault z przestrzeni nazw http://schemas.xmlsoap.org/soap/envelope/. Oczywiście nie jest to takie proste. W elemencie detail może znadować sie element z przestrzeni http://xml.kamsoft.pl/ws/common mówiący o typie błedu. W zależności od typu czasem należy odświeżyć sesje. Można to obsłużyć tak (kod jest powiązany z moimi klasami, rozważ koncepcje, nie rowiązanie):

  1. class EWUSException extends Exception {
  2. private $_type;
  3. public function http://www.php.net/settype($type) { $this->_type = $type; }
  4. public function http://www.php.net/gettype() { return $this->_type; }
  5. }


  1. /**
  2.   *
  3.   * @param string $response
  4.   * @throws Exception
  5.   * @throws EWUSException
  6.   */
  7. private function _parseResponse($response) {
  8. if (http://www.php.net/strlen($response)===0)
  9. throw new Exception('Brak odpowiedzi na żądanie.');
  10.  
  11. $doc = new DOMDocument();
  12. $doc->loadXML($response);
  13.  
  14. $xpath = new DOMXpath($doc);
  15. $xpath->registerNamespace('env', 'http://schemas.xmlsoap.org/soap/envelope/');
  16. $xpath->registerNamespace('com', 'http://xml.kamsoft.pl/ws/common');
  17.  
  18. $fault = $xpath->query('//env:Fault');
  19.  
  20. if ($fault->length===1) {
  21. $ee = new EWUSException();
  22.  
  23. $ks = $xpath->query('//com:*');
  24. if ($ks->length>=1)
  25. $ee->setType($ks->item(0)->localName);
  26.  
  27. throw $ee;
  28. }
  29. }


  1. try {
  2.  
  3. $r = $ec->checkCWU($pesel, EWUSClient::FLAG_STATUS | EWUSClient::FLAG_RESPONSE);
  4. } catch(EWUSException $ee) {
  5. switch($ee->getType()) {
  6. case 'authTokenError':
  7. case 'sessionError':
  8. $e->refreshSession(true);
  9. break;
  10.  
  11. case 'inputError':
  12. $result[$pesel] = http://www.php.net/array('error'=>'Błędne dane wejściowe.');
  13. break;
  14.  
  15. default:
  16. $result[$pesel] = http://www.php.net/array('error'=>'Nieznany błąd.');
  17. break;
  18.  
  19. }
  20. } catch(Exception $e) {
  21. $result[$pesel] = http://www.php.net/array('error'=>$e->getMessage());
  22. }

Napisany przez: d_adamkiewicz 16.01.2013, 16:29:23

  1. $doc = new DOMDocument();
  2. $doc->loadXML($r);
  3. $match = $doc->getElementsByTagName('status_cwu_odp');//
  4. $foundXML = $doc->saveXML($match->item(0));
  5. file_put_contents($operId . '.xml', $foundXML);


Czy, ktoś próbował tak utworzony plik potwierdzenia sprawdzać, weryfikować, wgrywać do programu do rozliczeń?
tzn. wiem, że Kamsoft nie udostępnia jeszcze dla KS PPS mechanizmu importu, ale może inne oprogramowanie?
Może szukam dziury w całym, ale wołałbym się upewnić.

Napisany przez: nitro18 17.05.2013, 00:18:18

Witam,

Zmodyfikowałem kod tak, aby na początku korzystał z serwera testowego eWUŚ.

  1. <?php
  2. $params = http://www.php.net/array(
  3. 'credentials' => http://www.php.net/array(
  4. http://www.php.net/array('name' => 'domain', 'value' => http://www.php.net/array('stringValue' => '15')),
  5. http://www.php.net/array('name' => 'login', 'value' => http://www.php.net/array('stringValue' => 'TEST1'))
  6. ),
  7. 'password' => 'qwerty!@#');
  8.  
  9. $clientAuth = new SoapClient('https://ewus.nfz.gov.pl/ws-broker-server-ewus-auth-test/services/Auth?wsdl', http://www.php.net/array(
  10. 'trace' => true,
  11. 'soap_version' => SOAP_1_2,
  12. "exceptions" => true,
  13. "cache_wsdl" => "WSDL_CACHE_NONE"
  14. ));
  15. $clientAuth->__soapCall('login', http://www.php.net/array($params), null, null, $loginHeaders);
  16.  
  17. $xml = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://xml.kamsoft.pl/ws/common" xmlns:brok="http://xml.kamsoft.pl/ws/broker">
  18. <soapenv:Header>
  19. <com:session id="' . $loginHeaders['session']->id . '" xmlns:ns1="http://xml.kamsoft.pl/ws/common"/>
  20. <com:authToken id="' . $loginHeaders['authToken']->id . '" xmlns:ns1="http://xml.kamsoft.pl/ws/common"/>
  21. </soapenv:Header>
  22. <soapenv:Body>
  23. <brok:executeService>
  24. <com:location>
  25. <com:namespace>nfz.gov.pl/ws/broker/cwu</com:namespace>
  26. <com:localname>checkCWU</com:localname>
  27. <com:version>2.0</com:version>
  28. </com:location>
  29. <brok:date>2008-09-12T09:37:36.406+01:00</brok:date>
  30. <brok:payload>
  31. <brok:textload>
  32. <ewus:status_cwu_pyt xmlns:ewus="https://ewus.nfz.gov.pl/ws/broker/ewus/status_cwu/v2">
  33. <ewus:numer_pesel>00000000000</ewus:numer_pesel>
  34. <ewus:system_swiad nazwa="eWUS" wersja="2012.07.1.0"/>
  35. </ewus:status_cwu_pyt>
  36. </brok:textload>
  37. </brok:payload>
  38. </brok:executeService>
  39. </soapenv:Body>
  40. </soapenv:Envelope>';
  41.  
  42. $clientBroker = new SoapClient('https://ewus.nfz.gov.pl/ws-broker-server-ewus-auth-test/services/ServiceBroker?wsdl', http://www.php.net/array('trace' => true,
  43. 'soap_version' => SOAP_1_2,
  44. "exceptions" => true,
  45. "cache_wsdl" => "WSDL_CACHE_NONE"));
  46. $r = $clientBroker->__doRequest($xml, 'https://ewus.nfz.gov.pl/ws-broker-server-ewus-auth-test/services/ServiceBroker', 'executeService', SOAP_1_2);
  47.  
  48. ?>


jednakże po wywołaniu pojawia się:

Cytat
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: <message> 'loginResponse' already defined in C:\dane\serwer\htdocs\ewus.php:14 Stack trace: #0 C:\dane\serwer\htdocs\ewus.php(14): SoapClient->SoapClient('https://ewus.nf...', Array) #1 {main} thrown in C:\dane\serwer\htdocs\ewus.php on line 14


w jaki sposób można naprawić błąd.


z SOAP jestem noga. Proszę bardzo o pomoc.






Napisany przez: marekpulawy 10.09.2018, 08:05:14

A jak włączyć ten certyfikat do SOAP?
Poniżej komunikat NFZ:

"W związku z koniecznością wymiany certyfikatu informujemy, że w dniu 10 września 2018 r. po godzinie 7-ej, system eWUŚ zostanie przełączony na nowy certyfikat. Certyfikat ten wykorzystywać będzie między innymi funkcję skrótu SHA-2.

Certyfikat pośredni (intermediate) oraz główny (root) można pobrać ze strony wystawcy pod adresem https://knowledge.digicert.com/generalinformation/INFO3805.html, w sekcji "SHA-2 Intermediate CAs (under SHA-2 Root)"."

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)