Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

4 Stron V  « < 2 3 4  
Reply to this topicStart new topic
> [PHP/SOAP] eWUS - info o pacjencie
d_adamkiewicz
post 10.01.2013, 18:21:20
Post #61





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 6.01.2013

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


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);

Go to the top of the page
+Quote Post
eMCeH
post 12.01.2013, 15:29:27
Post #62





Grupa: Zarejestrowani
Postów: 48
Pomógł: 1
Dołączył: 1.04.2012
Skąd: Świętokrzyskie

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


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. setlocale(LC_ALL, 'pl_PL', 'pl', 'Polish_Poland.28592');
  10. $folderPotwierdzen = './potwierdzenia/' . strftime('%Y') . '/' . substr(strftime('%B'), 0, 3) . '/';
  11. if (!file_exists($folderPotwierdzen))
  12. 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', array('trace' => 1, 'exceptions' => true));
  3. $potwierdzenie = $clientBroker->__doRequest($xml, $path, 'executeService', SOAP_1_1);
  4. }
  5. catch (Exception $e) {echo 'BŁĄD: ' . $e->getMessage().'<br>';}


przepuszcza i nie wyrzuca wyjątku

Ten post edytował eMCeH 11.01.2013, 06:00:10
Go to the top of the page
+Quote Post
gilek
post 14.01.2013, 08:04:23
Post #63





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 20.02.2008

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


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 setType($type) { $this->_type = $type; }
  4. public function 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 (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] = array('error'=>'Błędne dane wejściowe.');
  13. break;
  14.  
  15. default:
  16. $result[$pesel] = array('error'=>'Nieznany błąd.');
  17. break;
  18.  
  19. }
  20. } catch(Exception $e) {
  21. $result[$pesel] = array('error'=>$e->getMessage());
  22. }


Ten post edytował gilek 14.01.2013, 08:20:33
Go to the top of the page
+Quote Post
d_adamkiewicz
post 16.01.2013, 16:29:23
Post #64





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 6.01.2013

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


  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ć.
Go to the top of the page
+Quote Post
nitro18
post 17.05.2013, 00:18:18
Post #65





Grupa: Zarejestrowani
Postów: 311
Pomógł: 7
Dołączył: 2.08.2006
Skąd: Bystrzyca Kłodzka/Nysa

Ostrzeżenie: (10%)
X----


Witam,

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

  1. <?php
  2. $params = array(
  3. 'credentials' => array(
  4. array('name' => 'domain', 'value' => array('stringValue' => '15')),
  5. array('name' => 'login', 'value' => 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', array(
  10. 'trace' => true,
  11. 'soap_version' => SOAP_1_2,
  12. "exceptions" => true,
  13. "cache_wsdl" => "WSDL_CACHE_NONE"
  14. ));
  15. $clientAuth->__soapCall('login', 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', 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.





Go to the top of the page
+Quote Post
marekpulawy
post 10.09.2018, 08:05:14
Post #66





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 5.01.2013

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


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/generalinfor...n/INFO3805.html, w sekcji "SHA-2 Intermediate CAs (under SHA-2 Root)"."
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 18:36