EnKurye Webhook API
EnKurye API
v1 · webhook

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.

https://enkurye.com/api/

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ç noktaKim çağırırFormat
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ı
Önemli: 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ç noktaHeaderKaynak
webhook_siparis.phpX-Api-Keyisletmeler.api_anahtari — eşleşmezse veya işletme pasifse 401
webhook_yemeksepeti.phpX-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.

POST/api/webhook_siparis.php

İstek Başlıkları

HeaderDeğer
Content-Typeapplication/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ı

AlanTipZorunluAçıklama
platformstringopsiyonelTanı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_nostringopsiyonelPlatformun kendi sipariş numarası. Mükerrer korumasında platform+işletme ile birlikte anahtar olarak kullanılır
musteri_isimstringzorunluBoşsa istek 422 ile reddedilir
musteri_soyisimstringopsiyonelVarsayılan -
musteri_telefonstringzorunlu*Boş gelirse işletmenin kendi yetkili_telefon numarasına düşer; o da yoksa 422
teslim_adresistringzorunluBoşsa 422
teslim_lat / teslim_lngfloatopsiyonelVerilmezse kurye adrese göre yönlendirilir, rota optimizasyonu için koordinat önerilir
paket_icerigistringopsiyonelVarsayılan Sipariş
toplam_tutarfloatopsiyonelTahsilat/raporlama için
ozel_notlarstringopsiyonelKurye panelinde sipariş notu olarak görünür

Örnek İstek

cURL
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

200 · Oluşturuldu

Sipariş kaydedildi, kurye ataması başlatıldı. siparis_id + takip_no döner.

200 · Zaten Kayıtlı

Aynı platform+dis_siparis_no daha önce işlendi — mevcut siparis_id/takip_no aynen döner, yeni kayıt açılmaz.

401 · Yetkisiz

X-Api-Key eksik, geçersiz veya işletme pasif.

405 · Yöntem Hatası

POST dışında bir istek.

422 · Eksik Alan

musteri_isim, musteri_telefon veya teslim_adresi eksik.

500 · Sunucu Hatası

Kayıt veritabanına yazılamadı.

Başarılı Yanıt
{
  "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.

POST/api/webhook_yemeksepeti.php
Kurulum: Yemeksepeti Vendor Portal'da webhook adresi olarak 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ı)

AlanNereden okunur
order_idSipariş kimliği — dis_siparis_no olarak saklanır, mükerrer/idempotent anahtarı
order_codeOkunabilir sipariş kodu — notlara eklenir
statusRECEIVED / READY_FOR_PICKUP / DISPATCHED / CANCELLED
client.store_idisletmeler.ys_vendor_id ile eşleştirilir — bulunamazsa 404
customer.first_name / last_name / phone_numberMaskelenmiş (***) 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_totaltoplam_tutar
commentozel_notlar

Durum Akışı

RECEIVED → sipariş oluşturulur
READY_FOR_PICKUP → henüz yoksa oluşturulur
DISPATCHED → yok sayılır (teslimat EnKurye kuryesiyle yönetilir)
CANCELLED → mevcut kayıt iptal'e çekilir*

*Sipariş zaten teslim_edildi veya iptal ise dokunulmaz.

Yanıtlar

200 · İşlendi

Yeni sipariş oluşturuldu, zaten kayıtlıydı veya durum senkronize edildi.

400 · Geçersiz Gövde

order_id eksik veya JSON parse edilemedi.

401 · Geçersiz Token

X-Webhook-Token/Authorization eşleşmiyor.

404 · İşletme Bulunamadı

client.store_id için aktif işletme yok.

422 · store_id Eksik

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.php hiçbir isteği imza/doğrulama açısından platforma özel kontrol etmez — sadece X-Api-Key ile 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.

Önemli iş kuralı: dış platformlardan (webhook ile) gelen gerçek ödenmiş siparişler jeton bakiyesi yetersiz diye asla reddedilmez — bakiye negatife düşebilir. Sadece işletmenin kendi panelinden elle sipariş girişi (telefon siparişi) bakiye sıfır veya altındaysa engellenir. Bir işletme herhangi bir alt bayiye bağlı değilse (genel havuz), jeton düşümü sessizce atlanır.

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.