Авторизація

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

З'єднання від ПЗ ресторану до 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

#213: Sep 23 LoyaltyProgramGeneral

Change request updated