Webhooks

Apa itu webhook?

Dengan webhook, je bisa mendapatkan pesan dan pemberitahuan langsung di aplikasi je. Mulai dengan memberikan URL webhook ke aplikasi je, berlangganan ke topik dan validasi webhook. Bisa je lakukan ini dengan mengedit aplikasi je dan klik tab webhook. Di tab ini, je juga akan melihat topik apa saja yang bisa berlangganan webhook je.

Untuk membuat notifikasi webhook berfungsi, aplikasi je membutuhkan izin Baca pemberitahuan.

Otentikasi

Untuk mengotentikasi permintaan webhook, agar je bisa mengecek apakah itu permintaan yang valid dari Platform Cryptohopper, tolong gunakan header X-Hub-Signature dalam permintaan tersebut. X-Hub-Signature akan berupa string yang di-hash sha512 dari payload dengan app secret sebagai kuncinya.

Format Webhook

Webhook mengirim *payload* dalam format berikut:

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

Validasi

Webhook perlu diverifikasi saat je ingin menyimpannya. Untuk verifikasi, webhook harus mengembalikan kode status HTTP 200 dan menghasilkan kode validasi yang sama dengan yang dimasukkan di formulir webhook.

Pesan validasi JSON terlihat seperti berikut, pastikan je memasukkan kode validasi yang sama seperti yang dimasukkan di formulir webhook.

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

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