Вебхуки
Что такое вебхук?
С вебхуком ты сразу получишь сообщения и уведомления в своём приложении. Начни с указания webhook-URL для своего приложения, подпишись на темы и валидируй вебхук. Сделать это можно, отредактировав своё приложение и кликнув на вкладку вебхуков. В этой вкладке ты также увидишь возможные темы, на которые можно подписать свой вебхук.
Для работы вебхук-уведомлений твоему приложению потребуются права Чтения уведомлений.
Авторизация
Для аутентификации запросов вебхука, чтобы проверить, что запрос поступает с платформы Cryptohopper, используй заголовок X-Hub-Signature в запросе. X-Hub-Signature — это строка, хешированная с помощью алгоритма sha512, содержащая payload и секретный ключ приложения.
Формат вебхуков
Вебхук отправляет полезные данные в следующем формате:
{
"app_id": 123,
"type": "messages",
"messages": [
{
"type": "trade_completed",
"title": "Hop completed for BTC",
"message": "Your order has been successfully filled.",
"data": {"coin":"BTC", ... }
},
{...}
]
}
Валидация
Вебкап нужно валидировать, когда хочешь сохранить. Для валидации вебкап должен вернуть HTTP-статус-код 200 и выдать тот же код валидации, что и в форме вебкапа.
Сообщение валидации JSON выглядит следующим образом, убедитесь, что вы выводите тот же код валидации, что и введен в форме webhook.
{
"app_id": 123,
"type": "validate",
"messages": []
}
PHP пример
<?php
$app_secret = 'ENTER_YOUR_APP_SECRET';
$verification_code = 'MY_VERIFICATION_CODE';
$requestBody = file_get_contents('php://input');
$headers = getallheaders();
$headers = array_change_key_case($headers, CASE_UPPER);
$json = json_decode($requestBody, true);
$signature = hash_hmac('sha512', $requestBody, $app_secret);
if($signature == $headers['X-HUB-SIGNATURE']){
//valid webhook request
if($json['type'] == 'validate'){
// validate webhook
echo $verification_code;
}elseif($json['type'] == 'messages'){
// receive messages
print_r($json['messages'], true);
}else{
// unkown type
echo 'Unkown webhook message type.';
}
}else{
//invalid signature
echo 'Invalid signature.';
}
?>