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

Тест дүн

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; intent partially_refunded эсвэл refunded болно (intent-ийн event илгээгдэхгүй — зөвхөн refund.*).
  • Хугацаа live-тай адил: баталгаажуулаагүй intent expires_at-д expired (app intent-д payment_intent.canceled status: "expired", claimless-д payment_intent.expired); capture_before өнгөрсөн manual intent expired, failure_code: "authorization_expired".
  • failed intent дахин төлөгдөх төлөвт үлдэнэ (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).