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üleBir 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.
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_linedeğeriyle sınırlandırılır. - Sahiplenilen sepet
max_linesdeğerine ulaştığında, eski sepetten gelen fazladan ayrı satırlar atılır. - Sahiplenilen sepet, ayarlıysa kendi
emailvemetadatadeğerlerini korur; ikisinden biri null ise eski sepetin değerini alır. - Her eski sepetin durumu
mergedolur ve stok rezervleri serbest bırakılır. Birleştirilmiş bir sepet id'siGET /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.
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_linedeğeriyle sınırlandırılır. - Sahiplenilen sepet
max_linesdeğerine ulaştığında, eski sepetten gelen fazladan ayrı satırlar atılır. - Sahiplenilen sepet, ayarlıysa kendi
emailvemetadatadeğerlerini korur; ikisinden biri null ise eski sepetin değerini alır. - Her eski sepetin durumu
mergedolur ve stok rezervleri serbest bırakılır. Birleştirilmiş bir sepet id'siGET /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
| Ad | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | string (UUID) | evet | Sepet id'si. active bir sepet olmalıdır. |
Header'lar
| Ad | Tür | Zorunlu | Açıklama |
|---|---|---|---|
X-Customer-Token | string | evet | Müşteri oturum token'ı. Bir müşteriye çözümlenmelidir, aksi halde 401. |
Body yok.
Hatalar
| Durum | Gövde | Ne zaman |
|---|---|---|
| 401 | boş gövde | X-Customer-Token eksik veya çözümlenemiyor ya da customers modülü kullanılamıyor. |
| 403 | boş gövde | Sepet zaten farklı bir müşteriye bağlı. |
| 404 | {"message": "..."} | Sepet bilinmiyor, süresi dolmuş veya active değil. |
| 403 | scope, modül veya askıya alma gövdesi | Sepetler sayfasına bakın. |
| 429 | {"message": "Too Many Attempts."} | Rate limit aşıldı. |
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}"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();{
"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}"
}
}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
| Ad | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | string (UUID) | evet | Sepet id'si. active bir sepet olmalıdır. |
Header'lar
| Ad | Tür | Zorunlu | Açıklama |
|---|---|---|---|
X-Customer-Token | string | evet | Müşteri oturum token'ı. Bir müşteriye çözümlenmelidir, aksi halde 401. |
Body yok.
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}"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();{
"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
| Durum | Gövde | Ne zaman |
|---|---|---|
| 401 | boş gövde | X-Customer-Token eksik veya çözümlenemiyor ya da customers modülü kullanılamıyor. |
| 403 | boş gövde | Sepet zaten farklı bir müşteriye bağlı. |
| 404 | {"message": "..."} | Sepet bilinmiyor, süresi dolmuş veya active değil. |
| 403 | scope, modül veya askıya alma gövdesi | Sepetler sayfasına bakın. |
| 429 | {"message": "Too Many Attempts."} | Rate limit aşıldı. |