wire docs

Idempotency

Мутаци хийдэг хүсэлтийг давхардал үүсгэхгүйгээр аюулгүй дахин оролд.

Сервер хүсэлтийг боловсруулсны дараа сүлжээний дуудлага бүтэлгүйтэж болно. Дахин оролдлогыг аюулгүй болгохын тулд Wire нь мутаци хийдэг POST хүсэлтэд idempotency key дэмждэг.

Idempotency-Key нь PaymentIntent болон checkout session үүсгэхийг оруулаад мутаци хийдэг POST бүрд заавал шаардлагатай.

curl https://api.wire.mn/v1/payment_intents \
  -H "Authorization: Bearer sk_live_..." \
  -H "Idempotency-Key: order-1001" \
  -d amount=50000 -d currency=MNT

Хэрхэн ажилладаг вэ

  • Сервер эхний хүсэлтийн үр дүнг таны key-ийн дор хадгална.
  • Ижил key-г дахин илгээвэл анхны хариуг буцаана — давхардсан object үүсэхгүй.
  • Логик үйлдэл бүрд давтагдашгүй, тогтвортой key ашигла (жишээ нь захиалгын id). Жинхэнэ шинэ үйлдэлд шинэ UUID үүсгэ.
  • Key нь хүсэлт илгээсэн API key-ийн project-д хамаарна. Тиймээс хоёр project (жишээ нь хоёр сайт) ижил order-1001 гэдэг key-г бие биедээ саадгүй ашиглаж болно — нэг нь нөгөөгийнхөө хариуг хэзээ ч авахгүй.
  • Хадгалагдсан хариу 48 цаг амьдарна. Энэ цонхны дотор ижил key бүр анхны хариугаа буцаана; хугацаа өнгөрсний дараа ижил key дахин илгээвэл шинэ үйлдэл болж бүртгэгдэнэ, тиймээс дахин оролдлогоо 48 цагт багтаа.

Эхний хүсэлт хараахан боловсрогдож дуусаагүй байхад ижил key-тэй хоёр дахь хүсэлт ирвэл 409 idempotency_in_flight буцна. Хэдхэн секунд хүлээгээд дахин илгээхэд бэлэн болсон хариу replay хийгдэнэ — Алдаа-г үз.

SDK ашиглалт

pi, err := client.PaymentIntents.Create(ctx, &wire.PaymentIntentCreateParams{
	Amount:         50000,
	Currency:       "MNT",
	IdempotencyKey: "order-1001",
})
pi = client.payment_intents.create(
    amount=50000, currency="MNT", idempotency_key="order-1001",
)
const pi = await wire.paymentIntents.create({
  amount: 50000,
  currency: "MNT",
  idempotencyKey: "order-1001",
});

Энэ хуудсанд