Potyczka z API realizacji zleceń EZWM (NFZ) w PHP

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:

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.