Webhooks

Webhook nedir?

Webhook ile uygulamamıza anında mesajlar ve bildirimler alabilirsin. Uygulamanın webhook URL'sini girerek, konulara abone olarak ve webhook'u doğrulayarak başla. Bunu uygulama düzenlemesi yaparak ve webhook sekmesine tıklayarak gerçekleştirebilirsin. Bu sekmede, webhook'una abone olabileceğin olası konuları da görebileceksin.

Webhook bildirimleri çalışması için uygulaman, Bildirim Okuma izinlerine ihtiyaç duyacak.

Kimlik Doğrulama

Webhook istekilerini doğrulamak için, Cryptohopper Platform'dan gelen geçerli bir istek olup olmadığını kontrol edebilmen için, istekte X-Hub-Signature başlığını kullan. X-Hub-Signature, yük ile uygulama sırrının anahtar olarak kullanıldığı sha512 ile hashlenen bir dizedir.

Webhook formatı

Webhook'lar, aşağıdaki biçimde ödemeler gönderir:

{
    "app_id": 123,
    "type": "messages",
    "messages": [
    	{
            "type": "trade_completed",
            "title": "Hop completed for BTC",
            "message": "Your order has been successfully filled.",
            "data": {"coin":"BTC", ... }
    	},
        {...}
    ]
}

Doğrulama

Webhook'u kaydetmek istediğinde doğrulaması gerekir. Webhook doğrulaması için webhook 200 HTTP durum kodu döndürmeli ve webhook formunda girdiğin doğrulama koduyla aynı kodu üretmelidir.

JSON doğrulama mesajı şu şekilde; webhook formuna girdiğiniz doğrulama kodunu aynısını girdiğinizden emin olun.

{
    "app_id": 123,
    "type": "validate",
    "messages": []
}

PHP Örneği

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