Links

Авторизація

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

З'єднання від ПЗ ресторану до API Expirenza виконується за допомогою WebSocket.
Запит на встановлення з'єднання відправляється на адресу з використанням Basic Auth.
Адреса запиту:
wss://api.shaketopay.com.ua/restaurantEntryPoint
Приклад з'єднання через websocket
Java
1
import javax.websocket.*;
2
import javax.websocket.ClientEndpointConfig.Builder;
3
import javax.websocket.ClientEndpointConfig.Configurator;
4
import javax.xml.bind.DatatypeConverter;
5
6
private final WebsocketEndpoint websocketEndpoint;
7
private final ClientEndpointConfig clientConfig;
8
private final URI uri;
9
10
Builder configBuilder = Builder.create();
11
String authHeaderValue = "Basic " + DatatypeConverter.printBase64Binary((user + ":" + password).getBytes());
12
configBuilder.configurator(new Configurator() {
13
@Override
14
public void beforeRequest(Map<String, List<String>> headers) {
15
headers.put("Authorization", Arrays.asList(authHeaderValue));
16
}
17
});
18
clientConfig = configBuilder.build();
19
this.uri = new URI(uri);
20
this.websocketEndpoint = new WebsocketEndpoint(messageHandler, new EventListenerI() {
21
@Override
22
public void notify(Object o) {
23
connected = false;
24
}
25
});
26
)
27
28
void connect() throws IOException {
29
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
30
container.connectToServer(websocketEndpoint, clientConfig, uri);
31
}
32
33
void sendMessage(String message) throws IOException {
34
websocketEndpoint.session.getBasicRemote().sendText(message);
35
}
36
...

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

На стороні Expirenza буде проведена перевірка справжності запиту після надсилання даних від ресторану.
Для проходження перевірки на стороні ПЗ ресторану в заголовках кожного запиту повинні міститися параметри signatureта restoId.
signature
restoId
  1. 1.
    Тіло запиту необхідно підписати алгоритмом HmacSHA256.
  2. 2.
    Результат роботи алгоритму помістити у значення параметра.
Передати у параметр RESTO_ID з файлу налаштувань properties.txt
Приклад генерації підпису та додавання її в заголовок 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.