
QPay-ийн QR уншуулахад цаана нь юу болдог вэ?

Х.Буяндэлгэр
Багш


Х.Буяндэлгэр
Багш
Дэлгүүрээс 5,000 төгрөгийн кофе авлаа. Кассын дэлгэцэд QR код гарч ирнэ, та банкныхаа аппаар уншуулна, «Амжилттай» гэсэн бичиг гарна. Бүгд нийлээд гурван секунд.
Гэтэл энэ гурван секундэд таны утас, дэлгүүрийн касс, QPay-ийн сервер, хоёр банк, заримдаа бүр Монголбанкны систем хүртэл хоорондоо «ярилцаж» амждаг. Хамгийн сонирхолтой нь, тэр QR код дотор мөнгө ч байхгүй, нууц ч байхгүй. Тэгвэл яг юу байдаг юм бэ?
QR кодыг 1994 онд Японы Denso Wave компанийн инженер Масахиро Хара автомашины эд ангийг шошголох зорилгоор зохион бүтээсэн. Угтаа энэ бол текстийг хар, цагаан дөрвөлжин нүдээр бичих арга юм. Камер эдгээр нүдийг уншаад буцааж текст болгоно.
QPay-ийн хөгжүүлэгчдэд зориулсан баримт бичигт байдаг туршилтын QR кодын доторх текст ийм харагддаг:
0002010102121531279404962794049600000000KKTQPAY52046010530349654031005802MN5913TEST_MERCHANT6011Ulaanbaatar…
Утгагүй тоо шиг харагдаж байна уу? Үнэндээ маш энгийн дүрэмтэй: хэсэг бүр «шошго (2 орон) + урт (2 орон) + утга» гэсэн гурван зүйлээс тогтоно. Олон улсад төлбөрийн QR кодод хэрэглэдэг EMV стандарт талбар бүрийг ийм дугаар, урт, утгаар тодорхойлдог. Тайлж үзье:
00 02 01 — форматын хувилбар: 01
01 02 12 — QR кодын төрөл: 12 = гүйлгээ бүрд шинээр үүсдэг (динамик)
52 04 6010 — бизнесийн ангиллын код
53 03 496 — валют: 496 бол төгрөгийн олон улсын код
54 03 100 — дүн: 100 төгрөг
58 02 MN — улс: Монгол
59 13 TEST_MERCHANT — худалдаачны нэр. Тоолоод үзээрэй, яг 13 тэмдэгт
60 11 Ulaanbaatar — хот, 11 тэмдэгт

01 шошгын утга 12 биш 11 байвал нэг QR-ийг олон гүйлгээнд ашиглана гэсэн үг, өөрөөр хэлбэл лангуун дээр наасан хэвлэмэл QR. Хамгийн төгсгөлд нь 63 шошготой 4 тэмдэгтийн шалгах код (CRC) байдаг. Текстийн ганц тэмдэгт өөрчлөгдөхөд л энэ код таарахаа больж, апп «буруу QR» гэж мэднэ.
Анзаарсан уу? Энд таны тухай юу ч алга. Дансны дугаар, нууц үг, үлдэгдэл аль нь ч байхгүй. QR бол «хэнд, хэдэн төгрөг, ямар дугаартай нэхэмжлэхээр» гэсэн хаяг төдий. Хэн нэгэн таны QR-ийн зургийг нууцаар авлаа гэхэд хийж чадах ганц зүйл нь таны кофены мөнгийг төлөх.
Монголд төлбөрийн QR-ийг хүн бүр өөрийнхөөрөө зохиодоггүй. Төлбөрийн үйлчилгээ үзүүлэгчид QR-аар гүйлгээ хийхдээ Монгол банкнаас баталсан QR кодын мэдээний бүтэц, зааврыг мөрдөх үүрэгтэй. Нэг QR-ийг олон өөр банкны апп уншиж чаддагийн учир энэ.
QPay-ийн QR-ийн голд лого байдгийг анзаарсан уу? QPay-ийн API QR зургийг голдоо логотой хэлбэрээр буцаадаг. Лого кодын нэг хэсгийг халхалж байгаа мөртөө яагаад уншигддаг вэ? Учир нь QR код Рид–Соломоны алдаа засах аргыг ашигладаг. Мэдээллийг зориуд илүүдэлтэй бичдэг тул хамгийн өндөр түвшиндээ кодын 30 орчим хувь нь гэмтсэн ч сэргээж уншина. Бохирдсон, үрчийсэн QR уншигддагийн нууц энэ.

Кассын систем QR-ийг өөрөө зохиодоггүй, QPay-ийн сервер рүү хүсэлт илгээдэг. Хоёр программ хоорондоо тохирсон дүрмээр ярилцах «цонх»-ыг API гэдэг. Рестораны зөөгч шиг төсөөлж болно: та гал тогоо руу орохгүй, цэсээс сонгоод зөөгчид хэлнэ, зөөгч хоолыг авчирна.
Эхлээд касс QPay-аас авсан хэрэглэгчийн нэр, нууц үгээрээ нэвтэрч, түр хугацааны token буюу «нэвтрэх үнэмлэх» авна. Дараа нь үнэмлэхээ үзүүлээд нэхэмжлэх үүсгэх хүсэлт илгээнэ. Хялбарчилбал:
{
"invoice_code": "TANAI_DELGUUR",
"sender_invoice_no": "ZAHIALGA-1001",
"invoice_receiver_code": "terminal",
"invoice_description": "Кофе 1ш",
"amount": 5000,
"callback_url": "https://delguur.mn/qpay/callback"
}
Хариуд нь QPay нэхэмжлэхийн дугаар, QR-ийн текст, QR-ийн зураг, мөн банкны аппуудыг шууд нээх холбоосуудыг буцаана. Касс зургийг дэлгэцэд гаргана. Сүүлийн мөр дэх callback_url-ийг санаж байгаарай, 4-р алхамд хэрэг болно.

Банкны апп камераар QR-ийг уншиж, доторх текстийг задлаад серверээрээ дамжуулан нэхэмжлэхийг шалгана. Дэлгэцэд «Хэнд: …, Дүн: 5,000₮» гэж гарна. Та ПИН код эсвэл хурууны хээгээр баталгаажуулна.
Энэ бол бүх гинжин хэлхээний цорын ганц «хүний» алхам бөгөөд хамгийн чухал нь. QR өөрөө мөнгө шилжүүлж чадахгүй, зөвхөн та банкандаа тушаал өгч чадна.
Хэрэв та болон дэлгүүр нэг банканд данстай бол юу ч хаашаа ч явахгүй. Банкны мэдээллийн санд таны мөрөөс 5,000 хасагдаж, дэлгүүрийн мөрөнд 5,000 нэмэгдэнэ. Мөнгө гэдэг бол маш найдвартай хөтөлдөг бүртгэлийн дэвтэр дэх тоо юм.
Гэхдээ банкнууд гүйлгээ бүрийн ард бие бие рүүгээ мөнгө зөөгөөд байдаггүй. ACH+ нь оролцогчдын тухайн өдрийн өглөг, авлагыг хооронд нь суутгаж цэвэр зөрүүг тооцдог бөгөөд эцсийн төлбөр тооцоо нь оролцогчдын Монгол банк дээрх дансаар хийгддэг. Ангийн хоёр найзаар жишээлбэл: Бат Доржид 5,000₮, Дорж Батад 3,000₮ өртэй бол хоёр удаа мөнгө дамжуулахын оронд Бат 2,000-ыг л өгөхөд болно. Үүнийг клиринг гэдэг.
Касс таны утасны дэлгэцийг хардаггүй. Тэгвэл яаж мэддэг вэ?
Нэг арга нь касс QPay-аас секунд тутам «Төлсөн үү? Төлсөн үү?» гэж асуух. Хоол болохыг хүлээсэн хүүхэд ээжээсээ минут тутам асуудагтай адил: ажиллана, гэхдээ хоёр талдаа ядаргаатай. Үүнийг polling гэдэг.
Илүү ухаалаг арга нь «Болохоор нь дуудаарай» гээд дугаараа үлдээх. 1-р алхамд касс яг үүнийг хийсэн, callback_url бол кассын «утасны дугаар». Төлбөр төлөгдмөгц QPay тэр хаяг руу төлбөрийн дугаарыг дамжуулна. Үүнийг callback буюу webhook гэдэг.
Гэхдээ сайн программист дуудлага ирлээ гээд шууд итгэдэггүй, хэн нэгэн хуурамч «төлөгдлөө» мэдэгдэл илгээж болно шүү дээ. Тиймээс касс QPay-аас тухайн нэхэмжлэхийн төлбөрийг дахин шалгаж байж л баримтаа хэвлэнэ. Гүйлгээ амжилттай болмогц худалдан авагч, худалдаачин хоёуланд нь мэдэгдэл шууд очно.
Гэхдээ сайн программист дуудлага ирлээ гээд шууд итгэдэггүй, хэн нэгэн хуурамч «төлөгдлөө» мэдэгдэл илгээж болно шүү дээ. Тиймээс касс QPay-аас тухайн нэхэмжлэхийн төлбөрийг дахин шалгаж байж л баримтаа хэвлэнэ. Гүйлгээ амжилттай болмогц худалдан авагч, худалдаачин хоёуланд нь мэдэгдэл шууд очно.

Таны утаснаас гарсан мэдээлэл Wi-Fi төхөөрөмж, үүрэн холбооны сүлжээ, олон арван чиглүүлэгчээр дамжиж сервер хүрнэ. Замын аль ч цэгт хэн нэгэн чагнаж магадгүй. Тиймээс эдгээр яриа HTTPS буюу шифрлэгдсэн сувгаар явдаг. QPay-ийн API-ийн хаяг ч https://-ээр эхэлдэг. Ерөнхийдөө гурван зүйл болно:
Сервер сертификат буюу «үнэмлэх»-ээ үзүүлнэ. Апп үүнийг шалгаж, жинхэнэ банктайгаа ярьж байгаагаа баталгаажуулна.
Хоёр тал бусдад сонсогдож байсан ч зөвхөн өөрсдөө л мэдэх нэг удаагийн нууц түлхүүр тохирно. Нээлттэй сувгаар яаж нууц тохирдог вэ? Энэ бол Диффи–Хеллманы арга, тусдаа нийтлэлийн сэдэв.
Цаашдын бүх мэдээллийг тэр түлхүүрээр шифрлэнэ.
Цезарийн шифрийн тухай нийтлэлийг уншсан бол 26 үсэгтэй цагаан толгойд ердөө 25 боломжит түлхүүр байдгийг мэднэ, гараар ч хэдэн минутад тайлчихна. Өнөөдөр өргөн хэрэглэдэг AES-256 шифрийн боломжит түлхүүрийн тоо 2²⁵⁶ буюу 78 оронтой тоо. Дэлхийн бүх компьютер нийлээд ч нэг бүрчлэн туршиж барахгүй.

QR код дотор мөнгө ч, нууц ч байдаггүй. Энэ бол ердөө нэхэмжлэхийн хаяг бөгөөд жинхэнэ ажлыг API, банк хоорондын сүлжээ, шифрлэлт гурав хэдхэн секундэд амжуулдаг.