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.';
}
?>