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.
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ılmazisimli 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-07olarak 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
iddeğerini bu istekteTableIdolarak göndermelisiniz.TableIdgöndermezseniz sipariş herhangi bir masa ile ilişkilendirilmez.
| Parametre Adı | Data Tipi | Açıklama |
|---|---|---|
CustomerName | String | Siparişi veren müşterinin adı |
CustomerSurname | String | Siparişi veren müşterinin soyadı |
CustomerId | String | Siparişi veren müşterinin sizin sisteminizdeki ID'si (MUS-03) |
CustomerPhone | String | Siparişi veren müşterinin birincil telefon numarası |
CustomerPhone2 | String | Siparişi veren müşterinin ikincil telefon numarası |
Address | String | Siparişi veren müşterinin adresi |
AddressDescription | String | Siparişi veren müşterinin adres tarifi |
Region | String | Siparişi veren müşterinin semt/ilçe adı |
City | String | Siparişi veren müşterinin şehri |
PaymentMethodId | Number | Ödeme Tipi |
PaymentNote | String | Ödeme notu |
Discount | Number | Sipariş geneline uygulanacak indirim tutarı (Siparişe indirim uygulama) |
DiscountRate | Number? | Sipariş geneline uygulanacak indirim oranı (0-100) (Siparişe indirim uygulama) |
DiscountId | Number? | Sipariş geneline uygulanacak tanımlı indirimin ID'si (Siparişe indirim uygulama) |
OrderNote | String | Sipariş notu |
WebOrderId | String | Siparişin sizin sisteminizdeki ID'si (SIP-07) |
OrderTotal | Number | Sipariş toplam tutarı |
TableId | Number? | Gönderilirse sipariş ilgili masaya oluşturulur. Değer olarak Masa listesi dönen masa ID bilgisi kullanılmalıdır. |
DeliveryFee | Number | Teslimat ücreti (Sipariş toplamını hesaplama) |
ServiceCharge | Number | Servis ücreti veya diğer ekstra hizmet ücretleri (Sipariş toplamını hesaplama) |
CustomerLatitude | String? | Müşteri enlem bilgisi (##,####). Masa siparişlerinde zorunlu değildir. |
CustomerLongitude | String? | Müşteri boylam bilgisi (##,####). Masa siparişlerinde zorunlu değildir. |
OrderDetails | Array | Sipariş detaylarının listesi |
[].OrderDetails.ProductUnitId | Number | Ürün birim ID'si (Siparişte ürünü belirtme) |
[].OrderDetails.ProductCode | String | Ürün kodu (Siparişte ürünü belirtme) |
[].OrderDetails.Quantity | Number | Ürün adedi |
[].OrderDetails.OrderDetailNote | String? | Sipariş detayı notu |
[].OrderDetails.DiscountAmount | Number? | Kaleme uygulanacak indirim tutarı (Siparişe indirim uygulama) |
[].OrderDetails.DiscountRate | Number? | Kaleme uygulanacak indirim oranı (0-100) (Siparişe indirim uygulama) |
[].OrderDetails.DiscountId | Number? | Kaleme uygulanacak tanımlı indirimin ID'si (Siparişe indirim uygulama) |
(TODO) [].OrderDetails.Name | String? | Ürün veya menü adı |
[].OrderDetails.IsMenu | Boolean | Menü mü? (Menü ürünleri) |
[].OrderDetails.MenuId | Number? | Menü ID'si (Menü ürünleri) |
[].OrderDetails.ParentId | String? | 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öntem | Sipariş geneli | Kalem | Açıklama |
|---|---|---|---|
| Tutar | Discount | DiscountAmount | Sabit indirim tutarı |
| Yüzde | DiscountRate | DiscountRate | 0-100 arası oran |
| Tanımlı indirim | DiscountId | DiscountId | Adisyo'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 - ServiceChargeToplam indirim, kalem indirimleri ile sipariş geneli indirimin toplamıdır.
{
"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
DiscountIdgönderildiğinde önceliklidir; aynı seviyedekiDiscount/DiscountAmountveDiscountRatedikkate alınmaz.DiscountIdgö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": 10gönderilseydi indirim300'ün değil280'in %10'u, yani28TL 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ş
0olarak 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ıpDiscount: 200,OrderTotal: 0gö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
MenuIdveParentIddeğerleri aynı olmamalıdır.
Örnek: Menü İçeren Ürünler
Hamburgerbir menüdür, bu nedenle kendisine ait birMenuIddeğeri vardır.Kola,Hamburger Menüsüaltında yer aldığı içinParentIddeğeri,Hamburger’in MenuIddeğeri ile aynı olmalıdır.
"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.
"OrderDetails": [
{
"Quantity": 1,
"ProductUnitId": 123,
"IsMenu": false,
"MenuId": null,
"ParentId": null
},
{
"Quantity": 1,
"ProductUnitId": 234,
"IsMenu": false,
"MenuId": null,
"ParentId": null
}
]Örnek cevap
{
"orderId": 643287,
"orderTotal": 18.00,
"discount": 0.00,
"insertedDate": "2025-09-26T20:21:40.05",
"status": 100,
"message": null
}Cevap parametreleri
| Parametre Adı | Data Tipi | Açıklama |
|---|---|---|
orderId | Number | Siparişin Adisyo sistemindeki ID'si |
orderTotal | Number | Siparişin toplam tutarı |
discount | Number | Siparişte uygulanan toplam indirim tutarı |
insertedDate | Date ISO 8601 | Siparişin sisteme kaydedildiği tarih |
status | Number | Sonuç Kodları |
message | String | İşlem sonucu mesajı |