Sepetler ve Checkout

Sepet sahiplenme

Misafir bir sepeti giriş yapmış müşteriye bağlama ve müşterinin mevcut sepetini birleştirme.

Markdown olarak görüntüle

Bir ziyaretçi sepetini tipik olarak anonim şekilde oluşturur ve ancak daha sonra giriş yapar. Sahiplenme (claim), bu anonim sepeti X-Customer-Token ile tanımlanan giriş yapmış müşteriye bağlar. Bu andan itibaren sepet müşteriye aittir: sepete yönelik request'ler sahibinin token'ını taşımalıdır (Sepetler sayfasındaki sahiplik kurallarına bakın), fiyatlar müşterinin fiyatlandırma bağlamında çözümlenir ve checkout siparişi müşteriye bağlar.

Birleştirme davranışı

Müşterinin zaten başka active sepetleri varsa, her biri sahiplenilen sepete katlanır:

  • Satırlar; ürün, varyant ve yapılandırma kombinasyonu üzerinden tekilleştirilir: eşleşen satırların adetleri toplanır, ardından politikanın max_quantity_per_line değeriyle sınırlandırılır.
  • Sahiplenilen sepet max_lines değerine ulaştığında, eski sepetten gelen fazladan ayrı satırlar atılır.
  • Sahiplenilen sepet, ayarlıysa kendi email ve metadata değerlerini korur; ikisinden biri null ise eski sepetin değerini alır.
  • Her eski sepetin durumu merged olur ve stok rezervleri serbest bırakılır. Birleştirilmiş bir sepet id'si GET /carts/{id} üzerinde çalışmaya devam eder ancak yazma işlemlerinde 404 döner.

Zaten aynı müşteriye ait bir sepeti sahiplenmek hiçbir şey yapmaz (no-op) ve sepeti değişmeden döndürür. Farklı bir müşteriye ait bir sepeti sahiplenmek 403 ile başarısız olur.

E-posta yakalama (email ile PATCH /carts/{id}) yoluyla bir misafir müşteri kaydına bağlanmış bir sepetin de customer_id alanının dolu olduğunu unutmayın: onu sahiplenmek yalnızca token aynı müşteriye çözümlendiğinde başarılı olur; aksi halde 403 durumu geçerlidir.

POST /v1/api/commerce/carts/{id}/claim

commerce:write ve active bir sepet gerektirir. X-Customer-Token zorunludur: çözümlenebilir bir token olmadan request, 401 durumu ve boş bir gövdeyle başarısız olur. Request body yoktur. Artık birleştirilen satırları da içeren, GET /v1/api/commerce/carts/{id} ile aynı şekle sahip tam sepet zarfını 200 durumuyla döndürür.

Parametreler

Path

AdTürZorunluAçıklama
idstring (UUID)evetSepet id'si. active bir sepet olmalıdır.

Header'lar

AdTürZorunluAçıklama
X-Customer-TokenstringevetMüşteri oturum token'ı. Bir müşteriye çözümlenmelidir, aksi halde 401.

Body yok.

Request
curl -X POST https://api.borkol.com/v1/api/commerce/carts/9d3f2a10-6b7c-4e6d-9f21-8a54c1d2e3f4/claim \
  -H "Authorization: Bearer {api_key}" \
  -H "X-Customer-Token: {customer_token}"
Request (JS)
const res = await fetch(
  `https://api.borkol.com/v1/api/commerce/carts/${cartId}/claim`,
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${apiKey}`,
      "X-Customer-Token": customerToken,
    },
  }
);
const { data: cart } = await res.json();
Response
{
  "data": {
    "id": "9d3f2a10-6b7c-4e6d-9f21-8a54c1d2e3f4",
    "status": "active",
    "lines": [
      { "id": "5e6f7a8b-...", "quantity": 3, "...": "..." },
      { "id": "6f7a8b9c-...", "quantity": 1, "...": "merged in from the customer's previous cart" }
    ],
    "...": "same cart shape as GET /v1/api/commerce/carts/{id}"
  }
}

Hatalar

DurumGövdeNe zaman
401boş gövdeX-Customer-Token eksik veya çözümlenemiyor ya da customers modülü kullanılamıyor.
403boş gövdeSepet zaten farklı bir müşteriye bağlı.
404{"message": "..."}Sepet bilinmiyor, süresi dolmuş veya active değil.
403scope, modül veya askıya alma gövdesiSepetler sayfasına bakın.
429{"message": "Too Many Attempts."}Rate limit aşıldı.