gov-pay
Reference

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-г агуулна.

ТалбарТөрөлТайлбар
qrTextstringEMVCo QR-ийн text payload. Өөрийн талд QR зурахдаа (canvas/SVG) ашиглана.
qrImagestringBase64-ээр кодлогдсон PNG зураг. data:image/png;base64,<qrImage> болгож <img>-д шууд харуулна.
shortUrlstring (optional)Нэг товчоор нээх ерөнхий deeplink (универсал линк).
urlsarrayБанк/wallet тус бүрийн deeplink жагсаалт. Доорх бүтэцтэй.

urls[] элемент бүрийн талбарууд:

ТалбарТөрөлТайлбар
namestringБанк/wallet-ийн нэр.
descriptionstringТайлбар текст.
logostringЛого зургийн URL.
linkstringТухайн банк/wallet-руу шилжих deeplink.

qrText, qrImage хоёр нь ижил QR-ийг хоёр өөр хэлбэрээр илэрхийлнэ. Хурдан хэрэгжүүлэхэд qrImage-г шууд харуулах нь хялбар; өөрийн дизайнаар (өнгө, лого embed) дахин зурах бол qrText-ийг ашигла.

qpay vs govstd ялгаа

Хоёулаа EMVCo QR Code Specification-д суурилна. Гол ялгаа нь EMVCo merchant account information template tag болон доторх scheme.

qpaygovstd
EMVCo tagtag 27tag 26
SchemeAID + QPP_QRMN scheme
Хариун дахь объектqpayqpay (нэр ижил)
Талбарын бүтэц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 ашиглах бол Гарын үсэг шалгах-ийг заавал хэрэгжүүл.

Холбоотой хуудас