QR стандарт: qpay vs govstd
gov-pay POST /payments хариунд серверээс угсарсан qpay объект, qpay болон govstd QR стандартын ялгаа, render хийх жишээ.
gov-pay нь EMVCo QR кодыг болон банк/wallet тус бүрийн deeplink-ийг үргэлж сервер талд угсарч өгдөг. Партнёр нь өөрөө EMVCo payload бүтээх, deeplink угсрах шаардлагагүй — зөвхөн POST /payments хариунд ирэх qpay объектыг харуулна.
Аль QR стандартыг (qpay эсвэл govstd) ашиглахыг партнёрийн qrStandard тохиргоо тодорхойлно. Энэ тохиргоог gov-pay тал тохируулдаг тул хариун дахь объектын бүтэц хоёр стандартад ижил хэвээр байна. Та render хийх кодоо солих шаардлагагүй.
Хариун дахь qpay объект
POST /payments амжилттай (201) бол хариунд qpay объект ирнэ. Талбарын нэр нь qpay боловч энэ нь qrStandard тохиргооноос үл хамаарч аль ч стандартаар угсарсан QR-г агуулна.
| Талбар | Төрөл | Тайлбар |
|---|---|---|
qrText | string | EMVCo QR-ийн text payload. Өөрийн талд QR зурахдаа (canvas/SVG) ашиглана. |
qrImage | string | Base64-ээр кодлогдсон PNG зураг. data:image/png;base64,<qrImage> болгож <img>-д шууд харуулна. |
shortUrl | string (optional) | Нэг товчоор нээх ерөнхий deeplink (универсал линк). |
urls | array | Банк/wallet тус бүрийн deeplink жагсаалт. Доорх бүтэцтэй. |
urls[] элемент бүрийн талбарууд:
| Талбар | Төрөл | Тайлбар |
|---|---|---|
name | string | Банк/wallet-ийн нэр. |
description | string | Тайлбар текст. |
logo | string | Лого зургийн URL. |
link | string | Тухайн банк/wallet-руу шилжих deeplink. |
qrText, qrImage хоёр нь ижил QR-ийг хоёр өөр хэлбэрээр илэрхийлнэ. Хурдан хэрэгжүүлэхэд qrImage-г шууд харуулах нь хялбар; өөрийн дизайнаар (өнгө, лого embed) дахин зурах бол qrText-ийг ашигла.
qpay vs govstd ялгаа
Хоёулаа EMVCo QR Code Specification-д суурилна. Гол ялгаа нь EMVCo merchant account information template tag болон доторх scheme.
qpay | govstd | |
|---|---|---|
| EMVCo tag | tag 27 | tag 26 |
| Scheme | AID + QPP_QR | MN scheme |
| Хариун дахь объект | qpay | qpay (нэр ижил) |
| Талбарын бүтэц | qrText, qrImage, shortUrl?, urls[] | ижил |
| Сонголт | партнёрийн qrStandard | партнёрийн qrStandard |
Партнёрийн хувьд qrStandard хооронд солих шаардлага гарвал gov-pay-тэй холбогдоно. Энэ нь өөрчлөгдөхөд хариун дахь объектын нэр (qpay) болон талбарын бүтэц хэвээр үлдэх тул клиент талын render код ажиллаж байх ёстой.
Render хийх жишээ
qrImage-г шууд харуулах
qrImage нь base64 PNG тул data: URI болгож <img>-д шууд оруулна.
<img
src="data:image/png;base64,iVBORw0KGgo...AAANSUhEUg=="
alt="Төлбөрийн QR"
width="240"
height="240"
/>qpay объектыг бүтэн render хийх (жишээ)
POST /payments хариунаас qpay объектыг авч QR зураг + банкны deeplink жагсаалтыг харуулах жишээ.
type QpayUrl = {
name: string;
description: string;
logo: string;
link: string;
};
type Qpay = {
qrText: string;
qrImage: string;
shortUrl?: string;
urls: QpayUrl[];
};
function renderQpay(qpay: Qpay): string {
const img = `<img src="data:image/png;base64,${qpay.qrImage}" alt="Төлбөрийн QR" width="240" height="240" />`;
const button = qpay.shortUrl
? `<a href="${qpay.shortUrl}">Аппаар нээх</a>`
: '';
const list = qpay.urls
.map(
(u) =>
`<li>
<a href="${u.link}">
<img src="${u.logo}" alt="${u.name}" width="32" height="32" />
<span>${u.name}</span>
<small>${u.description}</small>
</a>
</li>`,
)
.join('');
return `${img}${button}<ul>${list}</ul>`;
}Мобайл дээр хэрэглэгч urls[].link (эсвэл shortUrl) дээр дарж банк/wallet аппаа нээж төлбөрөө баталгаажуулна. Десктоп дээр qrImage-г харуулж, хэрэглэгч аппаараа уншуулна.
Төлбөр баталгаажсан эсэхийг GET /payments/{id}-аар асуух, эсвэл Webhook (payment.confirmed) хүлээн авч мэдэх боломжтой. Webhook ашиглах бол Гарын үсэг шалгах-ийг заавал хэрэгжүүл.
Холбоотой хуудас
- Төлбөр — POST /payments хариу, статусын урсгал.
- Орчин — sandbox / production base URL.
- Алдааны кодууд — 422 (төлбөр амжилтгүй), бусад код.
- Webhook тойм —
payment.confirmedevent.