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