Webhooks
¿Qué es un webhook?
Con un webhook, recibirás mensajes y notificaciones instantáneamente en tu app. Empieza proporcionando la URL de webhook de tu app, suscríbete a los temas y valida el webhook. Puedes hacerlo editando tu aplicación y haciendo clic en la pestaña webhook. En esta pestaña también verás qué temas puedes suscribir tu webhook.
Para que las notificaciones webhook funcionen, tu app necesita permisos de Lectura de notificaciones.
Autenticación
Para autenticar las peticiones webhook, para comprobar que son válidas y provienen de la plataforma Cryptohopper, usa el encabezado X-Hub-Signature en la solicitud. El X-Hub-Signature será una cadena hash SHA512 del payload con la clave secreta de la app.
Formato de webhook
Los webhooks publican cargas útiles en el siguiente formato:
{
"app_id": 123,
"type": "messages",
"messages": [
{
"type": "trade_completed",
"title": "Hop completed for BTC",
"message": "Your order has been successfully filled.",
"data": {"coin":"BTC", ... }
},
{...}
]
}
Validación
La webhook necesita validación para guardarla. Para validar la webhook, debe devolver un código HTTP 200 y el mismo código de validación que introdujiste en el formulario de la webhook.
La validación JSON del mensaje es la siguiente, asegúrate de que el código de validación ingresado en el formulario webhook sea el mismo.
{
"app_id": 123,
"type": "validate",
"messages": []
}
Ejemplo de 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.';
}
?>