Sipariş oluşturma

Sipariş oluşturma

POST /SaveOrder

Adisyo'da yeni bir sipariş oluşturur.

Örnek istekler

Teslimat veya paket siparişlerinde adres ve isteğe bağlı olarak konum (enlem/boylam) alanları kullanılır.

Teslimatlı paket siparişi oluşturma
curl -X POST 'https://ext.adisyo.com/api/External/v2/SaveOrder' \
  --header "x-api-key: ..." \
  --header "x-api-secret: ..." \
  --header "x-api-consumer: ..." \
  --header 'Content-Type: application/json' \
  --data '{
      "CustomerName": "Ahmet",
      "CustomerSurname": "Yılmaz",
      "CustomerId": "MUS-03",
      "CustomerPhone": "5551234567",
      "CustomerPhone2": "5559876543",
      "Address": "Atatürk Mahallesi, Çiçek Sokak No:12 Daire:4",
      "AddressDescription": "Migros karşısındaki apartman, kırmızı kapılı bina",
      "Region": "Ataşehir",
      "City": "İstanbul",
      "PaymentMethodId": 3,
      "PaymentNote": "Teslimatta kredi kartı ile ödeme yapılacak",
      "Discount": 0,
      "OrderTotal": 127.00,
      "DeliveryFee": 15,
      "OrderNote": "Lütfen sipariş sıcak getirilsin, yanında ıslak mendil ve peçete de olsun",
      "WebOrderId": "SIP-08",
      "CustomerLatitude": "40,987654",
      "CustomerLongitude": "29,123456",
      "OrderDetails": [
        {
          "ProductUnitId": 2359421,
          "Quantity": 2,
          "OrderDetailNote": "Büyük boy olsun, baharatsız tercih ediyorum"
        },
        {
          "ProductUnitId": 2359422,
          "Quantity": 1
        }
      ]
  }'

İstek Parametreleri

Yukarıdaki sipariş kaydetme isteklerini aşağıdaki örnek senaryo üzerinden açıklayalım:

  • Restoranınızın bir web sitesi var.
  • Ahmet Yılmaz isimli bir müşteri, web siteniz üzerinden sipariş veriyor.
  • Eğer bu müşteri daha önce sisteminizde kayıtlı değilse, öncelikle kendi veritabanınıza kaydetmeli ve oluşturduğunuz müşteri ID’sini (örnekte MUS-03) Adisyo API’sine göndermelisiniz.
  • Oluşan siparişi, kendi sisteminizde SIP-07 olarak kaydettiğinizi varsayalım. Bu siparişi Adisyo'ya aynı referans numarası ile gönderirseniz, işlemin takibi ve sonraki adımlar için kullanılabilir.
  • Siparişin Adisyo'da belirli bir masaya düşmesini istiyorsanız, önce Masa listesi endpointi ile masaları çekip, seçilen masanın id değerini bu istekte TableId olarak göndermelisiniz. TableId göndermezseniz sipariş herhangi bir masa ile ilişkilendirilmez.
Parametre AdıData TipiAçıklama
CustomerNameStringSiparişi veren müşterinin adı
CustomerSurnameStringSiparişi veren müşterinin soyadı
CustomerIdStringSiparişi veren müşterinin sizin sisteminizdeki ID'si (MUS-03)
CustomerPhoneStringSiparişi veren müşterinin birincil telefon numarası
CustomerPhone2StringSiparişi veren müşterinin ikincil telefon numarası
AddressStringSiparişi veren müşterinin adresi
AddressDescriptionStringSiparişi veren müşterinin adres tarifi
RegionStringSiparişi veren müşterinin semt/ilçe adı
CityStringSiparişi veren müşterinin şehri
PaymentMethodIdNumberÖdeme Tipi
PaymentNoteStringÖdeme notu
DiscountNumberSipariş geneline uygulanacak indirim tutarı (Siparişe indirim uygulama)
DiscountRateNumber?Sipariş geneline uygulanacak indirim oranı (0-100) (Siparişe indirim uygulama)
DiscountIdNumber?Sipariş geneline uygulanacak tanımlı indirimin ID'si (Siparişe indirim uygulama)
OrderNoteStringSipariş notu
WebOrderIdStringSiparişin sizin sisteminizdeki ID'si (SIP-07)
OrderTotalNumberSipariş toplam tutarı
TableIdNumber?Gönderilirse sipariş ilgili masaya oluşturulur. Değer olarak Masa listesi dönen masa ID bilgisi kullanılmalıdır.
DeliveryFeeNumberTeslimat ücreti (Sipariş toplamını hesaplama)
ServiceChargeNumberServis ücreti veya diğer ekstra hizmet ücretleri (Sipariş toplamını hesaplama)
CustomerLatitudeString?Müşteri enlem bilgisi (##,####). Masa siparişlerinde zorunlu değildir.
CustomerLongitudeString?Müşteri boylam bilgisi (##,####). Masa siparişlerinde zorunlu değildir.
OrderDetailsArraySipariş detaylarının listesi
[].OrderDetails.ProductUnitIdNumberÜrün birim ID'si (Siparişte ürünü belirtme)
[].OrderDetails.ProductCodeStringÜrün kodu (Siparişte ürünü belirtme)
[].OrderDetails.QuantityNumberÜrün adedi
[].OrderDetails.OrderDetailNoteString?Sipariş detayı notu
[].OrderDetails.DiscountAmountNumber?Kaleme uygulanacak indirim tutarı (Siparişe indirim uygulama)
[].OrderDetails.DiscountRateNumber?Kaleme uygulanacak indirim oranı (0-100) (Siparişe indirim uygulama)
[].OrderDetails.DiscountIdNumber?Kaleme uygulanacak tanımlı indirimin ID'si (Siparişe indirim uygulama)
(TODO) [].OrderDetails.NameString?Ürün veya menü adı
[].OrderDetails.IsMenuBooleanMenü mü? (Menü ürünleri)
[].OrderDetails.MenuIdNumber?Menü ID'si (Menü ürünleri)
[].OrderDetails.ParentIdString?Bağlı olduğu menü veya ürünün ID'si (Menü ürünleri)

Sipariş Toplamını Hesaplama

Sipariş toplam tutarına eklenen ekstra ücretleri 2 ayrı değer üzerinden iletebilirsiniz. Teslimat için ayrıca bir ödeme alınıyorsa bunu DeliveryFee alanı üzerinden gönderebilirsiniz.

Örneğin, ürün kalemleri 40, teslimat ücreti 15 TL olan bir sipariş için, OrderTotal: 55, DeliveryFee: 15 olarak iletilmelidir. Ayrıca, ekstra servis ücreti veya buna benzer ek ücretler de ServiceCharge alanı üzerinden gönderilmelidir.

Örneğin, paketleme ücreti 10, ek servis ücreti 20 olarak hizmet veren bir restoran için, ürün kalemleri de 90 TL olan bir siparişte ServiceCharge: 30, OrderTotal: 120 TL olarak iletilmelidir.

Bu siparişte bir de 20 TL teslimat ücreti varsa OrderTotal: 140 ve DeliveryFee: 20 TL olmalıdır.

Siparişe indirim uygulama

İndirim hem sipariş geneline hem de tek tek kalemlere uygulanabilir. Her iki seviyede de üç yoldan biri kullanılır:

YöntemSipariş geneliKalemAçıklama
TutarDiscountDiscountAmountSabit indirim tutarı
YüzdeDiscountRateDiscountRate0-100 arası oran
Tanımlı indirimDiscountIdDiscountIdAdisyo'da tanımlı indirimin ID'si. Tutar mı oran mı olduğu tanımdan okunur, ayrıca tutar veya oran göndermeniz gerekmez

Tanımlı indirimlerin listesi için İndirim listesi sayfasına bakabilirsiniz.

Sipariş oluşturulduktan sonra indirim uygulamak veya mevcut indirimi değiştirmek için Sipariş indirimi endpointini kullanabilirsiniz.

İndirimli siparişte toplam

OrderTotal, indirimler düşüldükten sonra müşterinin ödeyeceği tutardır. Ürün kalemlerinin toplamı ile şu şekilde tutarlı olmalıdır:

Ürün kalemleri toplamı = OrderTotal + toplam indirim - DeliveryFee - ServiceCharge

Toplam indirim, kalem indirimleri ile sipariş geneli indirimin toplamıdır.

İndirimli sipariş
{
  "Discount": 30,
  "OrderTotal": 250,
  "OrderDetails": [
    {
      "ProductUnitId": 2359421,
      "Quantity": 1,
      "DiscountRate": 10
    },
    {
      "ProductUnitId": 2359422,
      "Quantity": 2
    }
  ]
}

Yukarıdaki örnekte birim fiyatlar Adisyo'da 200 TL ve 50 TL olsun:

  • Ürün kalemleri toplamı: 200 + (2 x 50) = 300
  • Kalem indirimi: 200'ün %10'u = 20
  • Sipariş geneli indirim: 30
  • Toplam indirim: 20 + 30 = 50
  • OrderTotal: 300 - 50 = 250

Kurallar

  • DiscountId gönderildiğinde önceliklidir; aynı seviyedeki Discount / DiscountAmount ve DiscountRate dikkate alınmaz.
  • DiscountId gönderilmediğinde tutar ve oran aynı anda gönderilemez.
  • Yüzde bazlı sipariş geneli indirim, kalem indirimleri düşüldükten sonraki tutara uygulanır. Yukarıdaki örnekte sipariş geneline "DiscountRate": 10 gönderilseydi indirim 300'ün değil 280'in %10'u, yani 28 TL olurdu.
  • Kaleme uygulanan indirim, kalemin tutarını aşamaz.
  • Menü alt kalemlerine indirim uygulanamaz. Menüye indirim uygulanacaksa menünün kendisine, yani üst kaleme gönderilmelidir (Menü ürünleri).
  • Sipariş geneli indirim sipariş tutarını aşarsa istek reddedilmez; indirim sipariş tutarına eşitlenir ve sipariş 0 olarak kaydedilir. Ancak yukarıdaki formül yine sağlanmalıdır: 200 TL tutarındaki bir siparişe 300 TL değerinde bir kupon uygulanacaksa indirimi sipariş tutarında sınırlayıp Discount: 200, OrderTotal: 0 gönderin.

Siparişte ürünü belirtme

Ürün listesi endpointinden alınan ürün listesini baz alarak, oluşturacağınız siparişlerin ürün detaylarında ProductUnitId veya ProductCode alanlarından yalnızca birini tercih etmeniz gerekir. Siparişteki ürün listesini oluştururken bu alanlardan birini doldurup diğerini null bırakmalı veya hiç göndermemelisiniz.

Menü ürünleri

Sipariş içindeki bir ürün, farklı bir menü altında bulunuyorsa, kendisine ait bir ParentId değeri olmalıdır. Aksi takdirde, ParentId gönderilmemeli veya null olarak belirtilmelidir.

Not: Bir ürünün MenuId ve ParentId değerleri aynı olmamalıdır.

Örnek: Menü İçeren Ürünler

  • Hamburger bir menüdür, bu nedenle kendisine ait bir MenuId değeri vardır.
  • Kola, Hamburger Menüsü altında yer aldığı için ParentId değeri, Hamburger’in MenuId değeri ile aynı olmalıdır.
Menü İçeren Ürünler
"OrderDetails": [
  {
    "Quantity": 1,
    "ProductUnitId": 123,
    "IsMenu": true,
    "MenuId": 1,
    "ParentId": null
  },
  {
    "Quantity": 1,
    "ProductUnitId": 234,
    "IsMenu": false,
    "MenuId": null,
    "ParentId": "1"
  }
]

Örnek: Bağımsız Ürünler

Eğer Kola herhangi bir menüye bağlı değilse, ParentId parametresi gönderilmemelidir.

Bağımsız Ürünler
"OrderDetails": [
  {
    "Quantity": 1,
    "ProductUnitId": 123,
    "IsMenu": false,
    "MenuId": null,
    "ParentId": null
  },
  {
    "Quantity": 1,
    "ProductUnitId": 234,
    "IsMenu": false,
    "MenuId": null,
    "ParentId": null
  }
]

Örnek cevap

Kaydedilen sipariş cevabı
{
  "orderId": 643287,
  "orderTotal": 18.00,
  "discount": 0.00,
  "insertedDate": "2025-09-26T20:21:40.05",
  "status": 100,
  "message": null
}

Cevap parametreleri

Parametre AdıData TipiAçıklama
orderIdNumberSiparişin Adisyo sistemindeki ID'si
orderTotalNumberSiparişin toplam tutarı
discountNumberSiparişte uygulanan toplam indirim tutarı
insertedDateDate ISO 8601Siparişin sisteme kaydedildiği tarih
statusNumberSonuç Kodları
messageStringİşlem sonucu mesajı