API Dokümantasyonu
Bu sayfa harici yazılımların Simurgh Pazaryeri ile ürün, sipariş ve site yönetimi entegrasyonunu anlatır.
📦 Ürün
Ürün, fiyat, stok, SEO, medya ve görünürlük.
🗂️ Katalog
Kategori ve marka mapping tabanlı upsert.
🔌 Entegrasyon katmanı
Her tenant için izole ticari ürün, katalog ve sipariş API’si.
🧾 Sipariş
Sipariş çekme, acknowledgement, durum, fatura, gönderi, iade ve iptal yaşam döngüsü.
Aktif Entegrasyon Katmanı
Harici uygulama entegrasyonu tenant kapsamlı ticari API üzerinden yürür.
| Katman | Kapsam | Kim kullanır? |
|---|---|---|
| 1 · Ticari API | Ürün ekleme, güncelleme, silme, fiyat, stok, görsel, kategori, marka, sipariş çekme, sipariş durumu, fatura, kargo, iade ve iptal. | Tüm aktif tenantlar. Domain tenantın kendi üzerinde olmasa da kullanılabilir. |
Genel Bilgiler
Base URL:
https://pazaryeri.simurgh.com.tr/simurgh-connector
Dil: TürkçeVarsayılan channel: defaultPara: TRYSürüm: 1.0.0.64
X-Connector-Key ve X-Connector-Token headerları önerilir. Eski entegrasyonlar için X-Simurgh-Key ve X-Simurgh-Token headerları da geriye dönük olarak desteklenir. Credential değerleri tenant bazlıdır; başka tenantları göremez.Connector katalog ayarları
SIMURGH_CONNECTOR_CHANNEL_CODE=default
SIMURGH_CONNECTOR_INVENTORY_SOURCE_CODE=default
SIMURGH_CONNECTOR_ATTRIBUTE_FAMILY_CODE=default
SIMURGH_CONNECTOR_ATTRIBUTE_OPTION_POLICY=reject
Bu değerler yalnız varsayılandır; ürün isteğinde karşılık gelen alanlar gönderilirse request değeri önceliklidir.
Mevcut API Sözleşmesinin Durumu
| Alan | Durum | Açıklama |
|---|---|---|
| Auth / Health / Doctor | Standart | code, message, data, meta.requestId ve doğru HTTP status kodları kullanılır. /doctor config, route, tablo, katalog ve queue durumunu birlikte kontrol eder. |
| Ürün endpointleri | Standart | FormRequest validation ve ApiResponse katmanı kullanılır. Panel sync için credential içermeyen audit API mevcuttur. |
| Kategori / Marka | Standart | Simurgh kimliği ile mapping tabanlı idempotent upsert yapılır. |
| Site / Master Import | Legacy | Endpointler aktiftir; ancak henüz ortak FormRequest ve standart response katmanına taşınmamıştır. |
/system/reindex | API değil | Route içinde mevcut değildir. Şimdilik Artisan CLI komutu kullanılır. |
Auth
Connector credential doğrulaması yapar. Token üretmez; body veya header ile gönderilen mevcut key/token çiftini doğrular.
curl -X POST "$BASE_URL/auth/login" \
-H "Content-Type: application/json" \
-d '{"key":"<connector-key>","token":"<connector-token>"}'
Başarılı cevap:
{
"success": true,
"code": "AUTHENTICATED",
"message": "Connector credentials verified.",
"data": {
"service": "simurgh-connector",
"engine": "simurgh_marketplace",
"tenant": "example-tenant",
"version": "1.0.0.63",
"auth": {"type":"headers","headers":["X-Connector-Key","X-Connector-Token"],"legacyHeaders":["X-Simurgh-Key","X-Simurgh-Token"]}
},
"meta": {"requestId":"uuid","timestamp":"ISO-8601"}
}
Health
Uygulama ve veritabanı durumunu kontrol eder. Bu endpoint middleware arkasındadır.
curl -X GET "$BASE_URL/health" \
-H "X-Simurgh-Key: <connector-key>" \
-H "X-Simurgh-Token: <connector-token>"
{
"success": true,
"code": "HEALTHY",
"message": "Connector is healthy.",
"data": {
"service": "simurgh-connector",
"engine": "simurgh_marketplace",
"tenant": "example-tenant",
"version": "1.0.0.63",
"checks": {"application":true,"database":true}
},
"meta": {"requestId":"uuid","timestamp":"ISO-8601"}
}
Doctor
v1.0.0.28: Connector kurulumunu ve canlı ortam hazırlığını tek cevapta kontrol eder. Database, auth config, route kaydı, dokümantasyon sürümü, storage yazılabilirliği, Simurgh/Simurgh Pazaryeri tabloları, katalog varsayılanları ve sync job özetini döner.
curl -X GET "$BASE_URL/doctor" \
-H "X-Simurgh-Key: <connector-key>" \
-H "X-Simurgh-Token: <connector-token>"
Başarılı cevap HTTP 200 döner. Kritik hata varsa HTTP 503 döner; errors alanı deploy sonrası ilk bakılacak yerdir. Uyarılar warnings içinde kalır ve işlem bloklamaz.
{
"success": true,
"code": "CONNECTOR_DOCTOR_OK",
"message": "Connector doktor kontrolü tamamlandı.",
"data": {
"service": "simurgh-connector",
"engine": "simurgh_marketplace",
"tenant": "example-tenant",
"version": "1.0.0.63",
"checks": {
"database": {"ok":true},
"routes": {"ok":true},
"tables": {"ok":true},
"catalog_defaults": {"ok":true}
},
"queue": {"enabled":true,"counts_by_status":{"pending":0}}
},
"meta": {"requestId":"uuid","timestamp":"ISO-8601"}
}
Cevap ve Hata Standardı
Auth, health, doctor, ürün, kategori ve marka endpointlerinde aşağıdaki ortak yapı kullanılır.
{
"success": true,
"code": "PRODUCT_STOCK_UPDATED",
"message": "...",
"data": {},
"meta": {"requestId":"uuid","timestamp":"ISO-8601"}
}
Validation hatası:
HTTP 422
{
"success": false,
"code": "VALIDATION_FAILED",
"message": "Gönderilen bilgiler doğrulanamadı.",
"errors": {"sku":["SKU alanı zorunludur."]},
"meta": {"requestId":"uuid","timestamp":"ISO-8601"}
}
| HTTP | Kullanım |
|---|---|
| 200 | Başarılı işlem veya değişiklik gerektirmeyen idempotent sonuç. |
| 401 | Credential hatalı veya eksik. |
| 403 | IP izin listesi engeli. |
| 409 | Mapping veya benzersiz kayıt çakışması. |
| 422 | FormRequest validation hatası. |
| 500 | Beklenmeyen uygulama hatası. |
| 503 | Connector credential/config eksikliği veya health bağımlılığı sorunu. |
Ticari API · Ürün Endpointleri
tenant_id + simurgh_product_id değeridir. SKU, ilk eşleştirmede ve eski kayıt kurtarmada fallback olarak kullanılır.Ürünü oluşturur veya mapping üzerinden günceller. sku ya da barcode alanlarından en az biri zorunludur. Kategori ve marka için öncelikli alanlar simurgh_category_ids ve simurgh_brand_id değerleridir; bunlar tenant bazlı mapping tablolarından Simurgh Pazaryeri ID değerlerine çevrilir. Eski categories ve brand_id sayısal alanları geriye uyumluluk için kabul edilir.
{
"simurgh_product_id":"prd_001",
"sku":"TEST001",
"barcode":"8690000000001",
"name":"Test Ürün",
"type":"simple",
"price":149.90,
"stock":12,
"weight":1,
"manage_stock":true,
"status":true,
"visible_individually":true,
"simurgh_category_ids":["cat_001"],
"simurgh_brand_id":"brand_001",
"attribute_family_code":"default",
"channel":"default",
"channels":["default"],
"inventory_source_code":"default",
"locale":"tr"
}
| Alan | Davranış |
|---|---|
channel | Ürünün locale/channel bağlamı. Verilmezse connector config veya Simurgh Pazaryeri varsayılan channel kodu kullanılır. |
channels | Ürünün atanacağı channel kodları/ID listesi. Verilmezse seçili channel kullanılır. |
inventory_source_code | stock değerinin yazılacağı inventory source. Varsayılan: default. |
inventories | Çoklu depo için {"default":12,"warehouse_2":4} biçiminde gönderilebilir. |
attribute_family_code | Yeni ürün oluşturulurken kullanılacak family kodu. Varsayılan: default. |
simurgh_category_ids | Simurgh kategori ID listesi. Her kayıt simurgh_category_mappings tablosunda synced durumda olmalıdır. |
simurgh_brand_id | Simurgh marka ID değeri. simurgh_brand_mappings tablosundaki Simurgh Pazaryeri option ID değerine çevrilir. |
PRODUCT_SYNC_FAILED ile durur. Başka bir kaynağa sessiz fallback yapılmaz.{
"success":true,
"action":"created",
"product_id":42,
"simurgh_product_id":"prd_001",
"category_ids":[7],
"brand_option_id":12
}
v1.0.0.27: /products ile aynı payloadı yazmadan kontrol eder. Kategori/marka mapping, attribute family, inventory source, zorunlu attribute, configurable super attribute, duplicate varyant kombinasyonu ve option policy sonucu doğrulanır.
curl -X POST "$BASE_URL/products/preflight" \
-H "Content-Type: application/json" \
-H "X-Simurgh-Key: <connector-key>" \
-H "X-Simurgh-Token: <connector-token>" \
-d '{
"simurgh_product_id":"prd_parent_001",
"type":"configurable",
"sku":"TSHIRT-001",
"attribute_family_code":"default",
"attribute_option_policy":"create_if_allowed",
"configurable_attributes":["color","size"],
"variants":[
{"sku":"TSHIRT-001-RED-M","price":349.90,"attributes":{"color":"Kırmızı","size":"M"}}
]
}'
Bu endpoint veritabanına ürün, varyant veya option yazmaz. create_if_allowed politikası bilinmeyen option için would_create raporu üretir; gerçek oluşturma sadece /products veya /products/full-sync sırasında yapılır.
{
"success": true,
"code": "PRODUCT_PREFLIGHT_OK",
"can_sync": true,
"data": {
"product": {"operation":"create","type":"configurable"},
"configurable": {"enabled":true,"variant_count":1},
"attributes": {"options":{"resolved":[],"created":[],"would_create":[],"ignored":[]}}
}
}
sku veya simurgh_product_id ile ürün bulur. Stok için ayrı payload hash kullanır; aynı veri tekrar gelirse action: unchanged dönebilir.
{ "simurgh_product_id":"prd_001", "stock":12, "manage_stock":true, "channel":"default", "locale":"tr" }
price, regular_price veya list_price alanlarından biriyle fiyat günceller. Özel fiyat ve tarih aralığı desteklenir.
{
"simurgh_product_id":"prd_001",
"price":149.90,
"special_price":129.90,
"cost_price":80,
"special_price_from":"2026-07-11",
"special_price_to":"2026-07-31"
}
simurgh_product_id öncelikli, SKU yedek yöntem olacak şekilde ürünü ortak mapping katmanından bulur. SEO payload hash değeri değişmediyse action: unchanged döner. url_key, meta_title, meta_keywords, meta_description, channel ve locale doğrulanır.
{ "simurgh_product_id":"prd_001", "url_key":"test-urun", "meta_title":"Test Ürün", "meta_keywords":"test,urun", "meta_description":"SEO açıklaması", "channel":"default", "locale":"tr" }
Ürünü ortak mapping katmanından bulur; simurgh_product_id önceliklidir. Görsel ve video URL alanları doğrulanır. Başarılı senkron sonrası mapping kaydına medya hash ve son medya senkron zamanı yazılır.
{ "simurgh_product_id":"prd_001", "main_image":"https://cdn.example.com/main.jpg", "images":["https://cdn.example.com/image.jpg"], "videos":[], "force":false }
simurgh_product_id öncelikli olacak şekilde ürünü ortak mapping katmanından bulur. Temel bilgi, kategori, marka, SEO ve görünürlük alanlarını tek akışta günceller. simurgh_category_ids ve simurgh_brand_id mevcut mapping tablolarından çözülür. Aynı bilgi payloadı tekrar gönderilirse action: unchanged döner.
{
"simurgh_product_id":"prd_001",
"name":"Güncel Ürün Adı",
"short_description":"Kısa açıklama",
"description":"Uzun açıklama",
"simurgh_category_ids":["cat_001"],
"simurgh_brand_id":"brand_001",
"status":true,
"visible_individually":true
}
Zorunlu kimlik: sku veya simurgh_product_id. Başarılı senkron sonrasında mapping kaydına last_info_hash ve last_info_sync_at yazılır.
Fiyat ve stoğu tek istekte iki ayrı servis üzerinden günceller. Ortak SKU üst seviyede veya nested payload içinde verilebilir.
{
"sku":"TEST001",
"price":{"price":1301,"special_price":null},
"stock":{"stock":7}
}
Ürünü ortak mapping katmanından bulur. Aktiflik ve tekil görünürlük değerlerini günceller; aynı görünürlük hash değeri tekrar gönderilirse action: unchanged döner.
{ "simurgh_product_id":"prd_001", "status":true, "visible_individually":true, "channel":"default", "locale":"tr" }
Master import servisini syncMedia=true ve varsayılan operation=FULL_SYNC ile çalıştırır. Request doğrulaması /products ile aynıdır. Simurgh panel için response içinde panel, operation, simurgh_marketplace_product_id, errors ve warnings özetleri bulunur. Mevcut kategori, marka, ürün, fiyat, stok ve medya servisleri değiştirilmedi.
{
"simurgh_product_id":"prd_001",
"sku":"TEST001",
"name":"Tam Senkron Ürün",
"price":1301,
"stock":7,
"simurgh_category_ids":["cat_001"],
"simurgh_brand_id":"brand_001"
}
Panelin doğrudan okuyabileceği başarılı cevap özeti:
{
"success": true,
"code": "PRODUCT_FULL_SYNC_COMPLETED",
"sku": "TEST001",
"operation": "CREATE",
"simurgh_marketplace_product_id": 42,
"panel": {
"tenant": "example-tenant",
"source": "simurgh_panel",
"result": "success",
"next_action": "show_success",
"operation": "CREATE",
"sku": "TEST001",
"product_id": 42,
"price_synced": true,
"stock_synced": true,
"media_skipped": false,
"failed_steps": [],
"trace_id": "uuid",
"endpoint": "products/panel-sync"
},
"panel_trace_id": "uuid",
"errors": [],
"warnings": []
}
v1.0.0.32: Simurgh panel için önerilen endpointtir. Aynı MasterProductImportService akışını kullanır, ancak panel isteği için ayrı controller metodundan geçer ve credential içermeyen audit izi üretir. /products/full-sync davranışını bozmaz.
POST /simurgh-connector/products/panel-sync
# Body: /products/full-sync ile aynı ürün payloadı
Başarılı/başarısız cevapta panel tarafı için panel.trace_id, panel.endpoint ve üst seviyede panel_trace_id döner. 1.0.0.33 ile aynı iz GET /products/panel-sync/audit?trace_id=... üzerinden de okunur. Sunucuda özet log:
/home/example-tenant/www/storage/logs/simurgh-panel-sync.jsonl
Ürün Attribute Engine
v1.0.0.26: POST /products ve POST /products/full-sync payloadlarında dinamik Simurgh Pazaryeri attribute değerleri ortak option resolver üzerinden işlenir.
Associative payload
{
"simurgh_product_id": "prd_001",
"sku": "SKU001",
"attribute_family_code": "default",
"attributes": {
"color": 12,
"material": "Pamuk",
"is_fragile": true
}
}
Locale/channel kapsamlı payload
{
"attributes": [
{"code":"custom_title","value":"Başlık","locale":"tr","channel":"default"},
{"code":"color","value":"Kırmızı"}
],
"strict_attributes": true
}
Desteklenen tipler: text, textarea, price, boolean, select, multiselect, checkbox, date, datetime, file ve image.
Select, multiselect ve checkbox değerleri option ID veya mevcut option etiketi ile çözülebilir. Varsayılan politika reject olduğu için bilinmeyen option otomatik oluşturulmaz. Attribute ürün ailesine bağlı değilse veya zorunlu attribute eksikse işlem başarısız olur.
strict_attributes=false kullanılırsa bilinmeyen veya aileye bağlı olmayan alanlar atlanır ve response içindeki attributes.ignored listesinde raporlanır.
Attribute Option Policy
v1.0.0.26: Normal ürün attribute'ları ve configurable varyant super attribute değerleri artık ortak AttributeOptionResolver servisiyle çözümlenir.
| Policy | Davranış |
|---|---|
reject | Varsayılan güvenli davranıştır. Option ID veya etiket bulunamazsa ürün senkronu hata ile durur. |
create_if_allowed | Bilinmeyen string etiket için Simurgh Pazaryeri attribute_options ve locale translation kaydı oluşturur. Aynı etiket varsa tekrar oluşturmaz. |
ignore | Sadece strict_attributes=false olduğunda normal ürün attribute değerini atlar. Configurable varyant kombinasyonları ignore edilemez. |
Request seviyesi policy
{
"sku": "SKU001",
"attribute_option_policy": "create_if_allowed",
"attributes": [
{"code":"color","value":{"label":"Kırmızı","labels":{"tr":"Kırmızı","en":"Red"}}}
]
}
Attribute bazlı override
{
"attribute_option_policy": "reject",
"attribute_option_policies": {
"color": "create_if_allowed",
"material": "ignore"
},
"strict_attributes": false
}
Response içinde çözümleme raporu döner: attributes.options.resolved, attributes.options.created, attributes.options.would_create, attributes.options.ignored. Configurable ürünlerde varyant option raporu variants.options altında döner. /products/preflight read-only olduğu için yeni option açmaz; oluşturulabilecek kayıtları would_create olarak gösterir.
{
"attributes": {
"written": [{"code":"color","type":"select"}],
"ignored": [],
"options": {
"resolved": [],
"created": [{"attribute_code":"color","option_id":45,"label":"Kırmızı"}],
"would_create": [],
"ignored": []
}
}
}
reject olarak kalır. Otomatik option oluşturma sadece request veya config ile açıkça create_if_allowed yapılırsa çalışır.Configurable Ürün ve Varyant Motoru
v1.0.0.25: POST /products ve POST /products/full-sync configurable parent ürün, super attribute ve child varyant senkronizasyonunu destekler.
v1.0.0.27: Configurable payloadlar artık canlı senkron öncesinde POST /products/preflight ile read-only doğrulanabilir.
{
"simurgh_product_id": "prd_parent_001",
"type": "configurable",
"sku": "TSHIRT-001",
"name": "Basic Tişört",
"attribute_family_code": "default",
"configurable_attributes": ["color", "size"],
"variants": [
{
"simurgh_product_id": "prd_variant_red_m",
"sku": "TSHIRT-001-RED-M",
"name": "Basic Tişört Kırmızı M",
"price": 349.90,
"stock": 8,
"weight": 0.25,
"attributes": {"color": "Kırmızı", "size": "M"}
}
],
"prune_variants": false
}
configurable_attributes alanındaki attribute'lar Simurgh Pazaryeri ürün ailesine bağlı ve select tipinde olmalıdır. Option değeri mevcut option ID veya etiketiyle gönderilebilir. Bilinmeyen option için ortak policy kullanılır; varsayılan reject davranışı korunur.
Her varyant ayrı simurgh_product_id ile simurgh_product_mappings tablosuna kaydedilir. SKU değişse bile sonraki senkronizasyonda mapping üzerinden aynı child ürün bulunur.
Aynı SKU veya aynı attribute kombinasyonu iki kez gönderilirse işlem reddedilir. Varsayılan prune_variants=false olduğundan payload dışında kalan mevcut varyantlar korunur. true kullanılırsa payload dışında kalan child varyantlar Simurgh Pazaryeri güncelleme akışı tarafından kaldırılır.
Kategori & Marka
simurgh_category_id ile idempotent kategori upsert yapar. Aynı payload tekrar gönderildiğinde yeniden yazmak yerine action: unchanged dönebilir. external_id ve category_id geriye dönük alias olarak kabul edilir.
{
"simurgh_category_id":"cat_001",
"name":"Gümüş Kolye",
"slug":"gumus-kolye",
"parent_simurgh_category_id":"cat_root",
"locale":"tr",
"description":"Kategori açıklaması",
"meta_title":"Gümüş Kolye",
"meta_keywords":"gümüş,kolye",
"meta_description":"Kategori SEO açıklaması",
"position":10,
"status":1,
"display_mode":"products_only"
}
simurgh_brand_id ile Simurgh Pazaryeri brand attribute option kaydını oluşturur/günceller. external_id ve brand_id alias olarak kabul edilir.
{ "simurgh_brand_id":"brand_001", "name":"Example Store", "slug":"example-store", "locale":"tr", "sort_order":10 }
Kategori Zorunlu Attribute Sözleşmesi
v1.0.0.25: POST /categories payloadı artık required_attributes alanını kabul eder. Bu liste kategori mapping kaydında tutulur ve ürün senkronunda doğrulanır.
{
"simurgh_category_id": "cat_001",
"name": "Tişört",
"required_attributes": ["material", "gender"]
}
Ürün bu kategoriye bağlandığında belirtilen Simurgh Pazaryeri attribute değerleri mevcut değilse ürün işlemi PRODUCT_SYNC_FAILED ile durur. Sessiz varsayım veya otomatik option oluşturma yapılmaz.
Varyant Bazlı Medya
v1.0.0.25: Configurable ürünlerde her varyant kendi görsel ve video listesini taşıyabilir. Medya işlemi ürün transaction'ı tamamlandıktan sonra yürütülür; bir varyant medya hatası parent ürün kaydını geri almaz ve variant_media.partial_failure alanında raporlanır.
{
"type": "configurable",
"variants": [{
"sku": "TSHIRT-RED-M",
"price": 349.90,
"attributes": {"color": "Kırmızı", "size": "M"},
"main_image": "https://cdn.example.com/red-m-main.jpg",
"images": ["https://cdn.example.com/red-m-2.jpg"],
"videos": []
}]
}
Domainli Site Yönetimi — Emekliye Ayrıldı
/site/* rotaları kaldırılmıştır. Mağaza görünümü Satıcı Merkezi’nden yönetilir. Ürün, sipariş ve fatura işlemleri için Ticari API ve Sipariş API bölümlerini kullanın.Ticari API · Sipariş, Fatura ve Kargo
seller_order alanı satıcı alt sipariş numarası, komisyon, net hakediş ve ödeme durumunu taşır.marketplace_context siparişin tenant/pazaryeri kaynağını taşır; item içindeki seller_tenant_id ürün satıcısını belirtir. Connector siparişleri kendi tenant sahipliğiyle sınırlar.pazaryeri.simurgh.com.tr merkezi pazaryeri görünümü ile tenant storefront görünümü Host bazında ayrıldı.order_preferences alanı bireysel/kurumsal sipariş tipini, e-fatura seçimini, fatura unvanı/vergi dairesi/vergi numarasını ve müşteri sipariş notunu taşır.Siparişleri artan Simurgh Pazaryeri ID sırasıyla döndürür. after_id yeni cursor alanıdır; since_id geriye uyumluluk için desteklenir. limit 1–250 arasındadır. Her dönen sipariş mapping tablosunda pulled olarak işaretlenir.
curl "$BASE_URL/orders/pull?limit=50&after_id=120&updated_after=2026-07-11T00:00:00Z" \
-H "X-Simurgh-Key: <connector-key>" \
-H "X-Simurgh-Token: <connector-token>"
{
"success": true,
"code": "ORDERS_PULLED",
"count": 2,
"orders": [ ... ],
"cursor": {
"current": 120,
"next": 122,
"has_more": false,
"limit": 50
},
"meta": { "requestId": "...", "timestamp": "..." }
}
order_id veya increment_id ile sipariş durumunu günceller. simurgh_order_id verilirse mapping kaydına bağlanır. async:true, ?async=1 veya Prefer: respond-async ile ORDER_STATUS işi kuyruğa alınabilir. Aynı status ve boş yorum tekrarında action: unchanged döner.
{
"increment_id":"4",
"simurgh_order_id":"sim-order-001",
"status":"processing",
"comment":"Simurgh tarafından işleme alındı.",
"async":true
}
orders.status alanını günceller. Invoice ve shipment oluşturmuş sayılmaz; tam lifecycle işlemleri ayrı endpointlerle eklenecektir.Simurgh Pazaryeri siparişinin Simurgh tarafında başarıyla oluşturulduğunu bildirir. simurgh_order_id zorunludur; mapping kaydı acknowledged durumuna alınır ve acknowledged_at yazılır.
{"increment_id":"1000001","simurgh_order_id":"sim-order-001","async":false}Simurgh Pazaryeri RefundRepository üzerinden iade oluşturur. items verilmezse kalan iade edilebilir kalemlerin tamamı kullanılır. shipping, adjustment_refund ve adjustment_fee desteklenir. Bu işlem Simurgh Pazaryeri iade ve stok iade akışını çalıştırır; harici ödeme sağlayıcısına otomatik para iadesi garantisi vermez.
{"increment_id":"1000001","items":{"42":1},"shipping":0,"adjustment_refund":0,"adjustment_fee":0,"async":false}Siparişin faturalanabilir kalemleri için Simurgh Pazaryeri InvoiceRepository üzerinden fatura oluşturur. items verilmezse kalan tüm miktar faturalanır.
{"increment_id":"1000001","items":{"42":1},"async":false}Simurgh Pazaryeri ShipmentRepository üzerinden gönderi oluşturur, stok hareketini ve sipariş durumunu Simurgh Pazaryeri kurallarıyla işler. Inventory source kodu veya ID kabul edilir.
{"increment_id":"1000001","inventory_source":"default","carrier_title":"Yurtiçi Kargo","tracking_number":"123456789","items":{"42":1}}OrderRepository iptal akışını kullanır; stok iadesi, kalem miktarları ve sipariş durumu Simurgh Pazaryeri tarafından güncellenir. force yalnız yönetici override ihtiyacında kullanılmalıdır.
{"increment_id":"1000001","force":false}Master Import
Kategori, marka, ürün, fiyat, stok, SEO ve medya aktarımını tek servis akışında yürütür. Controller henüz FormRequest ve ortak response standardına taşınmamıştır.
{
"product": {
"simurgh_product_id":"prd_001",
"sku":"MASTER001",
"name":"Master Test Ürün",
"description":"Ürün açıklaması",
"price":199.90,
"stock":7,
"weight":1,
"manage_stock":true,
"status":"ACTIVE",
"category":{"name":"Gümüş Kolye","slug":"gumus-kolye","parent_id":1},
"brand":{"name":"Example Store"},
"seo":{"url_key":"master-test-urun","meta_title":"Master Test Ürün"},
"media":{"images":["https://cdn.example.com/product.jpg"]}
}
}
Sistem
/system/reindex endpointi mevcut route dosyasında yoktur. Gerektiğinde container içinde CLI kullanılır.
docker exec -it example-tenant-php php artisan indexer:index
Sync Jobs
v1.0.0.18: Takılı processing sync işlerini otomatik kurtaran queue resilience katmanı, simurgh:sync-recover komutu ve worker --recover-after seçeneği eklendi.
v1.0.0.19: Ürün, kategori ve marka uçlarına geriye uyumlu asenkron kuyruk desteği eklendi. İstek gövdesinde "async": true, sorguda ?async=1 veya Prefer: respond-async kullanıldığında API 202 Accepted ve jobUuid döndürür. Aynı tenant, job tipi, entity ve payload için aktif iş varsa yeni kayıt açılmaz; mevcut iş action: reused ile döner.
v1.0.0.17: Queue worker komutu, job type handler registry ve geçici/kalıcı hata sınıflandırması eklendi.
Asenkron kullanım ve duplicate koruması
Aşağıdaki uçlar senkron davranışı korur; isteğe bağlı olarak kuyruğa alınabilir: /products, ürün alt uçları, /categories ve /brands.
curl -X POST "$BASE_URL/products/stock?async=1" \
-H "Content-Type: application/json" \
-H "X-Simurgh-Key: $KEY" \
-H "X-Simurgh-Token: $TOKEN" \
-d '{"simurgh_product_id":"prd_001","sku":"SKU001","stock":12}'
Alternatif header: Prefer: respond-async. Başarılı cevap 202 Accepted olur:
{
"success": true,
"code": "SYNC_JOB_QUEUED",
"action": "queued",
"data": {
"jobUuid": "...",
"jobType": "PRODUCT_STOCK",
"status": "pending"
}
}
Aynı aktif payload tekrar gönderilirse code: SYNC_JOB_REUSED ve action: reused döner. İş tamamlandığında veya kalıcı olarak başarısız olduğunda aynı payload daha sonra yeniden kuyruğa alınabilir.
GET /sync/jobs/{jobUuid}
Tenant kapsamında işi ve son log kayıtlarını döndürür.
curl -H "X-Simurgh-Key: $KEY" \
-H "X-Simurgh-Token: $TOKEN" \
"$BASE_URL/sync/jobs/JOB_UUID"
POST /sync/jobs/{jobUuid}/retry
Yalnız failed veya retry durumundaki işi yeniden kuyruğa alır. Attempt sayacı sıfırlanır.
Durum geçişleri
pending | retry -> processing -> completed
-> retry
-> failed
Retry gecikmeleri: hemen, 1 dakika, 5 dakika, 15 dakika ve 60 dakika.
Queue Worker
Pending veya retry durumundaki simurgh_sync_jobs kayıtlarını tenant bazında claim eder ve job type → handler registry üzerinden ilgili servise yönlendirir.
php artisan simurgh:sync-work --tenant=example-tenant --once
php artisan simurgh:sync-work --tenant=example-tenant --types=PRODUCT_PRICE --types=PRODUCT_STOCK
php artisan simurgh:sync-work --tenant=example-tenant --sleep=5 --max-jobs=100
| Seçenek | Açıklama |
|---|---|
--tenant | İşlenecek tenant. Verilmezse SIMURGH_CONNECTOR_TENANT kullanılır. |
--once | En fazla bir job işler ve çıkar. Deploy sonrası güvenli smoke test için uygundur. |
--sleep | Job yoksa bekleme süresi. Varsayılan 5 saniye. |
--max-jobs | Belirtilen sayıda job işlendikten sonra worker kapanır. 0 sınırsızdır. |
--types | Bir veya daha fazla job tipi filtresi. |
Desteklenen job tiplerini görmek için:
php artisan simurgh:sync-types
Desteklenen çekirdek tipler: CATEGORY_UPSERT, BRAND_UPSERT, PRODUCT_CREATE, PRODUCT_UPDATE, PRODUCT_UPSERT, PRODUCT_FULL_SYNC, PRODUCT_PRICE, PRODUCT_STOCK, PRODUCT_MEDIA, PRODUCT_SEO, PRODUCT_VISIBILITY, PRODUCT_INFO.
Panel Sync Audit
v1.0.0.34: Simurgh panel eski /products/full-sync endpointini kullanıyorsa bu çağrılar da aynı güvenli audit loguna yazılır. Kökte product nesnesiyle gelen payloadlar validation öncesi geriye uyumlu normalize edilir. v1.0.0.33: /products/panel-sync audit izi API üzerinden okunabilir.
Son panel sync audit kayıtlarını listeler. trace_id verilirse tek ürün gönderiminin started/completed kayıtları destek ekranında hızlı bulunur.
curl -X GET "$BASE_URL/products/panel-sync/audit?limit=20" \
-H "X-Simurgh-Key: <connector-key>" \
-H "X-Simurgh-Token: <connector-token>"
curl -X GET "$BASE_URL/products/panel-sync/audit?trace_id=<panel_trace_id>" \
-H "X-Simurgh-Key: <connector-key>" \
-H "X-Simurgh-Token: <connector-token>"
curl -X GET "$BASE_URL/products/panel-sync/audit?endpoint=products/full-sync" \
-H "X-Simurgh-Key: <connector-key>" \
-H "X-Simurgh-Token: <connector-token>"
| Query | Açıklama |
|---|---|
trace_id | Panel response içindeki panel_trace_id ile aynı iz kaydını bulur. |
sku | Audit satırlarını SKU değerine göre filtreler. |
event | started, completed veya queued gibi event değerine göre filtreler. |
success | true veya false ile sonuç filtreler. |
endpoint | products/full-sync veya products/panel-sync değerine göre filtreler. |
limit | Dönen kayıt sayısı. Varsayılan 20, üst sınır 100. |
{
"success": true,
"code": "PANEL_SYNC_AUDIT_LISTED",
"message": "Panel sync audit kayıtları listelendi.",
"data": {
"tenant": "example-tenant",
"log_exists": true,
"path": "storage/logs/simurgh-panel-sync.jsonl",
"entries_count": 2,
"entries": [
{"event":"completed","trace_id":"uuid","success":true,"sku":"TEST001"},
{"event":"started","trace_id":"uuid","summary":{"sku":"TEST001"}}
]
},
"meta": {"requestId":"uuid","timestamp":"ISO-8601"}
}
v1.0.0.32: /products/panel-sync çağrıları için işlem başlangıcı ve sonucu credential içermeyen JSONL log olarak yazılır. Dosya üzerinden kontrol gerektiğinde:
tail -n 20 /home/example-tenant/www/storage/logs/simurgh-panel-sync.jsonl
Log ve audit API tüm ham payloadı yazmaz; SKU, kaynak ürün ID, kategori/marka özeti, işlem sonucu, Simurgh Pazaryeri ürün ID, failed step listesi ve hata/uyarı sayıları gibi güvenli özet alanları içerir.
Kalıcı Sync Worker
example-tenant-connector container artık boşta beklemez; Simurgh Pazaryeri uygulamasını mount ederek aşağıdaki komutu sürekli çalıştırır:
php artisan simurgh:sync-work --sleep=5
Worker yalnız pending ve zamanı gelmiş retry kayıtlarını işler. Başarılı işler completed, geçici hatalar retry, kalıcı veya deneme limiti dolan hatalar failed olur.
Yönetim komutları
docker logs --tail=100 example-tenant-connector
docker restart example-tenant-connector
docker exec -it example-tenant-connector php artisan simurgh:sync-types
docker exec -it example-tenant-connector php artisan simurgh:sync-work --tenant=example-tenant --once
Bu runtime değişikliği yeni HTTP endpoint eklemez; mevcut sync job API uçlarının arka plan yürütücüsünü kalıcı hale getirir.
v1.0.0.28 Sistem Notu
GET /doctor deploy sonrası hızlı sağlık kontrolü için eklenmiştir. /health sadece uygulama/veritabanı durumunu gösterirken /doctor route, tablo, catalog default, dokümantasyon sürümü, storage ve sync queue özetini de kontrol eder.
Dış Connector CLI
v1.0.0.34: Eski panel /products/full-sync çağrıları da audit izine girer. v1.0.0.33: Panel gönderim izi GET /products/panel-sync/audit ile API üzerinden okunabilir. v1.0.0.32: Canlı operatör ürün akışı Simurgh panelden yürütülür. /home/example-tenant/simurgh-commerce CLI komutları bağlantı kontrolü ve teknik smoke test/fallback içindir; operatöre JSON payload hazırlatılmaz. Panel ürün gönderimlerinin özet izi storage/logs/simurgh-panel-sync.jsonl altında tutulur.
cd /home/example-tenant/simurgh-commerce
cp -n .env.example .env
nano .env
php bin/simurgh-commerce version
php bin/simurgh-commerce auth:login
php bin/simurgh-commerce health
php bin/simurgh-commerce doctor
php bin/simurgh-commerce product:preflight --file storage/payloads/product.json
php bin/simurgh-commerce product:full-sync --file storage/payloads/product.json
php bin/simurgh-commerce product:full-sync --file storage/payloads/product.json --async
.env değerleri
SIMURGH_MARKETPLACE_CONNECTOR_BASE_URL=http://127.0.0.1:9001/simurgh-connector
SIMURGH_MARKETPLACE_CONNECTOR_KEY=<connector-key>
SIMURGH_MARKETPLACE_CONNECTOR_TOKEN=<connector-token>
SIMURGH_MARKETPLACE_CONNECTOR_TIMEOUT=30
Komutlar
auth:login credential doğrular. health temel bağlantı kontrolüdür. doctor deploy sonrası ayrıntılı sistem kontrolüdür. product:preflight ve product:full-sync yalnız teknik smoke test/fallback komutlarıdır; canlı ürün akışı Simurgh panelden çağrılan /products/full-sync veya /products/panel-sync ile yürütülür.
.env ZIP ile ezilmemelidir. Credential değerleri loglara yazılmaz; istek/cevap özeti ve product:full-sync başarı-hata özeti storage/logs/connector.log içine JSON satırı olarak kaydedilir.Teknik product full-sync örneği
cp storage/payloads/product-full-sync.example.json storage/payloads/product.json
nano storage/payloads/product.json
php bin/simurgh-commerce product:full-sync --file storage/payloads/product.json
--async mevcut PRODUCT_FULL_SYNC job akışını kullanır.V3 Salt-Okunur Katalog
Simurgh panelinin güvenli ilk kurulumda kategori ve mevcut mağaza ürünlerini okuması içindir. İki endpoint connector auth middleware arkasındadır ve veri değiştirmez.
GET /catalog/categories
Aktif kategori ağacını kimlik, parent, path, level ve leaf bilgileriyle döndürür.
GET /catalog/products
page ve en fazla 200 olan page_size ile ürün, SKU, barkod, kategori, fiyat, stok, özellik ve görsel snapshotı döndürür.
curl -s "$BASE_URL/catalog/categories" \
-H "X-Simurgh-Key: <key>" -H "X-Simurgh-Token: <token>"
curl -s "$BASE_URL/catalog/products?page=1&page_size=100" \
-H "X-Simurgh-Key: <key>" -H "X-Simurgh-Token: <token>"
Önerilen Mevcut Akış
1. Credential kontrolü: POST /auth/login
2. Bağlantı kontrolü: GET /health
3. Kurulum kontrolü: GET /doctor
4. Kategori: POST /categories
5. Marka: POST /brands
6. Ürün ön kontrol: POST /products/preflight
7. İlk ürün / tam senkron: Simurgh panel -> POST /products/full-sync veya /products/panel-sync
8. Teknik smoke test gerekirse: product:full-sync --file ...
9. Fiyat: POST /products/price
10. Stok: POST /products/stock
11. Bilgi / SEO / medya / görünürlük: ilgili ürün endpointi
12. Sipariş çekme: GET /orders/pull
13. Sipariş acknowledgement: POST /orders/acknowledge
14. Sipariş durumu: POST /orders/status
15. Fatura oluşturma: POST /orders/invoice
16. Gönderi oluşturma: POST /orders/shipment
17. İade oluşturma: POST /orders/refund
18. Sipariş iptali: POST /orders/cancel