Gerege App дотор mini app¶
Юу хийх: өөрийн вэб апп-ыг Gerege App дотор нээгддэг mini app болгож, хүний нэвтрэлтийг (launch → token) авч, bridge-ээр төлбөр хүсэх. Хугацаа: ~30 минут (вэб апп тань https дээр байрласан бол). Юу хэрэгтэй: Quickstart-ийн §0–§2 (байгууллага, «Mini апп-ууд», консолын session), https origin, backend.
Mini app бол Gerege App-ын launcher-т гарч, апп дотор (WKWebView) нээгддэг таны вэб апп. Худалдагчаас ялгаа нь
Худалдагч ба mini app-д. Стандарт нь OMAS 1.0-ийн Gerege хэрэгжилт — OMAS-д бичсэн
backend зөвхөн утгаа сольж ажиллана.
1. Бүртгэх¶
curl -sS "$GEREGE/dev/apps" -H "Authorization: Bearer $GEREGE_SESSION" -H 'Content-Type: application/json' \
-d '{"slug": "my-esim", "name": "Миний eSIM", "entry_url": "https://esim.example.mn/app",
"category": "travel", "developer_name": "Жишээ ХХК"}' | tee app.json | jq '{id, slug, test_client_id, live_client_id, verification_token}'
export APP_ID=$(jq -r .id app.json)
Консолын (/apps/miniapp) бүртгэх цонхоор ч болно. Бүртгэлээр mapp_… (live), mapp_test_… (test) client id ба
omas-verify=… token олгогдоно. Апп draft; scope нь profile.basic — төлбөр авах бол PATCH-аар payments
нэмнэ (ноорог үед).
2. Manifest нийтлэх ба шалгах¶
Origin дээрээ /.well-known/gerege-miniapp.json-ийг нийтэлнэ (талбар бүр: Manifest):
{
"omas_version": "1.0",
"slug": "my-esim",
"client_id": "mapp_…",
"version": "1.0.0",
"name": { "mn": "Миний eSIM", "en": "My eSIM" },
"entry": "https://esim.example.mn/app",
"origins": ["https://esim.example.mn"],
"icons": [{ "src": "https://esim.example.mn/icon-512.png", "size": 512 }],
"scopes": ["profile.basic", "payments"],
"bridge": { "min_version": 1, "methods": ["getContext", "getLaunchCode", "requestPayment", "close"] },
"legal": { "privacy_url": "https://example.mn/privacy", "terms_url": "https://example.mn/terms", "support_url": "https://example.mn/help" },
"verification": "omas-verify=…"
}
curl -sS -X POST "$GEREGE/dev/apps/$APP_ID/manifest/check" -H "Authorization: Bearer $GEREGE_SESSION" | jq
Шалгалт нь origin-ыг таных гэж нотолно (verification), 512×512 PNG icon ба хуулийн гурван хуудас 200 хариулахыг
шалгана. Байршуулахаас өмнө POST /dev/manifest/validate-ээр body-оор нь шалгаж болно.
3. Test credential ба тест хэрэглэгч¶
curl -sS "$GEREGE/dev/apps/$APP_ID/keys" -H "Authorization: Bearer $GEREGE_SESSION" \
-H 'Content-Type: application/json' -d '{"name": "backend", "environment": "test", "preset": "miniapp_backend"}' \
| jq '{client_id, client_secret, scopes}'
Preset «Mini app backend» = oauth:token, payments:read, payments:write, refunds:write.
Ноорог апп-ыг бүртгэсэн хүн ба тест хэрэглэгчид (таны байгууллагын идэвхтэй гишүүд, ≤ 50) Gerege App-ын
launcher-тээ харж нээнэ; тэдний launch code-ийг test credential солино, мөнгө хөдлөхгүй. Тест хэрэглэгч нэмэх:
POST /dev/apps/{id}/test-users {"email"} (Хөгжүүлэгчийн sandbox).
4. Нээлт → token¶
Gerege App апп-ыг entry?launch=<code> хаягаар нээнэ. Frontend launch-ийг URL-аас уншаад history-оос арилгаж,
өөрийн backend руу илгээнэ; backend нэг удаагийн кодыг token-оор солино:
curl -sS "$GEREGE/oauth/token" -u "$GEREGE_CLIENT_ID:$GEREGE_CLIENT_SECRET" \
-d grant_type=authorization_code -d code=gml_…
{ "token_type": "Bearer", "access_token": "gma_at_…", "expires_in": 1800, "refresh_token": "gma_rt_…",
"scope": "profile.basic payments",
"user": { "ref": "u_9f2c…", "sub": "u_9f2c…", "verified": true, "locale": "mn" } }
Код 60 секунд, нэг удаа; sub нь таны апп-д тогтмол, нэрээ нууцалсан хүний id. Дэлгэрэнгүй (refresh rotation,
/me, consent, requires_verified/min_age): Mini app-ын нээлт ба token.
5. Төлбөр хүсэх¶
Backend хүний token-оор intent үүсгэнэ (presentment: "app" — анхдагч), frontend bridge-ээр төлөх цонхыг нээнэ:
curl -sS "$GEREGE/payment-intents" -H "Authorization: Bearer gma_at_…" \
-H 'Content-Type: application/json' -H 'Idempotency-Key: order-77' \
-d '{"amount": 45000, "description": "eSIM 7 хоног", "reference": "order-77"}' | jq '{id, status}'
const res = await window.gerege.requestPayment({ intentId: "pi_…" });
// res.status: "succeeded" | "canceled" | "failed" — ҮҮНД ИТГЭХГҮЙ: backend GET эсвэл webhook-оор шалгана
Төлбөрийн бүх API, manual capture, буцаалт: Mini app-ын төлбөр. Bridge-ийн бүх method:
Bridge. Webhook: Webhook (payments scope-той апп-д заавал).
6. Review ба нийтлэх¶
POST /dev/apps/{id}/submit — шалгагдсан manifest, privacy/terms/support холбоос, live secret, (payments-тэй бол)
webhook URL шаардана; review-ийн үед апп царцна. Батлагдмагц хүмүүсийн жагсаалтад гарна; launcher-ийн нүүрэнд
хаана гарахыг оператор layout-аар шийднэ. Шаардлагын бүрэн жагсаалт:
Review-ийн шаардлага. Төлөвүүд (draft → in_review → approved | rejected,
suspended): Test ба live.