Nexto.API Przykładowy klient Java 1.6 do systemu zamówień NextoAPI Przygotował Rafał Ozga 2004-2015 e-kiosk S.A. Maj 2015, Maj 2015, Wersja: 1.5 strona 1
Historia zmian Lp. Data Zmiany 1 28/05/15 Zmiana danych firmy Maj 2015, Wersja: 1.5 strona 2
1. Wstep Przykładowa implementacja modułu składania zamówień poprzez API.Nexto w Java 1.6 oparta jest na bibliotece Apache CXF1 i ma na celu demonstrację wszystkich niezbędnych kroków potrzebnych do tego, by aplikacja Państwa sklepu mogła bezpiecznie połączyć się do systemu API.Nexto, złożyć zamówienie i odebrać wyniki. Istotnym elementem aplikacji jest nexto-orderservice-client.jar zawierający klasy utworzone automatycznie narzędziami dostarczanymi z biblioteką Apache CXF z pliku WSDLowego opisującego OrderService serwisu API.Nexto2. Pozostałe jary wchodzące w skład aplikacji to standardowe jary dołączane do dystrybucji biblioteki Apache CXF. Oczywiście można również budować moduły do składania zamówień do systemu API.Nexto w Javie 1.6 nie odwołując się bynajmniej do biblioteki Apache CXF, a korzystać w zamian z innych popularnych rozwiązań typu Apache Axis, Apache Axis2, Metro etc. Kod przykładowego klienta powinien to w znacznym stopniu ułatwić. 2. Implementacja W skład paczki z kodem klienta wchodzą trzy pliki: OrderServiceClient.java - główna klasa zawierająca całą logikę aplikacji ClientPasswordCallback.java - klasa niezbędna w procesie autentykacji w ramach WS-Security PartnerAPI.java - klasa pomocnicza, enkapsulująca api_id i hasło partnera API Logika działania klienta jest następująca: 1. Pobierz plik WSDL zawierający informacje o dostępnych funkcjonalnościach: URL wsdlurl = new URL("https://nextoapi.pl/services/OrderService?wsdl"); 2. Stwórz instancję OrderService: QName SERVICE_NAME = new QName("http://api.nexto.com", "OrderService"); OrderService_Service ss = new OrderService_Service(wsdlURL, SERVICE_NAME); OrderService port = ss.getorderserviceport(); Client client = ClientProxy.getClient(port); Endpoint cxfendpoint = client.getendpoint(); 3. Podaj parametry partnera API (api_id oraz password) uzyskane w procesie rejestracji w systemie API.Nexto: PartnerAPI partnerapi = new PartnerAPI(); partnerapi.setapi_id("to-jest-moj-api-id"); Maj 2015, Wersja: 1.5 strona 3
partnerapi.setpassword("top-secret-pass"); 4. Stwórz instancję klasy potrzebnej w procesie autentykacji w ramach WS-Security: ClientPasswordCallback callback = new ClientPasswordCallback(); callback.setpassword(partnerapi.getpassword()); 5. Ustaw wymagane parametry obsługi WS-Security: Map<String, Object> outprops = new HashMap<String, Object>(); outprops.put(wshandlerconstants.action, WSHandlerConstants.USERNAME_TOKEN); outprops.put(wshandlerconstants.user, partnerapi.getapi_id()); outprops.put(wshandlerconstants.password_type, WSConstants.PW_TEXT); outprops.put(wshandlerconstants.pw_callback_ref, callback); WSS4JOutInterceptor wssout = new WSS4JOutInterceptor(outProps); cxfendpoint.getoutinterceptors().add(wssout); 6. Stwórz polecenie utworzenia zamówienia na żądane egzemplarze: CreateOrderRequest req = new CreateOrderRequest(); req.setapiid(partnerapi.getapi_id()); //email tylko jeśli zamówienie ma być dostarczone bezpośrednio do klienta: req.setemail("sample@test.pl"); req.setpass(partnerapi.getpassword()); req.getissueid().add(4361); 7. Złóż zamowienie i odczytaj wyniki, bądź ewentualne komunikaty o błędach: OrderResponse res; try { System.out.println("Tworzę zamówienie..."); res = port.createorder(req); System.out.println("Zamówienie utworzone. Szczegóły:"); System.out.println("status: " + res.getstatus()); System.out.println("status msg: " + res.getstatusmessage()); System.out.println("Całkowity koszt: " + res.getorder().gettotalprice()); } catch (APINextoWSException_Exception e) { System.out.println("Fault code: " + e.getfaultinfo().getfaultcode()); System.out.println("Fault message: " + e.getfaultinfo().getfaultstring()); } catch (SOAPException_Exception e) { // nieprzewidziany wyjątek: e.printstacktrace(); } Maj 2015, Wersja: 1.5 strona 4
8. Powtórnie pobierz zamówienie: ResendOrderRequest resendreq = new ResendOrderRequest(); resendreq.setapiid(partnerapi.getapi_id()); resendreq.setpass(partnerapi.getpassword()); resendreq.setorderid(res.getorder().getid()); System.out.println("Powtórnie pobieram zamówienie..."); res = port.resendorder(resendreq); System.out.println("Zamówienie pobrane powtórnie. Szczegóły:"); System.out.println("status: " + res.getstatus()); System.out.println("status msg: " + res.getstatusmessage()); System.out.println("Całkowity koszt: " + res.getorder().gettotalprice()); for(orderitem item: res.getorder().getitems()) { System.out.println("item links: " + item.getlinks()); } 3. Uruchamianie Skrypty (bat, sh) uruchamiające przykładową aplikację zostały dołączone do dystrybucji, dostępnej do pobrania w sekcji Narzędzia API dostępnej po zalogowaniu się do panelu administracyjnego. Maj 2015, Wersja: 1.5 strona 5