Nexto.API
Transkrypt
Nexto.API
e-Kiosk S.A. ul. Prosta 51, 00-838 Warszawa KRS: 0000304553, NIP: 895-182-75-13 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 e-Kiosk S.A. ul. Prosta 51, 00-838 Warszawa KRS: 0000304553, NIP: 895-182-75-13 Historia zmian Lp. Data Zmiany 1 28/05/15 Zmiana danych firmy Maj 2015, Wersja: 1.5 strona 2 e-Kiosk S.A. ul. Prosta 51, 00-838 Warszawa KRS: 0000304553, NIP: 895-182-75-13 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 e-Kiosk S.A. ul. Prosta 51, 00-838 Warszawa KRS: 0000304553, NIP: 895-182-75-13 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("[email protected]"); 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 e-Kiosk S.A. ul. Prosta 51, 00-838 Warszawa KRS: 0000304553, NIP: 895-182-75-13 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