Webhooki
Co to jest webhook?
Z webhookiem otrzymasz natychmiastowe powiadomienia i wiadomości w swoim programie. Zaczynaj od podania webhook URL dla swojej aplikacji, subskrybuj tematy i waliduj webhooka. Możesz to zrobić, edytując swoją aplikację i klikając na zakładkę webhook. W tym okienku zobaczysz również możliwe tematy, na które możesz subskrybować swój webhook.
Aby powiadomienia webhook działały, twoja aplikacja potrzebuje uprawnień do odczytu powiadomień.
Autentykacja
Aby zweryfikować żądania webhook, by sprawdzić, czy to prawidłowe żądanie z platformy Cryptohopper, użyj nagłówka X-Hub-Signature w żądaniu. X-Hub-Signature będzie ciągiem skrótem SHA512 payload z sekretem aplikacji jako kluczem.
Format webhooka
Webhook publikuje ładunki w następującym formacie:
{
"app_id": 123,
"type": "messages",
"messages": [
{
"type": "trade_completed",
"title": "Hop completed for BTC",
"message": "Your order has been successfully filled.",
"data": {"coin":"BTC", ... }
},
{...}
]
}
Walidacja
Webhook trzeba zwalidować, żeby je zapisać. Do walidacji webhook musi zwrócić kod statusu HTTP 200 i taki sam kod walidacyjny, jaki podałeś w formularzu webhooka.
Wiadomość walidacji JSON wygląda następująco, proszę upewnić się, że wygenerowany kod walidacji jest taki sam, jak w formularzu webhook.
{
"app_id": 123,
"type": "validate",
"messages": []
}
Przykład 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.';
}
?>