Webhooks
Wat is een webhook?
Met een webhook krijg je direct berichten en notificaties in je app. Begin met het opgeven van een webhook-URL voor je app, abonneer je op onderwerpen en valideer de webhook. Je kunt dit doen door je applicatie te bewerken en op het webhook-tabblad te klikken. In dit tabblad zie je ook welke onderwerpen je webhook kan abonneren.
Om webhook-notificaties te laten werken, heeft je app Leesmeldingen-machtigingen nodig.
Authenticatie
Om webhook-verzoeken te authenticeren, zodat je kunt controleren of het een geldig verzoek is van het Cryptohopper Platform, gebruik je de X-Hub-Signature header in het verzoek. De X-Hub-Signature is een sha512-gehashte string van de payload met de app-secret als sleutel.
Webhook-formaat
De webhook plaatst payloads in het volgende formaat:
{
"app_id": 123,
"type": "messages",
"messages": [
{
"type": "trade_completed",
"title": "Hop completed for BTC",
"message": "Your order has been successfully filled.",
"data": {"coin":"BTC", ... }
},
{...}
]
}
Validatie
De webhook moet gevalideerd worden als je hem wilt opslaan. Voor de validatie moet de webhook een 200 HTTP-statuscode terugsturen en dezelfde validatiecode als die je in het webhookformulier hebt ingevuld.
De JSON-validatiemelding ziet er als volgt uit, zorg ervoor dat je dezelfde validatiecode invult als je in het webhook-formulier hebt ingevoerd.
{
"app_id": 123,
"type": "validate",
"messages": []
}
PHP Voorbeeld
<?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.';
}
?>