Webhook гарын авлага
Webhook
Төлбөрийн мэдэгдэл хүлээн авах
Webhook бүртгэх
POST /api/v1/webhooks{
"url": "https://your-app.mn/webhook/govpay",
"secret": "your-webhook-secret",
"events": ["payment.submitted", "payment.confirmed"]
}Бусад үйлдэл: GET /api/v1/webhooks (жагсаах), DELETE /api/v1/webhooks/{id} (идэвхгүй болгох → { "ok": true }).
Мэдэгдлийн бүтэц
GovPay таны url руу POST хийнэ. Event төрөл нь X-GovPay-Event header-т, body нь зөвхөн тухайн event-ийн payload (event/data/timestamp ороохгүй):
| Header | Утга |
|---|---|
X-GovPay-Event | payment.submitted эсвэл payment.confirmed |
X-GovPay-Signature | HMAC-SHA256 hex (prefix-гүй) |
Content-Type | application/json |
payment.submitted body:
{
"id": "9c0e7b21-3f4a-4d5e-8b6c-1a2d3e4f5a6b",
"invoiceId": "5f8d0a3e-1b2c-4d6e-8a9f-0c1d2e3f4a5b"
}payment.confirmed body:
{
"id": "9c0e7b21-3f4a-4d5e-8b6c-1a2d3e4f5a6b",
"amount": 150000
}
idнь төлбөрийн UUID. Дэлгэрэнгүй (статус, нэхэмжлэлүүд) хэрэгтэй болGET /api/v1/payments/{id}дуудна.
HMAC гарын үсэг шалгах
Гарын үсэг нь body-гийн raw hex HMAC-SHA256 — sha256= гэх мэт prefix байхгүй:
const crypto = require('crypto');
function verifyWebhook(rawBody, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(rawBody)
.digest('hex');
return expected === signature;
}
// Express.js жишээ
app.post('/webhook/govpay', (req, res) => {
const sig = req.headers['x-govpay-signature'];
const event = req.headers['x-govpay-event'];
const body = JSON.stringify(req.body);
if (!verifyWebhook(body, sig, process.env.WEBHOOK_SECRET)) {
return res.status(401).send('Invalid signature');
}
console.log(`Event: ${event}`, req.body);
res.status(200).send('OK');
});Сервер 5 секундийн timeout-той илгээнэ. Хүлээн авагч
2xxбуцаах нь зүйтэй.
Events
| Event | Тайлбар | Payload |
|---|---|---|
payment.submitted | Төлбөр засгийн газарт илгээгдсэн | { id, invoiceId } |
payment.confirmed | Төлбөр баталгаажсан | { id, amount } |