Webhook
請先申請服務及提供接收 Event 的 Webhook URL,並依照規格實作此功能。
Webhook Workflow
%%{init: {'securityLevel': 'loose', 'theme':'base'}}%%
sequenceDiagram
participant D as Developer Server
participant O as Omni Platform
O->>D: Webhook
activate D
D-->>O: Result
deactivate D
Event Body Parameters
| Name | Type | Description |
|---|---|---|
| event_id | string | 事件編號 |
| event_time | string | 事件時間 |
| event_type | string | 事件類型 ALLOWED VALUES:
|
| resource_href | string | 事件資源連結,使用此連結取得事件詳情 (optional) |
| resource_id | string | 資源編號 (商品停售時,為停售商品編號,新增訂單時,為會員acckey) (加值停售時,為停售加值編號,組成為加值主項 + "-" + 加值明細)Ex. 1-11 (optional) |
| event_store | string | 事件門市 (optional) |
| event_company | string | 事件公司 |
| event_data | string | 事件資料 (為雙方約定回傳的資料) (optional) |
Event Body Example - Order Add
{
"event_id": "99822523-7024-6969-9867-est12345341234",
"event_time": 1610506347,
"event_company": "vbuf8b1blyrm7k7fbnrfpu59twhkuywg",
"event_type": "order.add",
"resource_href": "http://omni1.lafresh.com.tw:8090/v1/order/test12345341234"
}
Event Body Example - Order Change
{
"event_id": "99822523-7024-6969-9867-est12345341234",
"event_time": 1610506347,
"event_company": "vbuf8b1blyrm7k7fbnrfpu59twhkuywg",
"event_type": "order.change",
"resource_id": "2210504000001",
"resource_href": "http://omni1.lafresh.com.tw:8090/v1/order/test12345341234",
"event_data": {
"current_state": "COMPLETED",
"pickup_at": "2020-05-01 22:25:49",
"payments": [
{
"type": "CASH_MODULE",
"name": "現金模組",
"payment_amount": 100
}
]
}
}
Event Body Example - Order Change Status
{
"event_id": "99822523-7024-6969-9867-est12345341234",
"event_time": 1610506347,
"event_company": "vbuf8b1blyrm7k7fbnrfpu59twhkuywg",
"event_type": "order.change_status",
"resource_href": "http://omni1.lafresh.com.tw:8090/v1/order/test12345341234"
}
Event Body Example - Order Change Items
{
"event_id": "99822523-7024-6969-9867-est12345341234",
"event_time": 1610506347,
"event_company": "vbuf8b1blyrm7k7fbnrfpu59twhkuywg",
"event_type": "order.change_items ",
"resource_href": "http://omni1.lafresh.com.tw:8090/v1/order/test12345341234"
}
Event Body Example - Order Create
{
"event_id": "99822523-7024-6969-9867-est12345341234",
"event_time": 1610506347,
"event_company": "vbuf8b1blyrm7k7fbnrfpu59twhkuywg",
"event_type": "order.create",
"resource_href": "http://omni1.lafresh.com.tw:8090/v1/order/test12345341234",
"event_store": "000030"
}
Event Body Example - Order Cancel
{
"event_id": "99822523-7024-6969-9867-est12345341234",
"event_time": 1610506347,
"event_company": "vbuf8b1blyrm7k7fbnrfpu59twhkuywg",
"event_type": "order.cancel",
"resource_href": "http://omni1.lafresh.com.tw:8090/v1/order/test12345341234",
"event_store": "000030"
}
Event Body Example - Order Out Of Stock
{
"event_type": "order.out_of_stock",
"resource_href": "http://omni1.lafresh.com.tw:8090/v1/order/out_of_stock/test12345341234?store_id=TWBa01",
"event_company": "ahdmx5qiexgm7ptfx10ohsw93y8wdsqr",
"event_id": "32160295-0552-4399-1101-32605496472311",
"event_time": 1639447690
}
Event Body Example - Order Partial Refund
{
"event_type": "order.partial_refund",
"resource_href": "http://omni1.lafresh.com.tw:8090/v1/order/return_items/test12345341234?store_id=TWBa01",
"event_company": "ahdmx5qiexgm7ptfx10ohsw93y8wdsqr",
"event_id": "32160295-0552-4399-1101-32605496472311",
"event_time": 1639447690
}
Event Body Example - Product Change
{
"event_id": "27075364-7639-1674-9801-28544904892838",
"event_time": 1610505965,
"event_company": "vbuf8b1blyrm7k7fbnrfpu59twhkuywg",
"event_type": "product.change",
"resource_href": "http://omni1.lafresh.com.tw:8090/v1/products?store_id=000030",
"event_store": "000030"
}
Event Body Example - Product Sold Out
{
"event_id": "47188757-8926-8745-1833-6038PS04000001",
"event_time": 1610506258,
"event_company": "vbuf8b1blyrm7k7fbnrfpu59twhkuywg",
"resource_id": "PS04000001",
"event_store": "0598",
"event_type": "product.sold_out"
}
Event Body Example - Product On Sale
{
"event_id": "34921555-8322-2094-0892-9378PS04000001",
"event_time": 1610506192,
"event_company": "vbuf8b1blyrm7k7fbnrfpu59twhkuywg",
"resource_id": "PS04000001",
"event_store": "0598",
"event_type": "product.on_sale"
}
Event Body Example - Taste Sold Out
{
"event_id": "47188757-8926-8745-1833-6038PS04000001",
"event_time": 1610506258,
"event_company": "vbuf8b1blyrm7k7fbnrfpu59twhkuywg",
"resource_id": "1-11",
"event_store": "0598",
"event_type": "taste.sold_out"
}
Event Body Example - Taste On Sale
{
"event_id": "34921555-8322-2094-0892-9378PS04000001",
"event_time": 1610506192,
"event_company": "vbuf8b1blyrm7k7fbnrfpu59twhkuywg",
"resource_id": "1-11",
"event_store": "0598",
"event_type": "taste.on_sale"
}
Event Body Example - Push Get
{
"event_id": "99822523-7024-6969-9867-est12345341235",
"event_time": 1610506347,
"event_type": "push.get",
"event_company": "bvzgj25b9qcpu3va2y9ad9defhrttxfs",
"resource_id": "A101"
}
Event Body Example - Push Complete
{
"event_id": "99822523-7024-6969-9867-est12345341236",
"event_time": 1610506347,
"event_type": "push.complete",
"event_company": "bvzgj25b9qcpu3va2y9ad9defhrttxfs",
"resource_id": "A101",
"resource_data": {
"is_success": true
}
}
Event Body Example - Point Change
{
"event_type": "point.change",
"event_company": "bvzgj25b9qcpu3va2y9ad9defhrttxfs",
"event_store": "訓練教室",
"resource_id": "2210504000001",
"resource_data": {
"mobile_phone": "0987715825",
"accumulated_points": 5,
"redeem_points": 10,
"state": "ACCEPT"
}
}
{
"event_type": "point.change",
"event_company": "bvzgj25b9qcpu3va2y9ad9defhrttxfs",
"event_store": "訓練教室",
"resource_id": "2210504000001",
"resource_data": {
"mobile_phone": "0987715825",
"accumulated_points": -5,
"redeem_points": -10,
"state": "CANCEL"
}
}
Event Body Example - Ticket Complete
{
"event_id": "99822523-7024-6969-9867-est12345341236",
"event_time": 1610506347,
"event_type": "ticket.complete",
"event_company": "bvzgj25b9qcpu3va2y9ad9defhrttxfs",
"resource_id": "A0001",
"resource_href": "",
"resource_data": {
"completed": 5
}
}
Event Body Example - Ticket Change Status
{
"event_id": "99822523-7024-6969-9867-est12345341236",
"event_time": 1610506347,
"event_type": "ticket.change_status",
"event_company": "bvzgj25b9qcpu3va2y9ad9defhrttxfs",
"resource_id": "A0001",
"resource_data": {
"state": "DESTROYED"
}
}
state 票券狀態:
- CREATED: 已建立
- SOLD: 已銷售
- USED: 已兌回
- BLACKLISTED: 黑名單
- DESTROYED: 已銷毀
- RECEIVED: 已領用
- PR: 公關
Event Body Example - Data Sync
{
"event_id": "99822523-7024-6969-9867-est12345341237",
"event_type": "data.sync",
"event_company": "bvzgj25b9qcpu3va2y9ad9defhrttxfs",
"event_store": "0598"
}
Event Body Example - Store Change
{
"event_type": "store.change",
"event_store": "0",
"event_company": "ahdmx5qiexgm7ptfx10ohsw93y8wdsqr",
"event_id": "32160295-0552-4399-1101-32605496472311",
"event_time": 1639447690
}
Event Body Example - User Add
{
"event_id": "32160295-0552-4399-1101-32605496472311",
"event_time": 1639447690,
"event_type": "user.add",
"event_company": "ahdmx5qiexgm7ptfx10ohsw93y8wdsqr",
"event_store": "0",
"resource_id": "67pcbag9awwfdxe19gdj1rgfb2xvny9c",
"resource_href": "http://omni1.lafresh.com.tw:8090/v1/user"
}
Event Body Example - User Update
{
"event_id": "32160295-0552-4399-1101-32605496472311",
"event_time": 1639447690,
"event_type": "user.update",
"event_company": "ahdmx5qiexgm7ptfx10ohsw93y8wdsqr",
"event_store": "0",
"resource_id": "67pcbag9awwfdxe19gdj1rgfb2xvny9c",
"resource_href": "http://omni1.lafresh.com.tw:8090/v1/user"
}
Security
Webhook request 使用 X-Lafresh-Signature header 進行校驗,內容為 event body 進行 HMAC 運算,hash function 使用 SHA-256,key 使用 client secret。
Python Example
digester = hmac.new(client_secret, event_body, hashlib.sha256)
return digester.hexdigest()
Expected Response
Status-Code: 204 No Content
Retry Strategy
若 response 沒有回傳預期的結果,將進行三次重試,第一次重試延遲 0 秒,第二次重試延遲 30 秒,第三次重試延遲 60 秒。