Агуулгыг алгасах

Sandbox — test горим

Энэ хуудсыг уншсаны дараа та бодит мөнгө хөдөлгөхгүйгээр интеграцаа хэрхэн турших, юу одоо ажилладаг, юу хараахан ажиллахгүйг мэднэ. Хугацаа: 5 минут. Хэрэгтэй: хөгжүүлэгчийн консолд бүртгэлтэй апп ба түүний test түлхүүр.

Test түлхүүр

Аль орчинд ажиллах нь түлхүүрээр шийдэгдэнэ: test түлхүүрээр үүсгэсэн intent livemode: false, тэр түлхүүрээр зөвхөн test объектууд харагдана. Test ба live өгөгдөл хэзээ ч холилдохгүй — жагсаалт, GET, webhook-ийн livemode бүгд тусдаа.

Түлхүүр Client id Secret Хэрхэн авах
API түлхүүр (test) gk_test_… gks_test_… консол → Түлхүүр → «Шинэ түлхүүр», нэр, preset эсвэл scope (POST /dev/apps/{id}/keys)
Анхдагч түлхүүр (test) mapp_test_… gma_cs_… POST /dev/apps/{id}/credentials — тухайн орчны бүх scope
Live gk_live_… / mapp_… gks_live_… / gma_cs_… консолын «Түлхүүр»-ээс (эсвэл POST /dev/apps/{id}/credentials): miniapp.keys.live эрх ба сүүлийн 10 минутын нэвтрэлт (403 fresh_sign_in_required бол дахин нэвтэрч давтана); апп батлагдсаны дараа л ажиллана; sandbox байгууллагад хэзээ ч

Test түлхүүр апп ноорог, батлагдаагүй байхад ч шууд ажиллана. Secret нэг удаа л харагдана.

export GEREGE_CLIENT_ID=gk_test_xxxxxxxxxxxxxxxxxxxx
export GEREGE_CLIENT_SECRET=gks_test_…

curl -s "https://geregeapp.mn/api/v1/miniapp/payment-intents?limit=5" \
  -u "$GEREGE_CLIENT_ID:$GEREGE_CLIENT_SECRET"

Test горимд юу өөр вэ

  • Мөнгө хөдлөхгүй. Core banking-д хандахгүй, hold тавигдахгүй; payout данс тохируулаагүй байсан ч болно.
  • Үр дүнг дүнгийн сүүлийн хоёр орон шийднэ — Тест дүн.
  • Capture шууд succeeded, буцаалт шууд succeeded болно (ledger-ийн хариу хүлээхгүй).
  • Хугацаа (expires_in, capture_within) live-тай яг адил ажиллана — хугацаа өнгөрсөн intent expired болно.
  • Webhook-ууд live-тай ижил төрөл, ижил хэлбэрээр ирнэ, livemode: false. Endpoint нь орчин бүрт тусдаа — test endpoint-ийг (жишээ нь tunnel) live-д хүрэлгүй нэмнэ (Локал webhook). Апп-ын анхны webhook URL (endpoint №1) хоёр орчинд хамт — тэнд livemode-оор ялгана.
  • GET /settlements test түлхүүрээр үргэлж хоосон — тооцоо зөвхөн live мөнгөнд.
  • Test түлхүүрт live-only scope (terminals:write, sub_merchants:write, payout_links:write, webhooks:write) олгогдохгүй: терминал, дэд худалдагч, payout холболтыг test түлхүүр уншина, бичих нь 403 live_only. Бүртгэл нь хоёр орчинд нэг тул (алдагдсан sandbox secret бодит машиныг өөрчлөх ёсгүй) тэднийг live түлхүүр эсвэл консолоор бүртгэнэ. Sticker-ийн PDF хэвлэхийг (POST /terminals/print-sheet) test түлхүүр ч хийнэ.
  • Нэг терминал дээр test сагс ба live сагс зэрэг нээлттэй байж болно (терминалд claim хийгдээгүй нээлттэй intent орчин бүрт нэг). Test сагсыг зөвхөн апп-ын эзэн ба тест хэрэглэгчид авна; бусад хүнд, нийтийн /pay/t/<code> хуудсанд зөвхөн live сагс харагдана.

Юуг одоо эцэс хүртэл турших боломжтой

Урсгал Одоо Тэмдэглэл
Claimless intent (qr, redirect, terminal) үүсгэх, давтах, жагсаах, цуцлах, unclaim, capture, буцаалт ✓ test түлхүүрээр; pay_url хариунд ирнэ
Claimless intent-ийг утсаар төлөх — Gerege App-ын QR товч, «NFC уншуулах», камераар /pay/… холбоос (Universal Link), sticker-т утсаа хүргэх ✓ Gerege App iOS build 122+ (TestFlight); тест хэрэглэгч эсвэл апп-ын эзэн; test intent-д Face ID → мөнгө хөдлөхгүй
Компьютер дээрх https://geregeapp.mn/pay/<token> QR хуудас, /pay/t/<code> терминалын хуудас ✓ терминалын хуудас зөвхөн live сагсыг харуулна
Хүний талыг утасгүй тоглуулах (claim, төлөх, болих, хугацаа дуусгах, sticker-т хүргэх) ✓ Утасгүй турших
Mini app-ын intent (presentment: "app") — консолын тест intent эсвэл тест хэрэглэгч Gerege App-аас нээж төлөх ✓ ноорог апп тест хэрэглэгчийн launcher-т гарна
Терминал, дэд худалдагч, payout холболтыг унших; sticker-ийн PDF ✓ бичих нь live түлхүүр эсвэл консол
Webhook endpoint (орчин бүрт ≤ 5), хүргэлт, «дахин илгээх», тест илгээлт; events API ✓ Локал webhook, Events API
App Clip «удахгүй» App Clip
Хуулийн этгээдгүй хүнд зориулсан sandbox байгууллага ✓ доорх «Sandbox байгууллага»

Утсаар турших

Test claimless intent-ийг зөвхөн апп-ын эзэн ба тест хэрэглэгчид claim хийнэ; бусад хүнд тэр intent байхгүй мэт (404). Тиймээс утсаар турших хүн таны байгууллагын гишүүн байж, тест хэрэглэгчээр нэмэгдсэн байна. Уншуулах QR-ийг pay_url-аас үүсгэж эсвэл терминалынхаа sticker-ийг ашиглана (NFC-г турших).

Sandbox байгууллага (хуулийн этгээдгүй хөгжүүлэгч)

Компанигүй хөгжүүлэгч профайлаасаа (Профайл → Байгууллагууд → «Sandbox нээх») нэг sandbox байгууллага нээнэ — «Mini апп ба төлбөр» тэнд урьдчилан суусан ирнэ. Энэ бол ердийн байгууллага: консол, баг, эрх ижил, test горим бүхэлдээ ажиллана (test түлхүүр, endpoint, симуляц, терминал, дэд худалдагч, test intent).

  • Тест хэрэглэгч = та өөрөө (апп-ын эзэн) ба sandbox-доо урьсан гишүүд (Тест хэрэглэгч).
  • Апп-ын slug нь sbx--ээр эхэлнэ (sbx-myshop; ^sbx-[a-z0-9-]{3,27}$, бусад бол 400 sandbox_slug) — жинхэнэ нэрийг жинхэнэ байгууллага эзэмшинэ; sbx- угтварыг sandbox биш байгууллага ашиглахгүй.
  • Live юу ч болохгүй: live түлхүүр, live secret, review-д илгээх, гэрээнд гарын үсэг, payout холболт, апп-ын payout → 409 sandbox_only.
  • Live болохдоо байгууллагаа (хуулийн этгээд) нээж тэнд апп-аа шинээр бүртгэнэ — sandbox-оос юу ч зөөгдөхгүй.

Test-ээс live руу

Live руу шилжихэд зөвхөн түлхүүр солигдоно: client id/secret-ийг live түлхүүрээр сольж, live орчны webhook endpoint-оо (өөрийн secret-тэй) тохируулна. Код, route, хэлбэр бүгд адил. Test өгөгдөл live руу шилжихгүй; терминал, дэд худалдагчийн бүртгэл аль хэдийн нэг тул дахин бүртгэх шаардлагагүй. Live болохоос өмнө Go-live checklist-ийг давна уу. Ойлголтын тайлбар: Test ба live.