Авторизація

Встановлення WebSocket з'єднання

Під час реалізації WebSocket ми суворо рекомендуємо налаштовувати повторні спроби з'єднання за сервером Expirenza не частіще ніж раз на 15 секунд.

Headers. Обов'язкова умова передавати наступний хідер, якщо не передати - авторизація не буде працювати. cookie: system=API; Де API - назва вашої POS системи.

З'єднання від ПЗ ресторану до API Expirenza виконується за допомогою WebSocket.

Запит на встановлення з'єднання відправляється на адресу з використанням Basic Auth.

Адреса запиту:

wss://api.shaketopay.com.ua/restaurantEntryPoint
Приклад з'єднання через websocket
Java
import javax.websocket.*;
import javax.websocket.ClientEndpointConfig.Builder;
import javax.websocket.ClientEndpointConfig.Configurator;
import javax.xml.bind.DatatypeConverter;

private final WebsocketEndpoint websocketEndpoint;
private final ClientEndpointConfig clientConfig;
private final URI uri;

    Builder configBuilder = Builder.create();
    String authHeaderValue = "Basic " + DatatypeConverter.printBase64Binary((user + ":" + password).getBytes());
    configBuilder.configurator(new Configurator() {
        @Override
        public void beforeRequest(Map<String, List<String>> headers) {
            headers.put("Authorization", Arrays.asList(authHeaderValue));
        }
    });
    clientConfig = configBuilder.build();
    this.uri = new URI(uri);
    this.websocketEndpoint = new WebsocketEndpoint(messageHandler, new        EventListenerI() {
        @Override
        public void notify(Object o) {
            connected = false;
        }
    });
)

void connect() throws IOException {
    WebSocketContainer container = ContainerProvider.getWebSocketContainer();
    container.connectToServer(websocketEndpoint, clientConfig, uri);
}

void sendMessage(String message) throws IOException {
    websocketEndpoint.session.getBasicRemote().sendText(message);
}
...

Валідація запиту

На стороні Expirenza буде проведена перевірка справжності запиту після надсилання даних від ресторану.

Для проходження перевірки на стороні ПЗ ресторану в заголовках кожного запиту повинні міститися параметри signatureта restoId.

  1. Тіло запиту необхідно підписати алгоритмом HmacSHA256.

  2. Результат роботи алгоритму помістити у значення параметра.

Приклад генерації підпису та додавання її в заголовок signature
JAVA
String signValue = makeSignature(dataBytes);

ResponseEntity<String> bodyEntity = webClient.post()
.uri(urlPart).body(BodyInserters.fromValue(dataBytes))
.header("signature", signValue).retrieve()
.toEntity(String.class).block();

private String makeSignature(byte[] bytes) throws InvalidKeyException, NoSuchAlgorithmException {
    Mac hasher = Mac.getInstance("HmacSHA256");
    hasher.init(new SecretKeySpec(secretKey.getBytes(), "HmacSHA256"));
    byte[] hash = hasher.doFinal(bytes);
    return DatatypeConverter.printBase64Binary(hash);
}

Де secretKey - це SECRET_KEY з файлу properties.txt

Приклад підключення за допомогою Postman.


Last updated