NFC-г турших¶
Терминалын NFC sticker-ийг бэлдэж, iPhone уншиж байгааг шалгах — бодит sticker-ээр эсвэл sticker-гүйгээр Android
утсаар tag дуурайж. Хугацаа: 20–40 минут. Хэрэгтэй: бүртгэсэн терминал (url-тай), NTAG213/215/216 sticker эсвэл
NFC-тэй Android утас, NFC-тэй iPhone (XS ба түүнээс хойшхи).
Утсан дээр юу болох вэ
Gerege App (iOS build 122+) суусан iPhone sticker уншихад https://geregeapp.mn/pay/t/<code> нь Universal Link
тул апп нээгдэж, терминалын нээлттэй сагсыг claim хийгээд төлөх цонхыг (машины нэр, байршил, дүн) харуулна →
Face ID. Апп дотроос мөн QR товчны «NFC уншуулах»-аар уншуулна. Апп суугаагүй бол Safari-д нийтийн терминалын
хуудас нээгдэнэ (GET /api/v1/miniapp/pay/t/{code}-ийн мэдээлэл, доор). Test сагсыг зөвхөн апп-ын эзэн ба
тест хэрэглэгчид авна. Утасгүй бол simulate-tap.
Юу бичих вэ¶
Sticker-т зөвхөн терминалын URL бичигдэнэ — дүн, secret, сагс хэзээ ч биш:
<code> нь серверийн олгосон 10 тэмдэгт (23456789abcdefghjkmnpqrstuvwxyz), хэзээ ч өөрчлөгдөхгүй; терминалын
объектын url талбарт бэлэн байна (Объектууд). Ижил URL-ийг sticker-ийн QR-д бичнэ —
QR ба NFC хоёр нэг замаар орно.
NDEF мессеж нь нэг URI record (TNF 0x01 well-known, type U, URI prefix 0x04 = https://):
D1 01 <payload length> 55 04 67 65 72 65 67 65 61 70 70 2E 6D 6E 2F 70 61 79 2F 74 2F <code bytes>
g e r e g e a p p . m n / p a y / t /
Бодит sticker бичих¶
- NTAG213 (144 байт — энэ URL-д хангалттай), NTAG215 эсвэл NTAG216 sticker; төмөр гадаргуу дээр наах бол anti-metal (ferrite давхаргатай) sticker.
- Gerege App-аар (iOS build 122+): Тохиргоо → Хэтэвч → «Худалдагч ба байгууллага» → «Sticker бичих» — танай
байгууллагын гишүүн (консолын
miniapp.read) терминалаа жагсаалтаас сонгоход апп канон URL-ийг бичиж, дахин уншиж таарсны дараа буцаалтгүй түгжинэ. Эсвэл ямар ч NFC бичих апп (жишээ нь NFC Tools) → «Write» → «URL/URI» → дээрх URL. QR sticker-ийг консолын sticker-ийн PDF-ээр (POST /terminals/print-sheet) хэвлэнэ — Терминал ба NFC sticker. - Бичсний дараа tag-ийг түгжинэ («Lock tag» / read-only) — түгжээгүй tag-ийг хэн ч өөр холбоосоор дарж бичнэ. Түгжих нь буцаагдахгүй; URL-ээ эхлээд шалгаад түгжинэ.
- iPhone-оор шалгах: дэлгэц асаалттай, түгжээ тайлсан эсвэл түгжээтэй ч болно, Camera / Wallet / Apple Pay эсвэл өөр NFC уншигч идэвхгүй үед утасны дээд хэсгийг sticker-т ойртуулна (background tag reading) — холбоосын мэдэгдэл гарна.
Sticker-гүй: Android-оор tag дуурайх (HCE)¶
Android-ийн Host Card Emulation нь утсыг NFC Forum Type 4 Tag болгож, iPhone background tag reading-аар NDEF
URI уншина — sticker хэвлэхээс өмнө URL, урсгалыг турших хялбар арга. Нээлттэй эхийн «HCE NDEF emulator» жишээ
апп-ууд байдаг; өөрөө бичих бол HostApduService нь дараах APDU-уудад хариулна:
| Уншигчийн команд | APDU | Хариу |
|---|---|---|
| NDEF Tag Application сонгох | 00 A4 04 00 07 D2 76 00 00 85 01 01 00 |
90 00 |
| Capability Container (CC) файл сонгох | 00 A4 00 0C 02 E1 03 |
90 00 |
| CC унших | 00 B0 00 00 0F |
00 0F 20 00 3B 00 34 04 06 E1 04 00 FF 00 FF 90 00 |
| NDEF файл сонгох | 00 A4 00 0C 02 E1 04 |
90 00 |
| NDEF урт (NLEN) унших | 00 B0 00 00 02 |
2 байт урт + 90 00 |
| NDEF мессеж унших | 00 B0 <offset> <length> |
мессежийн хэсэг + 90 00 |
| бусад | 6A 82 (олдсонгүй) |
res/xml/apduservice.xml-д AID D2760000850101, android:category="other", requireDeviceUnlock="false"-ийг
бүртгэнэ. CC дахь E1 04 нь NDEF файлын id, 00 FF нь хамгийн их хэмжээ, сүүлийн 00 унших эрх (нээлттэй), FF
бичих эрх (хориотой). NDEF файл = 2 байт NLEN + дээрх NDEF мессеж. Android утсыг асаалттай, түгжээг тайлж,
iPhone-ийн дээд хэсэгт нурууг нь хүргэнэ.
Tip
Зарим Android утас HCE-г зөвхөн дэлгэц асаалттай үед, зарим нь Google Wallet-ийн «default payment» сонголттой зөрчилдөхөд ажиллуулдаггүй — тест хийхэд Wallet-ийн NFC төлбөрийг түр унтраана.
Терминалын нийтийн мэдээлэл¶
Gerege App-гүй утсанд tag уншуулсны дараа нээгдэх хуудас ба Gerege App-ын төлөх цонх нь энэ мэдээллийг харуулна — нэвтрэлтгүй, хувийн мэдээлэлгүй:
{"object": "terminal",
"merchant": {"name": "Vending.mn", "icon_url": "https://…"},
"terminal": {"code": "7k2m9x4q3p", "label": "Машин №7", "location": "СБД, 1-р хороо"},
"pending": {"object": "payment", "merchant": {"name": "Vending.mn", "icon_url": "https://…"},
"terminal": {"code": "7k2m9x4q3p", "label": "Машин №7", "location": "СБД, 1-р хороо"},
"amount": 3500, "currency": "MNT", "status": "requires_confirmation",
"claimed": false, "expires_at": "…", "livemode": true}}
pending нь claim хийгдээгүй нээлттэй live сагс, эсвэл null. 404 — танигдаагүй, идэвхгүй терминал эсвэл
түдгэлзсэн худалдагч. Минутад 120 хүсэлт.
Sticker-ийн аюулгүй байдал¶
- Sticker secret барихгүй — зөвхөн терминалыг нэрлэнэ. Дүн нь таны сервер үүсгэсэн intent-ээс.
- Хуурамч sticker-ийг дээгүүр нь наах эрсдэл: Gerege App-ын төлөх цонх Face ID-аас өмнө бүртгэлтэй нэр
(
label), байршил (location), худалдагчийн батлагдсан нэрийг харуулна — тиймээс бүртгэлдээ машиныг тодорхой нэрлэнэ («Машин №7», «СБД, 1-р хороо»). Машинуудаа тогтмол шалгаж, давхар наалт, ховхорсон ирмэг хайна. - Алсаас claim: код хэвлэгдсэн тул хэн ч claim хийж чадна — баталгаажаагүй claim 90 секундэд дуусна, нэг хүн
нэг дор 3-аас олон баталгаажаагүй claim барихгүй, та
POST /payment-intents/{id}/unclaim-аар суллана. - Tag бүрийг түгжинэ. Уншилт бүрт шинэ гарын үсэгтэй URL өгдөг NTAG 424 DNA (SUN) дэмжлэг — «удахгүй».