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