Jakiś czas temu jeden z klientów zwrócił się z prośbą o przygotowanie integracji jego sklepu z systemem realizacji zleceń NFZ EZWM. W tym wpisie postaram się przybliżyć nieco podstawy jak to ugryźć oraz dostarczyć trochę przykładowego kodu.
W przypadku SOAP api w PHP najprościej wygenerować sobie klasy przy pomocy jakiegoś generatora np. wsdl2phpgenerator. Generuje on zestaw klas z dostarczono pliku wsdl zawierającego definicje api.
Dzięki takiemu rozwiązaniu, łatwiej nam poruszać się w API przy braku dobrej dokumentacji, IDE podpowie nam, jakie mamy metody oraz jakie argumenty musimy podać.
Zebrałem wszystko w paczkę, wrzuciłem do niej wygenerowane klasy, skrypty wraz z konfiguracją do wygenerowania własnych oraz przykład wykorzystania. Całość dostępna jest na moim gihub’ie.
Nie jest to pełnowprawny klient API a bardziej przykłady jak zabrać się za temat i pociągnąć dalej, ale myślę że może się komuś przydać.
Zainstalować bibliotekę możemy przy pomocy composera:
composer require ircykk/ezwm
Przykład jak uzyskać sesję potrzebną do dalszych akcji:
<?php
use Ircykk\Ezwm\Auth\authToken;
use Ircykk\Ezwm\Auth\session;
use Ircykk\Ezwm\AuthService\AuthClientFactory;
use Ircykk\Ezwm\AuthService\AuthService;
use Ircykk\Ezwm\AuthService\Credentials;
include_once __DIR__.'/vendor/autoload.php';
const EZWM_ENV_TEST = false;
const EZWM_SOAP_TRACE = false;
// credentials
$login = '*********';
$password = '********';
$operatorId = '***/******';
$domain = '**';
$type = '***';
// create credentials object
$credentials = new Credentials(
$login,
$password,
$operatorId,
$domain,
$type
);
$authClientFactory = new AuthClientFactory();
$authClient = $authClientFactory->build(EZWM_ENV_TEST);
$authService = new AuthService($credentials, $authClient);
try {
$sessionResponse = $authService->createSession();
/** @var session $session */
$session = $sessionResponse['session'];
/** @var authToken $authToken */
$authToken = $sessionResponse['authToken'];
$sessionId = $session->getId();
$authTokenId = $authToken->getId();
echo "Session ID: $sessionId; Auth Token ID: $authTokenId";
} catch (Exception $e) {
echo html_entity_decode($e->getMessage());
}
Mam nadzieję, że kod oraz przykład, który wrzuciłem przyda się wam jeśli zaczynacie zabawę z tym API i nie wiecie za bardzo jak podejść do tematu.
Zapraszam też do kontrybucji jeśli macie pomysły na rozwój klienta 🙂
Przydatne linki:
- https://www.nfz.gov.pl/gfx/nfz/userfiles/_public/aktualnosci/aktualnosci_centrali/komunikaty_di/2018/specyfikacja_uslug_do_obslugi_zlecen_zaopatrzenia_w_wyroby_medyczne__v1.0.pdf
- https://www.nfz.gov.pl/aktualnosci/aktualnosci-centrali/komunikat-departamentu-informatyki,7241.html
- https://packagist.org/packages/ircykk/ezwm