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