FOMDocs

Webhook များ

အော်ဒါ၊ လက်ကျန် ဒါမှမဟုတ် ပို့ဆောင်မှု ပြောင်းတဲ့အခါ သင့် server ကို လက်မှတ်ထိုးထားတဲ့ စာ ပို့ပေးပါတယ်။

Webhook ဆိုတာ သင့် server ပေါ်က HTTPS လိပ်စာ တစ်ခုပါ။ ဆိုင်မှာ တစ်ခုခု ဖြစ်တဲ့အခါ FOM က အသေးစိတ်နဲ့ POST တစ်ခု ပို့ပေးလို့ သင့် tool တွေက ထပ်ခါထပ်ခါ မေးနေစရာ မလိုပါ။

Endpoint ထည့်ခြင်း

ဆက်တင် → Developers ရဲ့ Webhook များ အောက်မှာ Endpoint ထည့်ရန် ကို နှိပ်ပါ။ URL ကို ထည့်ပါ (https:// နဲ့ စပြီး အင်တာနက်ကနေ ရောက်နိုင်ရပါမယ်)၊ ပို့စေချင်တဲ့ event တွေကို အမှန်ခြစ်ပါ။ နောက်မှာ ပြတဲ့ လက်မှတ် secret ကို ကူးယူပါ - whsec_ နဲ့ စပြီး တစ်ကြိမ်သာ ပြပါတယ်။ ဆိုင်တစ်ဆိုင်မှာ endpoint ၁၀ ခုအထိ ရှိနိုင်ပါတယ်။

ping event ပို့ပြီး server ဘယ်လို ဖြေလဲ ကြည့်ဖို့ စမ်းသပ် ပို့ရန် ကို နှိပ်ပါ။

Event များ

Eventပို့တဲ့အချိန်data
order.createdFOM ထဲ ဒါမှမဟုတ် API ကနေ အော်ဒါ ဖန်တီးတဲ့အခါ{ "order": … }
order.status_changedအော်ဒါ အခြေအနေ ပြောင်းတဲ့အခါ{ "order": … }
stock.lowVariant လက်ကျန်က သတ်မှတ်ထားတဲ့ နည်းသော အဆင့် (မသတ်မှတ်ရင် 0) အထိ ကျတဲ့အခါ{ "variant_id": "…", "product": … }
delivery.updatedပို့ဆောင်မှု ဖန်တီးတဲ့အခါ ဒါမှမဟုတ် ပြောင်းတဲ့အခါ{ "delivery": … }
pingစမ်းသပ် ပို့ရန် နှိပ်တဲ့အခါ{ "message": "…" }

order၊ product နဲ့ delivery မှာ API နဲ့ field တွေ အတူတူပါ - order၊ product နဲ့ delivery object တွေကို ကြည့်ပါ။ Event ဖြစ်ခဲ့တဲ့ အချိန်က အခြေအနေအတိုင်း ပြပါတယ်။

POST /fom-webhooks HTTP/1.1
Content-Type: application/json
User-Agent: FOM-Webhooks/1.0
FOM-Event: order.created
FOM-Delivery: cmw9u2k0a0001…
FOM-Signature: t=1795680000,v1=5f2b8c…

{
  "id": "cmw9u1z4e0000…",
  "type": "order.created",
  "created_at": "2026-11-25T08:00:00.000Z",
  "shop_id": "…",
  "data": { "order": { "id": "…", "order_no": "ORD-0319", "status": "new", … } }
}

မြန်မြန် ဖြေပါ

  • ၁၀ စက္ကန့် အတွင်း 2xx status တစ်ခုခုနဲ့ ဖြေပါ။ ကြာတဲ့ အလုပ်တွေကို queue လို နောက်မှ လုပ်ပါ။
  • တခြား status၊ အချိန်ကုန်တာ ဒါမှမဟုတ် redirect ကို မအောင်မြင်ဘူးလို့ ယူဆပါတယ်။
  • Endpoint တစ်ခုအတွက် event တွေက ဖြစ်ခဲ့တဲ့ အစီအစဉ်အတိုင်း ရောက်ပါတယ်။ အရင်တစ်ခု အောင်မြင်တဲ့အထိ ဒါမှမဟုတ် လက်လျှော့တဲ့အထိ နောက်တစ်ခုက စောင့်ပါတယ်။
  • Event တစ်ခုတည်း တစ်ကြိမ်ထက် ပိုရောက်နိုင်ပါတယ်။ လုပ်ပြီးသားကို ကျော်ဖို့ ၎င်းရဲ့ id ကို သုံးပါ။

ပြန်ကြိုးစားခြင်း

မအောင်မြင်တဲ့ ပို့မှုကို ၁ မိနစ်၊ ၅ မိနစ်၊ ၃၀ မိနစ်၊ ၂ နာရီ၊ ၆ နာရီနဲ့ ၂၄ နာရီ ကြာပြီးနောက် ပြန်ကြိုးစားပြီး နောက်ဆုံးမှာ မအောင်မြင် လို့ မှတ်ပါတယ်။ Endpoint ပေါ်က ပို့မှုများ ကိုနှိပ်ရင် ပို့မှုတိုင်း၊ server ရဲ့ အဖြေကို ကြည့်ပြီး ပြန်ပို့ရန် နဲ့ ပြန်ပို့နိုင်ပါတယ်။ ပို့မှုတွေကို ရက် ၃၀ သိမ်းထားပါတယ်။

ဆက်တိုက် ၅၀ ကြိမ် မအောင်မြင်ရင် FOM က endpoint ကို ပိတ်ပြီး ပိုင်ရှင်ကို အသိပေးပါတယ်။ Server ကို ပြင်ပြီး ဖွင့်ရန် ကို နှိပ်ပါ။

လက်မှတ်ကို စစ်ပါ

တခြားသူ အတုအယောင် event တွေ မပို့နိုင်အောင် စာတိုင်းကို မယုံခင် စစ်ပါ။ FOM-Signature မှာ အချိန် t နဲ့ လက်မှတ် v1 ပါပါတယ် - t၊ အစက် တစ်ခုနဲ့ request body အကြမ်း ကို လက်မှတ် secret နဲ့ HMAC-SHA256 လုပ်ထားတာကို hex နဲ့ ပြတာပါ။

  1. JSON အဖြစ် မပြောင်းခင် body အကြမ်းကို ဖတ်ပါ။
  2. HMAC-SHA256(secret, t + "." + body) ကို တွက်ပြီး v1 နဲ့ constant time နဲ့ နှိုင်းယှဉ်ပါ။
  3. Replay တွေကို တားဖို့ t က ယခုအချိန်နဲ့ ၅ မိနစ်ထက် ကွာရင် ငြင်းပါ။
import { createHmac, timingSafeEqual } from "node:crypto"

export function verifyFomSignature(rawBody, header, secret) {
  const parts = Object.fromEntries(
    header.split(",").map((part) => part.trim().split("="))
  )
  const t = Number(parts.t)
  if (!parts.v1 || Math.abs(Date.now() / 1000 - t) > 300) return false
  const expected = createHmac("sha256", secret)
    .update(`${t}.${rawBody}`)
    .digest()
  const given = Buffer.from(parts.v1, "hex")
  return given.length === expected.length && timingSafeEqual(given, expected)
}

// Express: keep the raw body.
app.post("/fom-webhooks", express.raw({ type: "application/json" }), (req, res) => {
  if (!verifyFomSignature(req.body, req.get("FOM-Signature") ?? "", process.env.FOM_WEBHOOK_SECRET)) {
    return res.sendStatus(400)
  }
  const event = JSON.parse(req.body)
  res.sendStatus(200)
})

TypeScript SDK မှာ constructWebhookEvent အဖြစ် ပါပြီးသားပါ။

Secret ပြောင်းခြင်း

ဥပမာ secret ပေါက်ကြားသွားရင် endpoint ပေါ်က Secret အသစ် ကိုနှိပ်ပြီး လက်မှတ် secret အသစ် ပြုလုပ်ပါ။ အဟောင်းက ချက်ချင်း ရပ်သွားလို့ server ကို ချက်ချင်း update လုပ်ပါ။

ဤစာမျက်နှာတွင်