Ödeme Yöntemi Yazma — payment-methods/create · update · delete ✓ Canlı

Ödeme yöntemi tanımlarını yazar (oluştur/güncelle/sil). Alan adları payment-methods/list okuma şekliyle simetriktir. Sahiplik/idempotency/hata/echo kuralları katalog yazma ile ortaktır.

← API Uçları · Scope: payment_methods:write.

payment-methods/create

POST /plugin-api/payment-methods/create
{
  "title": "Multinet",               // ZORUNLU (2..100)
  "description": "Yemek kartı",      // ops (<=500)
  "cash": false,                     // ops — nakit yöntemi mi (default false)
  "noreport": false,                 // ops — rapor dışı mı (default false)
  "idempotencyKey": "pm-1"           // ops
}

Yöntemi kullanabilecek personel listesi API'den yazılamaz — yeni yöntem kısıtsız oluşur, atama panelden.

payment-methods/update

POST /plugin-api/payment-methods/update
{ "id": "ab-12", "description": "Yemek kartı (POS)" }   // {id} + title/description/cash/noreport'tan en az biri

{ id } + title/description/cash/noreport'tan en az biri. Sahiplik kontrollü (notOwned).

payment-methods/delete

POST /plugin-api/payment-methods/delete
{ "id": "ab-12" }
// 200 → { "success": true, "data": { "id": "ab-12", "deleted": true } }

Sahiplik kontrollü.

Yanıt şekli (create/update)

payment-methods/list ile aynı şekil: { id, title, description, cash, noreport }.

Sahiplik modeli (ZORUNLU kural)

  • create ile oluşturduğunuz her kayıt eklentinize damgalanır (sahiplik).
  • update ve delete yalnız KENDİ oluşturduğunuz kayıtlarda çalışır — işletmenin veya başka eklentinin kaydını düzenleyemez/silemezsiniz → plugin.catalog.notOwned. (Slack chat.delete deseni.)
  • İşletme personeli panelden sizin kayıtlarınızı da düzenleyip silebilir (tam yetki). Personel düzenlemesi sahiplik damgasını korur — kayıt "sizin" kalır.
  • Hangi kayıtların size ait olduğunu create yanıtındaki id ile kendi tarafınızda takip edin; okuma uçları sahiplik bilgisi döndürmez.

Idempotency

Tüm create uçları: idempotencyKey (≤128 char, önerilir) → retry'da duplicate yazmaz, ilk başarılı yanıtı aynen döner (24sa pencere; eklenti+tenant+entity başına). Eşzamanlı 2. istek işlenirken → plugin.catalog.duplicateInProgress (kısa bekle, aynı key ile tekrar dene). update/delete doğal idempotenttir (silinmiş kayda tekrar delete → plugin.catalog.notFound).

Hata mesajları

Hatalar HTTP 200 + { success:false, message } (rate limit 429 hariç).

messageAnlam
joi doğrulama mesajıEksik/yanlış tip alan veya tanımsız alan (kütle-atama engeli)
plugin.scope.deniedGerekli yazma scope'u (payment_methods:write) onaylı değil
plugin.catalog.notFoundid ile kayıt bulunamadı
plugin.catalog.notOwnedKayıt sizin eklentinizce oluşturulmamış (update/delete reddi)
plugin.catalog.duplicateInProgressAynı idempotencyKey ile eşzamanlı 2. istek
plugin.rateLimitedOrtak write kovası aşıldı (HTTP 429; varsayılan 20/dk — Limitler)

Webhook etkileşimi (echo dahil)

Her başarılı yazma ilgili kanonik event'i tetikler (payment_method.*).

Event abone tüm eklentilere gider — çağrıyı yapan eklenti dahil (echo; Shopify/Stripe davranışı). Kendi yazmanızı ayırt etmek için create yanıtındaki id'yi saklayıp event data.id ile eşleyin. Event data'sı bu uçların yanıt data'sıyla aynı şekildedir.