Webhooks
Che cos'è un webhook?
Con un webhook puoi ricevere messaggi e notifiche istantanee nella tua app. Inizia inserendo l'URL del webhook per la tua app, iscriviti agli argomenti e valida il webhook. Puoi farlo modificando la tua applicazione e cliccando sulla scheda webhook. In questa scheda vedrai anche quali sono gli argomenti possibili a cui puoi iscrivere il tuo webhook.
Per far funzionare le notifiche webhook, la tua app ha bisogno dei permessi di Lettura notifiche.
Autenticazione
Per autenticare le richieste webhook, in modo da controllare se si tratta di una richiesta valida proveniente dalla piattaforma Cryptohopper, utilizza l'header X-Hub-Signature nella richiesta. L'X-Hub-Signature sarà una stringa hash sha512 del payload con la secret dell'app come chiave.
Formato webhook
Il webhook pubblica i payload nel seguente 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", ... }
},
{...}
]
}
Validazione
Il webhook deve essere validato quando lo si vuole salvare. Per la convalida, il webhook deve restituire un codice di stato HTTP 200 e deve restituire lo stesso codice di convalida inserito nel modulo webhook.
Il messaggio di validazione JSON è il seguente: assicurati di inviare lo stesso codice di validazione inserito nel modulo webhook.
{
"app_id": 123,
"type": "validate",
"messages": []
}
Esempio 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.';
}
?>