B2B

payment

7 uç · /api/b2b/v1/payment

İstek örnekleri ucun GERÇEK metodu ve yolundan üretilir. 7 ucun elle doğrulanmış gövde örneği henüz yok; o uçlarda iskelet gövdesizdir — uydurma bir alan yazmıyoruz.

GET/api/b2b/v1/admin/payment/config

GET /admin/payment/config — ödeme yapılandırması (b2b.payment.admin). Sealed creds dönmez.

Oturum
İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/payment/config" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
PUT/api/b2b/v1/admin/payment/config

PUT /admin/payment/config — active_provider + capture_mode + threeds_required (b2b.payment.admin).

Oturum

**Go-live simetri guard'ı:** online AÇIKKEN non-stub provider'a GEÇİŞ → sealed connection ŞART (settings.rs 2369 gate'i online↔provider'ın DİĞER yönünü kapatır → iki app-katman-transition birlikte primary yolları kapatır). Audit yalnız GERÇEK değişimde (phantom yok — settings.rs F5). ⚠ **Denetim P1/P6a (bounded residual, dürüst-belge):** invariant "online+gerçek-provider → connected-connection" APP-katman iki transition'da (settings.rs online→true + burada provider→real) enforce edilir, DB-standing-property DEĞİL. Bağlantı `core.integration_connections`'ta yaşar → ERP/auth (erp.integrations.manage) go-live SONRASI silebilir/disconnect edebilir, ya da iki eşzamanlı PUT (admin↔settings) COALESCE-merge ile geçici tutarsızlık yaratabilir. **Sonuç GÜVENLİ:** `resolve_provider` `status='connected'` yoksa **NotConfigured fail-closed** döner → sahte-başarı YOK, para-kırılması YOK (yalnız kart-tahsilat degrade; açık-hesap/cari çalışır). Pre-go-live (canlı-key=E8). DB-trigger backstop KASITLI EKLENMEDİ: registry fail-safe testi kasten "online+iyzico+conn-yok" state'ini kurar (resolve→NotConfigured kanıtı) → trigger onu bloklardı. Cross-surface connection-delete guard'ı = cross-hat (ERP'yi b2b state'ine bağlar) = kapsam-dışı.

İstek
curl -X PUT "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/payment/config" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
PUT/api/b2b/v1/admin/payment/connections/{provider}/credentials

PUT /admin/payment/connections/{provider}/credentials — sealed merchant creds (b2b.payment.admin).

OturumYol parametresi: provider

creds → blesyum_crypto::seal → core.integration_connections (per (tenant,provider) tek satır; status='connected'). Yanıt/audit ASLA creds içermez. Canlı-key GİRİLİR ama online açmak go-live gate (2369) ile korunur → bu tek başına canlı-tahsilat AÇMAZ.

İstek
curl -X PUT "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/payment/connections/<provider>/credentials" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/admin/payment/connections/{provider}/test

POST /api/b2b/v1/admin/erp-connection/test — [`probe_connection`] üstüne ince izin sarmalı.

OturumYol parametresi: provider
İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/payment/connections/<provider>/test" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
GET/api/b2b/v1/admin/payment/providers

GET /admin/payment/providers — kimlik girişi alan sağlayıcıların form şeması (`b2b.payment.admin`).

Oturum

**NEDEN VAR:** `put_credentials` submit'i `validate_credentials` ile şemaya karşı doğrular ve **bilinmeyen alanı REDDEDER**. Panelin bu şemayı görmediği sürece kimlik formu ancak alan adları FRONTEND'e GÖMÜLEREK çizilebilirdi; katalog satırı değiştiğinde (yeni zorunlu alan, yeniden adlandırma) form sessizce 400 üretmeye başlardı. Form artık tek kaynaktan — katalogdan — çizilir. **Sır yüzeyi sıfır:** yalnız ALAN TANIMLARI döner; `credentials` sütunu SELECT bile edilmez, sağlayıcının girilmiş değeri hiçbir biçimde sızmaz (`has_credentials` yalnız var/yok bilgisidir). Katalog satırı olmayan sağlayıcı listeye HİÇ girmez (fail-closed; `put_credentials` da onu 400'ler).

İstek
curl -X GET "https://{slug}.b2b.blesyum.app/api/b2b/v1/admin/payment/providers" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/payment/3ds/callback

POST /payment/3ds/callback — banka 3DS dönüşü. tenant host'tan; conversationId ile ödeme bulunur.

Oturum
İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/payment/3ds/callback" \
  -H "Authorization: Bearer <oturum-token>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
POST/api/b2b/v1/payment/webhook/{provider}

POST /api/b2b/v1/connectors/{connection_id}/webhook — inbound connector event.

Herkese açıkYol parametresi: provider

host-tenant (D7); `{connection_id}` scopes the connection within that tenant.

İstek
curl -X POST "https://{slug}.b2b.blesyum.app/api/b2b/v1/payment/webhook/<provider>" \
  -H "Accept: application/json"
Yanıt
{
  "data": "…",
  "trace_id": "01JC…"
}
Bu sayfa işine yaradı mı?