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-ew...vices/Auth?wsdlDefinicję testowej usługi ServiceBroker można znaleźć pod adresem:
https://ewus.nfz.gov.pl/ws-broker-server-ew...viceBroker?wsdlpobrac 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.
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:
Kod
public mixed SoapClient::__soapCall ( string $function_name , array $arguments [, array $options [, mixed $input_headers [, array &$output_headers ]]] )
output_headers - If supplied, this array will be filled with the headers from the SOAP response
tylko jak to zapisać?
gdy dla kodu:
$parametry = ['credentials'=>
[
['name'=>'domain','value'=>['stringValue'=>'15']],
['name'=>'login','value'=>['stringValue'=>$user]]
],
'password'=>$pass];
działa:
$sesja = $client->login($parametry);
nie działa:
$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:
$user = 'TEST1';
$pass = 'qwerty!@#';
$parametry = ['credentials'=>
[
['name'=>'domain','value'=>['stringValue'=>'15']],
['name'=>'login','value'=>['stringValue'=>$user]]
],
'password'=>$pass];
echo 'parametry :';var_dump
($parametry); $sesja = $client->login($parametry);
echo 'sesja:';var_dump
($sesja);echo
'<br />';
$sesja = $client->__soapCall
('login',array($parametry), null, null, $header); echo 'sesja2:';var_dump
($sesja);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" } }
marekpulawy
5.01.2013, 15:55:07
A rozgryzł już ktoś jak po zalogowaniu sprawdzić ubezpieczenie pacjenta?
Logowanie już opanowane:
<?php
function objectToArray($d) {
$d = get_object_vars($d);
}
}
else {
return $d;
}
}
$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];
$sesja = $client->login($parametry);
$sesja = $client->__soapCall
('login',array($parametry), null, null, $header); echo 'sesja: '.$sesja.''; $array = objectToArray($header);
//var_dump($array);
//echo '<br />';
echo 'Session: '.$array['session']['id'].''; echo 'Token: '.$array['authToken']['id'].''; ?>
eMCeH
5.01.2013, 18:50:39
logowanie mamy ale jak się wylogować?
status_cwu sprawdzasz na innym adresie www
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?
eMCeH
5.01.2013, 19:11:18
próbowałem:
$wylogowanie = $client->__soapCall
('logout',array($header), null, null, $header2);
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...
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
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.
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
$clientBroker = new SoapClient('https://ewus.nfz.gov.pl/ws-broker-server-ewus/services/ServiceBroker?wsdl');
$functions = $clientBroker->__getFunctions();
$sesjaReturn = $clientBroker->__soapCall
('executeService',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'
marekpulawy
6.01.2013, 21:12:06
a co masz tym razem w zmiennej $parametry?
bo w zmiennej $header masz session i authToken?
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
eMCeH
6.01.2013, 21:18:30
te same parametry co w przypadku logowania
$parametry = ['credentials'=>
[
['name'=>'domain','value'=>['stringValue'=>$domain]],
['name'=>'login','value'=>['stringValue'=>$login]]
],
'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
__soapCall
('executeService',array($parametry), $header, null, $header2)
- parametr $header
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);
eMCeH
6.01.2013, 21:42:16
$client =
Auth czy ServiceBroker?
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]
eMCeH
6.01.2013, 22:11:48
w zapytaniu checkCWU musisz przesłać pesel oraz równolegle nazwę i wersję swojego systemu
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
marekpulawy
6.01.2013, 22:38:58
$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
eMCeH
6.01.2013, 23:09:22
identyczny komunikat dostaję w swoim wywołaniu
$sesjaReturn = $clientBroker->__soapCall
('executeService',array($parametry), $header, null, $header2);
d_adamkiewicz
6.01.2013, 23:26:02
$response = $clientBroker->__soapCall('executeService',
['parameters'=>[
'location'=>[
'namespace'=>"nfz.gov.pl/ws/broker/cwu",
'localname'=>"checkCWU",
'version'=>"1.0"],
'date'=>"2008-09-12T09:37:36.406+01:00",
'payload'=>[
'status_cwu_pyt'=>[
'numer_pesel'=>49091480757,
'system_swiad'=>[
'nazwa'=>"eWUS",
'wersja'=>"2.0"
]
]
]
]
]
);
Tamte błędy znikły - pojawia się:
Fatal error: Uncaught SoapFault exception: [soapenv:Server] unknown in index.php
eMCeH
7.01.2013, 00:38:26
$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'=>49091480757],
['system_swiad'=>[
['nazwa'=>"eWUS"],
['wersja'=>"2.0"]
]
]
]
]
]
]
]
];
// $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),
// ];
// $sesjaReturn = $clientBroker->__soapCall('executeService',array($parametry),$hd,NULL, $header2);
$sesjaReturn = $clientBroker->__soapCall
('executeService',array($parametry),$header,NULL, $header2);
zgłasza mi
Kod
Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object has no 'namespace' property
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?
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?
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?
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.

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.
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?
eMCeH
7.01.2013, 15:13:46
ja chyba też tak miałem - na testowej błąd dublowania a na roboczej ok.
szaitis
7.01.2013, 15:33:58
dzięki

rzeczywiście na produkcji ten błąd nie występuje
webdice
7.01.2013, 15:56:37
~szaitis o tagach bbcode słyszałeś? Jeśli nie to poczytaj i popraw swoje posty.
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ę
webdice
7.01.2013, 17:04:46
Wiecie że to ma działać od 1 stycznia?
<?php
$client = new SoapClient
( 'https://ewus.nfz.gov.pl/ws-broker-server-ewus/services/Auth?wsdl', array (
'trace' => true
));
$response = $client->login( array (
(
(
'name' => 'domain',
(
'stringValue' => '06'
)
),
'name' => 'type',
(
'stringValue' => 'SWD'
)
),
'name' => 'idntSwd',
(
'stringValue' => '[identifkator]'
)
),
'name' => 'login',
(
'stringValue' => '[login]'
)
)
)
),
'password' => '[hasło]'
));
print '<pre>' . print_r( $client->__getLastResponse
(), true ) . '<pre>';
Nauczcie się wreszcie czytać manuale/dokumentacje.
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...
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
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ę

a to 'item' przy logowaniu konieczne?
szaitis
8.01.2013, 11:34:05
Udało sie już komuś to zapytanie o ubezpieczenie napisać? czy dalej na poziomie logowania są wszyscy?
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ę
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ł

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
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.
array('name' => 'domain', 'value' => array('stringValue' => '15')), array('name' => 'login', 'value' => array('stringValue' => $user)) ),
'password' => $pass);
$clientAuth = new SoapClient
('https://ewus.nfz.gov.pl/ws-broker-server-ewus/services/Auth?wsdl', array('trace' => true)); $clientAuth->__soapCall
('login', array($params), null, null, $loginHeaders);
$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">
<soapenv:Header>
<com:session id="' . $loginHeaders['session']->id . '" xmlns:ns1="http://xml.kamsoft.pl/ws/common"/>
<com:authToken id="' . $loginHeaders['authToken']->id . '" xmlns:ns1="http://xml.kamsoft.pl/ws/common"/>
</soapenv:Header>
<soapenv:Body>
<brok:executeService>
<com:location>
<com:namespace>nfz.gov.pl/ws/broker/cwu</com:namespace>
<com:localname>checkCWU</com:localname>
<com:version>2.0</com:version>
</com:location>
<brok:date>2008-09-12T09:37:36.406+01:00</brok:date>
<brok:payload>
<brok:textload>
<ewus:status_cwu_pyt xmlns:ewus="https://ewus.nfz.gov.pl/ws/broker/ewus/status_cwu/v2">
<ewus:numer_pesel>00000000000</ewus:numer_pesel>
<ewus:system_swiad nazwa="eWUS" wersja="2012.07.1.0"/>
</ewus:status_cwu_pyt>
</brok:textload>
</brok:payload>
</brok:executeService>
</soapenv:Body>
</soapenv:Envelope>';
$clientBroker = new SoapClient
('https://ewus.nfz.gov.pl/ws-broker-server-ewus/services/ServiceBroker?wsdl', array('trace' => true, 'exceptions' => true)); $r = $clientBroker->__doRequest($xml, 'https://ewus.nfz.gov.pl/ws-broker-server-ewus/services/ServiceBroker', 'executeService', SOAP_1_1);
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ć
gilek
8.01.2013, 13:03:10
Dzięki, poprawiłem, to też moze sie przydać:
$doc = new DOMDocument();
$doc->loadXML($r);
$xpath = new DOMXpath($doc);
$xpath->registerNamespace('odp','https://ewus.nfz.gov.pl/ws/broker/ewus/status_cwu/v2');
$elements = $xpath->query("//odp:status_cwu");
if ($elements->length !== 1)
throw new Exception('OMG');
$status = $elements->item(0)->nodeValue;
echo ' Status: '.$status;
szaitis
8.01.2013, 13:36:43
Także pozwolę sobie skorzystać i wielkie dzięki
Kris2X
8.01.2013, 22:52:41
A wie ktoś może jak się dobrać do kodu autoryzacji/id_operacji?
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ł")
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
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).
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.
$elements = $xpath->query("//odp:status_cwu_odp");
if ($elements->length !== 1)
throw new Exception('OMG 2');
$id = $elements->item(0)->getAttribute('id_operacji');
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;
gilek
9.01.2013, 09:45:55
dokładnie
eMCeH
9.01.2013, 10:15:09
jakież to jest łatwe jak się widzi gotowe rozwiązanie...

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?
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...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.