Тест дүн¶
Test горимд төлбөр хэрхэн дуусахыг дүн шийднэ — амжилт, татгалзал, цуцлалт гурвыг бүгдийг нь утас, мөнгөгүйгээр гаргаж, handler тань event бүрийг зөв боловсруулж буйг шалгана. Хугацаа: 10 минут. Хэрэгтэй: test түлхүүр (Sandbox) ба webhook URL.
Дүрэм¶
Дүнгийн сүүлийн хоёр орон (amount % 100) хүн (эсвэл консол) баталгаажуулах мөчид үр дүнг шийднэ:
| Сүүлийн хоёр орон | Үр дүн | Webhook | Хүний талын хариу |
|---|---|---|---|
01 |
failed, failure_code: "test_declined" |
payment_intent.failed |
422 test_declined |
02 |
canceled |
payment_intent.canceled |
200, status: "canceled" |
бусад, capture_method: "automatic" |
succeeded |
payment_intent.succeeded |
200 |
бусад, capture_method: "manual" |
requires_capture, capture_before = одоо + capture-ийн цонх |
payment_intent.requires_capture |
200 |
Жишээ дүн:
amount |
Automatic | Manual |
|---|---|---|
1000 |
succeeded |
requires_capture |
45000 |
succeeded |
requires_capture |
1001 |
failed (test_declined) |
failed (test_declined) |
1002 |
canceled |
canceled |
3502 |
canceled |
canceled |
Дүн 100 – 50 000 000₮ хооронд байх live-ийн дүрэм test-д ч хэвээр (100 = …00 → амжилттай).
Баталгаажуулсны дараах алхмууд (test)¶
- Capture (
POST /payment-intents/{id}/capture, manual,requires_capture) → шуудsucceeded,payment_intent.succeeded. - Cancel
requires_captureдээр →canceled,payment_intent.canceled(барьцаа суллах ledger-ийн дуудлага test-д байхгүй). - Буцаалт (
POST /payment-intents/{id}/refunds) → шуудsucceeded,refund.succeeded; intentpartially_refundedэсвэлrefundedболно (intent-ийн event илгээгдэхгүй — зөвхөнrefund.*). - Хугацаа live-тай адил: баталгаажуулаагүй intent
expires_at-дexpired(appintent-дpayment_intent.canceledstatus: "expired", claimless-дpayment_intent.expired);capture_beforeөнгөрсөн manual intentexpired,failure_code: "authorization_expired". failedintent дахин төлөгдөх төлөвт үлдэнэ (failed→ дахин баталгаажуулж болно), гэхдээ дүн нь…01хэвээр тул дахин оролдлого бүрtest_declined-ээр дуусна.
Жишээ: татгалзсан төлбөрийг турших¶
Консолын тест intent ба симуляцаар (Утасгүй турших) утасгүйгээр. Claimless (qr, terminal) intent
дээр бол эхлээд {"action": "claim"} (эсвэл simulate-tap), дараа нь confirm; утсаар бол тест хэрэглэгч Gerege
App-аар уншуулж Face ID дарна — үр дүн ижил дүрмээр.
# 1. …01 дүнтэй тест intent (консолын session-ээр — консолын «Тест төлбөр» товч үүнийг хийнэ)
POST /api/v1/miniapp/dev/apps/{id}/test-intents
{"amount": 1001, "description": "Тест татгалзал"}
# 2. Хүний «төлөх»-ийг тоглуулах
POST /api/v1/miniapp/dev/apps/{id}/test-intents/{pi}/simulate
{"action": "confirm"}
# → 200, "status": "failed", "failure_code": "test_declined"
# → webhook: payment_intent.failed (шууд)
Таны handler шалгах ёстой зүйл: failed-д захиалгаа цуцлахгүй (хүн өөр данс сонгож дахин төлж болно),
canceled ба expired-д захиалгаа хаана, succeeded-д л бараа олгоно (олгохоосоо өмнө GET-ээр дахин уншина —
Idempotent handler).