Webhooks
O que é um webhook?
Com um webhook, você recebe mensagens e notificações instantaneamente em seu app. Comece fornecendo um URL de webhook para seu app, assine tópicos e valide o webhook. Você pode fazer isso editando seu aplicativo e clicando na aba webhook. Nesta aba, você também verá quais são os possíveis tópicos para os quais seu webhook pode se inscrever.
Para que as notificações por webhook funcionem, teu app precisa das permissões de Leitura de notificações.
Autenticação
Para autenticar as requisições webhook, para que você possa verificar se é uma solicitação válida vinda da plataforma Cryptohopper, utilize o cabeçalho X-Hub-Signature na requisição. O X-Hub-Signature será uma string hash sha512 da carga útil com o app secret como chave.
Formato de Webhook
O webhook publica payloads no seguinte 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", ... }
},
{...}
]
}
Validação
O webhook precisa ser validado quando quiser salvá-lo. Para validar o webhook, ele precisa retornar um código de status HTTP 200 e precisa gerar o mesmo código de validação que você inseriu no formulário do webhook.
A mensagem de validação JSON é a seguinte, por favor, certifique-se de que o código de validação de saída seja igual ao inserido no formulário do webhook.
{
"app_id": 123,
"type": "validate",
"messages": []
}
Exemplo 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.';
}
?>