在處理 Webhook 之前,需驗證 X-CYBERBIZ-HMAC-SHA256 與 X-CYBERBIZ-DOMAIN-HMAC-SHA256 的值,確保 webhook 是由 CYBERBIZ 送出的,沒有被竄改。
所有 webhook 都會發送以下 headers。
For example, 如果你的 App
| key | example | 說明 |
|---|---|---|
| USER-AGENT | CyberbizAppWebhook/1.0 | |
| X-CYBERBIZ-EVENT | domains/create | 事件名稱 |
| X-CYBERBIZ-DOMAIN | example.cyberbiz.co | cyberbiz domain |
| X-CYBERBIZ-SHOP-DOMAIN | example.com.tw | primary domain |
| X-CYBERBIZ-HMAC-SHA256 | 99bbe023f9cf3da9b9927097a4e63cac67adf7d85c98c97e2e161622f574782c (hex) | 資料驗證用 hmac,pseudo code 為下 |
| `sha256hmac(app_secret, data sent in the request) | ||
| (hex encode)` |
Ruby 語法:
OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), app_secret, data) |
| X-CYBERBIZ-DOMAIN-HMAC-SHA256 | | 用來驗證 header 中 X-CYBERBIZ-DOMAIN 的資料 ,pseudo code 如下
sha256hmac(app_secret, base64encode(X-CYBERBIZ-DOMAIN))
Ruby 語法:
OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), app_secret, Base64.strict_encode64(x_cyberbiz_domain)) |
webhook events & 回傳內容可參考:
新增解除安裝的 webhook
在新增 webhook 事件裡面選取「移除 app」進行設定,取得以下回應
apps/uninstall{
"app_uuid": "d155f19b-b8f4-4f92-b140-35a0ece76c1d", // 可能為空
"app_version_uuid": "184df99d-4b8f-4a96-80f9-0c31c905cc46", // 可能為空
"app_client_id": "33a94727a7db461fbfa9b8ca8200c27e" // your app client id
}
商家網域更動 Webhook
商家可以在 CYBERBIZ 後台設定多個網域,並設定其中一個為主網域 (primary)。如果第三方 App 需要知道商家的主網域,而不只 CYBERBIZ 提供給商家的網域 (xxxx.cyberbiz.co),則需收聽 domains 相關 webhook
domains/create{
"id":14,
"subdomain":"sub",
"domain":"sub.example.com",
"host":"sub",
"primary":true,
"force_domain":false
}
domains/update{
"id":14,
"subdomain":"sub",
"domain":"sub.example.com",
"host":"sub",
"primary":false,
"force_domain":false
}
domains/destroy{
"id":14,
"subdomain":"sub",
"domain":"sub.example.com",
"host":"sub",
"primary":true,
"force_domain":false
}
Affiliate vendor order
apps/uninstall
{
"app_uuid": "d155f19b-b8f4-4f92-b140-35a0ece76c1d", // 可能為空
"app_version_uuid": "184df99d-4b8f-4a96-80f9-0c31c905cc46", // 可能為空
"app_client_id": "33a94727a7db461fbfa9b8ca8200c27e" // your app client id
}
商品規格更新 products/update_options
該商品的商品規格選項更新時發送,範例如下,只需關注 "id" 與 "product_options"
{
"id": 18,
"title": "商品名稱22dddza",
"english_title": null,
"published": true,
"sell_from": null,
"sell_to": null,
"product_type": "分類-1",
"slogan": "我是贈品d",
"brief": "",
"body_html": "",
"vendor": null,
"price": 9211.0,
"sell_weight": 0,
"tax_type_id": "inclusive_tax",
"product_options": [
{
"name": "大小",
"position": 1,
"types": "大,中2,小,1",
"id": 6
},
{
"name": "顏色colo",
"position": 2,
"types": "藍色blue,紅色red,yellow",
"id": 7
}
],
"created_at": "2023-12-14 13:51:51",
"updated_at": "2024-01-16 18:00:19",
"temperature_types": [
"常溫"
],
"searchable": true
}
其中 position 對應到 product_variants 的 option,比如以下 variant
...
"product_variants": [
{
"product_id": 26405295,
"name": "tesPuttApi - ",
"position": 1,
"price": 699,
"cost": null,
"compare_at_price": null,
"meas": 0,
"max_usable_bonus": 0,
"weight": 0,
"option1": null,
"option2": null,
"option3": null,
"inventory_management": false,
"inventory_quantity": null,
"sold": 3,
"safety_inventory_quantity": null,
"inventory_policy": "deny",
"sku": null,
"qc": null,
"requires_shipping": true,
"created_at": "2023-03-28 10:26:49",
"updated_at": "2023-05-31 01:00:04",
"honeycomb_sync": true,
"vendor": null,
"id": 28021136
}
],
...
option1 的 options 為 “大小” 裡面的 ”大,中2,小,1”,其他以此類推
products/update_photos該商品的商品規格選項更新時發送,範例如下,只需關注 "id" 與 "photos"
{
"id": 18,
"title": "商品名稱22dddza",
"english_title": null,
"published": true,
"sell_from": null,
"sell_to": null,
"product_type": "分類-1",
"slogan": "我是贈品d",
"brief": "",
"body_html": "",
"vendor": null,
"price": 9211.0,
"sell_weight": 0,
"tax_type_id": "inclusive_tax",
"photos": [
{
"url": "//cdn.lvh.me:4000/media/W1siZiIsIjIvcHJvZHVjdHMvMTgvMTcwNTM5OTIwOF9kMGQ3MTc5MjQ0YjRlNGVhZmJmNC5wbmciXV0.png?sha=c4a15ec5878a0d29",
"position": 1,
"id": 19
},
{
"url": "//cdn.lvh.me:4000/media/W1siZiIsIjIvcHJvZHVjdHMvMTgvMi1wcm9kdWN0LXBob3RvLTIwMjQwMTE2LTcxOTQtMTFleHFqaV8xZmQ4MGE2ZTNlZTI0MmEzNzcxNy5wbmciXV0.png?sha=5fc0c63c3abce289",
"position": 1,
"id": 20
}
],
"created_at": "2023-12-14 13:51:51",
"updated_at": "2024-01-16 18:00:19",
"temperature_types": [
"常溫"
],
"searchable": true
}
批次操作完成 bulk_operations/finish
bonus_points_create事件給該App{
"status": "Completed"
"type": "BonusPoint",
"ids": [1, 2],
"completed_at": "2025-06-30 16:11:38"
}