payments
21 uç · /api/shop/v1/payments
İstek örnekleri ucun GERÇEK metodu ve yolundan üretilir. 21 ucun elle doğrulanmış gövde örneği henüz yok; o uçlarda iskelet gövdesizdir — uydurma bir alan yazmıyoruz.
Capture authorized
payment_idcurl -X POST "https://{slug}.shop.blesyum.app/api/shop/v1/admin/payments/<payment_id>/captures" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Admin elle itiraz kaydı: Türkiye PSP'lerinin bir kısmı chargeback'i banka-yazısıyla bildiriyor
payment_id(webhook yok) → merchant kuyruğa elle işleyebilmeli. Webhook yoluyla AYNI çekirdeği kullanır.
curl -X POST "https://{slug}.shop.blesyum.app/api/shop/v1/admin/payments/<payment_id>/disputes" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}curl -X GET "https://{slug}.shop.blesyum.app/api/shop/v1/admin/payments/<payment_id>/refunds" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}İade → komisyon geri-alma (admin).
payment_idcurl -X POST "https://{slug}.shop.blesyum.app/api/shop/v1/admin/payments/<payment_id>/refunds" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}curl -X GET "https://{slug}.shop.blesyum.app/api/shop/v1/admin/payments/reconciliation" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}curl -X GET "https://{slug}.shop.blesyum.app/api/shop/v1/admin/payments/reconciliation/<run_id>" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}BLE-6234 · istisna-kuyruğu (varsayılan yalnız açık; ?status=all|open|resolved|disputed).
curl -X GET "https://{slug}.shop.blesyum.app/api/shop/v1/admin/payments/reconciliation/exceptions" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}İstisnayı çöz/itiraz-et (open → resolved|disputed). Çözen personel + not kaydedilir.
idcurl -X POST "https://{slug}.shop.blesyum.app/api/shop/v1/admin/payments/reconciliation/exceptions/<id>/resolve" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Intent durumu (redirect-dönüşü sonrası storefront poll'u). client_token zorunlu.
intent_idcurl -X GET "https://{slug}.shop.blesyum.app/api/shop/v1/storefront/payments/<intent_id>" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}CRM-worker geri-yazımı (consume-seam): contact-id ile pending→synced. Idempotent.
intent_idcurl -X POST "https://{slug}.shop.blesyum.app/api/shop/v1/storefront/payments/<intent_id>/confirm" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}3DS callback: attempt'i (pending) sonuçla — outcome='fail' → failed, aksi → authenticated. Attempt
order_idyoksa/zaten-sonuçlanmışsa 404.
⚠ **GÜVENLİK — stub ACS üretimde kimlik DOĞRULAYAMAZ (fail-closed):** Bu uç ağa hiç çıkmaz;
gerçek banka ACS'i (imzalı sonuç) TF21'de gelir. outcome istekten okunduğu için, üretimde
serbest bıraksaydık saldırgan /3ds/init (acs_ref al) + /3ds/callback (outcome=success) ile
threeds_status='authenticated' yazıp risk step-up kapısını KENDİ KENDİNE geçerdi (mock-social
deseninin ödeme karşılığı). Bu yüzden ÜRETİMDE stub asla authenticated yazmaz → step-up
tamamlanamaz ve sipariş fail-CLOSED bloke kalır (gerçek step-up için TF21 ACS gerekir).
Üretim-dışında (sandbox/dev) tam akış test edilebilir kalır.
curl -X POST "https://{slug}.shop.blesyum.app/api/shop/v1/storefront/payments/<order_id>/3ds/callback" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}3DS challenge başlat: sipariş için payment_attempts (pending) + stub ACS challenge. Sipariş yoksa 404.
order_idcurl -X POST "https://{slug}.shop.blesyum.app/api/shop/v1/storefront/payments/<order_id>/3ds/init" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Cüzdan kartları (stub; gerçek kartlar Masterpass'tan = TF21). Bağlı değilse 404. token_ref dönmez.
curl -X GET "https://{slug}.shop.blesyum.app/api/shop/v1/storefront/payments/masterpass/cards" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Masterpass cüzdan bağla (upsert msisdn; sandbox anında bağlanır — gerçek OTP=TF21). token_ref
server-side üretilir, dönmez. customer_token verilirse müşteriye bağlanır.
curl -X POST "https://{slug}.shop.blesyum.app/api/shop/v1/storefront/payments/masterpass/link" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Sandbox Masterpass ödeme (iskelet). Bağlı cüzdanla sahte-provizyon → sandbox referansı. GERÇEK para
HAREKET ETMEZ + gerçek provizyon/kayıt = TF21 (canlı-key). Bağlı değilse 404; geçersiz tutar 400.
curl -X POST "https://{slug}.shop.blesyum.app/api/shop/v1/storefront/payments/masterpass/pay" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}Cüzdan bağını kaldır (status=removed). Yoksa 404.
curl -X POST "https://{slug}.shop.blesyum.app/api/shop/v1/storefront/payments/masterpass/unlink" \
-H "Authorization: Bearer <oturum-token>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}3PL durum webhook'u — **fail-closed**: imza x-shop-webhook-signature =
providerHMAC-SHA256(settings fulfillment.webhook_secret, raw-body). Secret yoksa **401**
(taşıyıcı-webhook deseninin aynısı; imzasız çağrı kabul EDİLMEZ).
Body: {event_id, request_id, status, tracking_number?}.
- Bilinmeyen durum → 400 (allowlist).
- Aynı event_id tekrarı → **no-op ack** (idempotent).
- **Geriye dönüş kabul edilmez**: gelen durumun rütbesi mevcuttan küçükse yok sayılır
(ağ sırası bozulursa shipped sonrası gecikmiş picked durumu geri almasın).
- shipped → shop.shipments kaydı (mevcut sevkiyat modeline bağlanır).
curl -X POST "https://{slug}.shop.blesyum.app/api/shop/v1/storefront/payments/webhook/<provider>" \
-H "Accept: application/json"{
"data": "…",
"trace_id": "01JC…"
}