EnKurye Webhook API
İşletmelere ait sipariş kanallarından (platform entegrasyonları, kendi POS sisteminiz veya tarayıcı eklentisi) EnKurye'ye otomatik sipariş düşürmek ve kurye atama motorunu tetiklemek için kullanılan iki uç nokta. Kimlik doğrulama her işletmeye özel bir anahtar/token ile yapılır.
Genel Bakış
İki ayrı uç nokta var, ikisi de aynı işi yapar — teslim edilecek bir siparişi siparisler tablosuna yazıp otomatik kurye atamasını başlatmak — ama farklı çağıranlara hizmet eder:
| Uç nokta | Kim çağırır | Format |
|---|---|---|
webhook_siparis.php |
Kendi POS sisteminiz, tarayıcı eklentisi (Kurye Çağır butonu), veya resmi entegrasyonu henüz olmayan herhangi bir dış kaynak | EnKurye'nin kendi basit JSON şeması |
webhook_yemeksepeti.php |
Yemeksepeti Partner Portal (resmi webhook) | Yemeksepeti'nin kendi webhook gövde formatı |
webhook_siparis.php Getir, Trendyol Yemek veya Migros Yemek'in resmi API'lerine bağlı değildir — bu platformların imza doğrulamalı gerçek webhook formatları elimizde olmadığı için, bu uç nokta genel bir "giriş kapısı" olarak tasarlandı. Bu platformlardan otomatik veri çekmenin tek yolu şu an tarayıcı eklentisi (aşağıda) veya işletmenin kendi POS/manuel girişi. Resmi API anahtarları elde edilirse her platform için ayrı, imza doğrulamalı bir adaptör (webhook_yemeksepeti.php örneğindeki gibi) yazılabilir.
Kimlik Doğrulama
Her işletmenin kendine özel bir anahtarı vardır; işletme panelinde Entegrasyonlar sayfasından görülebilir ve yenilenebilir (yenilemek eski anahtarı anında geçersiz kılar).
| Uç nokta | Header | Kaynak |
|---|---|---|
webhook_siparis.php | X-Api-Key | isletmeler.api_anahtari — eşleşmezse veya işletme pasifse 401 |
webhook_yemeksepeti.php | X-Webhook-Token veya Authorization: Bearer <token> | isletmeler.ys_webhook_token (hash_equals ile sabit zamanlı karşılaştırma) — eşleşmezse 401 |
Genel Sipariş Webhook
Dış bir kaynaktan (POS, eklenti, manuel entegrasyon) EnKurye'ye yeni bir sipariş düşürür. Alınış noktası her zaman işletmenin kendi kayıtlı adres/konumudur — istekte gönderilmez.
İstek Başlıkları
| Header | Değer |
|---|---|
Content-Type | application/json (form-encoded POST da kabul edilir — eski POS sistemleri için geri dönüş yolu) |
X-Api-Key | İşletmenin API anahtarı |
Gövde Alanları
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
platform | string | opsiyonel | Tanınmıyorsa veya boşsa manuel'e düşer. Geçerli değerler: getir, yemeksepeti, trendyol_yemek, migros_yemek, adisyo, yemek_pos, desen_pos, robot_pos, sepet_takip, manuel |
dis_siparis_no | string | opsiyonel | Platformun kendi sipariş numarası. Mükerrer korumasında platform+işletme ile birlikte anahtar olarak kullanılır |
musteri_isim | string | zorunlu | Boşsa istek 422 ile reddedilir |
musteri_soyisim | string | opsiyonel | Varsayılan - |
musteri_telefon | string | zorunlu* | Boş gelirse işletmenin kendi yetkili_telefon numarasına düşer; o da yoksa 422 |
teslim_adresi | string | zorunlu | Boşsa 422 |
teslim_lat / teslim_lng | float | opsiyonel | Verilmezse kurye adrese göre yönlendirilir, rota optimizasyonu için koordinat önerilir |
paket_icerigi | string | opsiyonel | Varsayılan Sipariş |
toplam_tutar | float | opsiyonel | Tahsilat/raporlama için |
ozel_notlar | string | opsiyonel | Kurye panelinde sipariş notu olarak görünür |
Örnek İstek
curl -X POST https://enkurye.com/api/webhook_siparis.php \ -H "X-Api-Key: iLET-ME-NIN-ANAHTARI" \ -H "Content-Type: application/json" \ -d '{ "platform": "getir", "dis_siparis_no": "GTR-998231", "musteri_isim": "Ahmet", "musteri_soyisim": "Yılmaz", "musteri_telefon": "05xx xxx xx xx", "teslim_adresi": "Vali Mithat Bey Mah. ... No:14 D:3", "teslim_lat": 38.5043, "teslim_lng": 43.4011, "paket_icerigi": "1x Adana Kebap, 1x Ayran", "toplam_tutar": 185.50, "ozel_notlar": "Zili çalmayın" }'
Yanıtlar
Sipariş kaydedildi, kurye ataması başlatıldı. siparis_id + takip_no döner.
Aynı platform+dis_siparis_no daha önce işlendi — mevcut siparis_id/takip_no aynen döner, yeni kayıt açılmaz.
X-Api-Key eksik, geçersiz veya işletme pasif.
POST dışında bir istek.
musteri_isim, musteri_telefon veya teslim_adresi eksik.
Kayıt veritabanına yazılamadı.
{
"basarili": true,
"mesaj": "Sipariş alındı ve kurye ataması başlatıldı.",
"siparis_id": 4821,
"takip_no": "EK26100614523391"
}
Yemeksepeti Partner Webhook
Yemeksepeti'nin Vendor Portal'dan tanımlanan resmi sipariş webhook'u. Yemeksepeti aynı siparişin yaşam döngüsü boyunca (yeni → hazır → iptal) bu adresi birden çok kez çağırır; uç nokta bu yüzden idempotent çalışır.
https://enkurye.com/api/webhook_yemeksepeti.php tanımlanır. Bunun çalışması için işletme kaydında ys_vendor_id (Yemeksepeti client.store_id ile eşleşen) ve ys_webhook_token alanlarının admin tarafında önceden set edilmiş olması gerekir. Resmi parametre referansı: developer.yemeksepeti.com/api-specifications.
İlgili Gövde Alanları (Yemeksepeti formatı)
| Alan | Nereden okunur |
|---|---|
order_id | Sipariş kimliği — dis_siparis_no olarak saklanır, mükerrer/idempotent anahtarı |
order_code | Okunabilir sipariş kodu — notlara eklenir |
status | RECEIVED / READY_FOR_PICKUP / DISPATCHED / CANCELLED |
client.store_id | isletmeler.ys_vendor_id ile eşleştirilir — bulunamazsa 404 |
customer.first_name / last_name / phone_number | Maskelenmiş (***) veya boş gelirse "Yemeksepeti" / "Müşterisi" + işletmenin kendi telefonuna düşer, nota uyarı eklenir |
customer.delivery_address.* | formattedAddress varsa o kullanılır, yoksa parçalar birleştirilir; latitude/longitude alınır |
items[].name / pricing.quantity | "2x Burger, 1x Kola" şeklinde paket_icerigi'ne birleştirilir |
payment.order_total | toplam_tutar |
comment | ozel_notlar |
Durum Akışı
iptal'e çekilir**Sipariş zaten teslim_edildi veya iptal ise dokunulmaz.
Yanıtlar
Yeni sipariş oluşturuldu, zaten kayıtlıydı veya durum senkronize edildi.
order_id eksik veya JSON parse edilemedi.
X-Webhook-Token/Authorization eşleşmiyor.
client.store_id için aktif işletme yok.
client.store_id gövdede yok.
Sınırlamalar
- Getir, Trendyol Yemek ve Migros Yemek için resmi webhook/API entegrasyonu henüz yok — bu platformlardan otomatik veri akışı şu an yalnızca tarayıcı eklentisi (aşağıda) üzerinden sağlanıyor.
webhook_siparis.phphiçbir isteği imza/doğrulama açısından platforma özel kontrol etmez — sadeceX-Api-Keyile işletme kimliğini doğrular. Anahtarı bilen herkes o işletme adına sipariş açabilir; anahtar sızarsa Entegrasyonlar sayfasından yenilenmelidir.- Alınış (gönderen) konumu her zaman işletmenin kayıtlı adres/koordinatıdır — istekte override edilemez.
Jeton Düşümü
Her iki uç nokta da başarılı sipariş kaydından sonra jetonSiparisIcinDus()'u çağırır. Jeton bakiyesi işletme seviyesinde değil, işletmenin bağlı olduğu alt bayi seviyesinde tutulur.
Mükerrer Koruması
Aynı platform (kaynak) + aynı dis_siparis_no + aynı işletme ile ikinci bir istek gelirse — eklenti yeniden denediği için veya webhook birden çok tetiklendiği için — yeni kayıt açılmaz, var olan siparişin siparis_id/takip_no'su aynen döner. dis_siparis_no boş bırakılırsa bu koruma devre dışı kalır; her istek yeni bir sipariş olarak işlenir.
Chrome Eklentisi ile İlişkisi
EnKurye Entegrasyon eklentisindeki "🏍️ Kurye Çağır" butonu — platformun kendi panelinde eklentinin otomatik yakalayamadığı bir sipariş görüldüğünde — arka planda bu dokümandaki Genel Sipariş Webhook'u (webhook_siparis.php) çağırır; platform alanı butonun bulunduğu sekmeye göre (getir/yemeksepeti/trendyol_yemek/migros_yemek) otomatik doldurulur. Yani eklenti için ayrı bir API yoktur — işletmenin kendi anahtarıyla aynı uç noktayı kullanır.