Тулгалт¶
Энэ хуудсаар
Юу хийх: таны захиалгын бүртгэл, Gerege-ийн intent, тооцоо гурвыг өдөр бүр тулгаж, алдагдсан webhook,
гацсан барьцаа, илүү төлбөрийг олох. Хугацаа: ~1 цаг. Хэрэгтэй: client credential (Basic), захиалга бүрт
хадгалсан reference ба intent id.
1. Түлхүүр нь reference¶
Intent бүрт өөрийн захиалга/сагсны дугаарыг reference болго (≤ 64), Idempotency-Key-ийг мөн түүгээр (эсвэл
<reference>-<оролдлого>). Тэгвэл:
GET /payment-intents?reference=ord_8812— тэр захиалгын бүх оролдлого (шинэ нь эхэнд).- Webhook,
GET, тооцооны мөр (intents[].reference) бүгд таны дугаартай буцна.
2. Жагсаалт ба шүүлтүүр¶
curl -G https://geregeapp.mn/api/v1/miniapp/payment-intents -u "$GEREGE_CLIENT_ID:$GEREGE_CLIENT_SECRET" \
--data-urlencode status=requires_capture --data-urlencode limit=100
status(requires_confirmation,processing,requires_capture,succeeded,partially_refunded,refunded,canceled,expired,failed),reference,limit(1–100, анхдагч 20),after(өмнөх хуудасны сүүлийн id) →{"data": […], "has_more": true}, шинэ нь эхэнд.- Түлхүүрийн орчин: test түлхүүр test intent-үүдийг, live — live-ийг.
- SDK: Node
paymentIntents.listAll({status})(бүх хуудас), GoPaymentIntents.List+After.
3. Өдөр бүрийн шалгалт¶
| Шалгах | Хэрхэн | Олдвол |
|---|---|---|
| Төлөгдсөн ч биелээгүй захиалга | status=succeeded (сүүлийн өдрийнх) ↔ таны «төлөгдсөн» |
webhook алдсан — биелүүл |
| Биелсэн ч төлөгдөөгүй | таны «төлөгдсөн» бүрт GET /payment-intents/{id} |
succeeded биш бол шалгаж зогсоо |
| Гацсан барьцаа | status=requires_capture |
бараа өгсөн бол capture, үгүй бол cancel — хүний мөнгийг дэмий барихгүй |
Удаан processing |
status=processing |
платформ өөрөө дуусгана; цагаас удвал тусламж руу intent id-тай |
| Нэг захиалгад хоёр төлбөр | reference-ээр succeeded > 1 |
илүүг нь буцаах |
| Буцаалт | refund.succeeded / refund.failed ↔ таны буцаалт |
failed (settlement_shortfall г.м.) — дахин эсвэл гараар |
| Тооцоо (тооцоо асаалттай үед) | GET /settlements → GET /settlements/{id} (intents, refund_items) |
мөр бүр таны төлбөртэй |
4. Webhook алдагдсан үед¶
- Хүргэлт at-least-once, амжилтгүй бол 1м, 5м, 30м, 2ц, 6ц, 12ц, 24ц давтагдана; консолд хүргэлт бүрийн төлөв, «дахин илгээх» (консол).
- Таны webhook удаан унтарсан бол: дээрх жагсаалтаар (
status,reference) нөхнө — webhook бол хурдан зам, жагсаалт бол үнэн. - Events API:
GET /events?type=&after=<evt id>&created_gte=<RFC 3339>&limit=1..100→{"data": […], "next_cursor"}(хуучнаас нь, 30 хоног, түлхүүрийн орчноор; scopeevents:read),GET /events/{id}— webhook-ийн яг тэр body. Алдсан event-ээafter-аар нөхөөд, шийдвэрээ объектыгGET-ээр дахин уншаад гарга. Тайлан CSV (самбар) — «удахгүй».
5. Код¶
for await (const pi of gerege.paymentIntents.listAll({ status: "succeeded", limit: 100 })) {
if (Date.parse(pi.created_at) < since) break; // шинэ нь эхэнд
const order = await db.orderByReference(pi.reference);
if (order && !order.paid && pi.amount === order.amount) await fulfil(order, pi.id);
}
after := ""
for {
page, err := c.PaymentIntents.List(ctx, miniapp.ListPaymentIntentsParams{Status: "requires_capture", Limit: 100, After: after})
if err != nil || len(page.Data) == 0 {
break
}
for _, pi := range page.Data {
settleOrRelease(ctx, pi) // таны дүрэм
}
if !page.HasMore {
break
}
after = page.Data[len(page.Data)-1].ID
}