Skip to content

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"
}
resource_href API:Get Order Details

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
      }
    ]
  }
}
resource_href API:Get Order Details

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"
}
resource_href API:Get Order Details

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"
}
resource_href API:Get Order Details

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"
}
resource_href API:Get Order Details

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"
}
resource_href API:Get Order Details

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
}
resource_href API:Get Order Out Of Stock Items

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
}
resource_href API:Get Order Return Items

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"
}
resource_href API:Get Products

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 秒。