BASKET Entegrasyonu
Basket SDK, harici uygulamalardan oluşturulan hazır sepet bilgilerini alıp GMU sisteminde faturasını oluşturmayı sağlamaktadır. Basket entegrasyonu için 2 farklı yöntem kullanılmaktadır;
Harici sistem, API üzerinden Basket SDK'ya sepet bilgisini gönderir.
Harici sistem, App to App olarak Basket SDK'ya sepet bilgisini gönderir.
Her iki yöntemde de sepet bilgisi hazır olarak benzer formatta iletilmektedir. İsteğe göre, sepetteki ürünlerle birlikte fatura ve ödeme bilgisi de gönderilebilmektedir. Bu durumda sepet üzerinde herhangi bir işlem yapmadan ödeme adımına geçilebilmektedir.
API Entegrasyonu
Ödeme cihazları üzerinde çalışacak olan SimpraQuick uygulamasıyla API üzerinden entegrasyon sağlanabilmektedir.
İşlem Akışı
Entegre olmak isteyen uygulama, Basket API’ye çek detayını gönderir. SimpraQuick uygulaması ile bu çek detayları API’den alınır. Cihaz üzerinde çalışan bankacılık uygulaması ile ödeme işlemi tamamlanır ve hesabın ödeme bilgisi Basket API’ye tekrar gönderilir. Harici uygulama bu ödeme bilgisini Basket API’den alarak işlemlerini tamamlar.
İşlem akışı şeması aşağıdaki gibidir;
ÖKC Ödeme Servisi Akış Şeması
API’ye istek gönderirken aşağıdaki tipte alanlar için şu kurala uyulmalıdır.
- Adet alanları * 1000 (1 adet için 1000)
- Taxrate * 100 (%8 KDV için 800)
- Fiyat * 100 (1 TL için 100)
API İstekleri
Basket API’ye yapılacak istekler POS sisteminin istekleri ve SimpraQuick istekleri olarak 2 grupta toplanabilir. Aşağıda yalnızca POS sistemi tarafından gönderilecek istekler ve cevaplarına yer verilmektedir.
1. Post Check
https://gmubasket-apitest.protel.com.tr/api/open/checks
Bu istek POS sisteminin çek detayını Basket API’ye post etmek için kullanılır. Bu istek bir çek için gönderildiğinde POS sistemi üzerinde bu çek üzerinde işlem yapılmasına izin verilmemelidir.
Aşağıda örnek bir post check isteğini ve parametre açıklamalarını bulabilirsiniz. Örnek istekte invoice alanı boş gönderilmiştir. İstenirse fatura bilgileri de dolu şekilde gönderilebilir. Bu durumda ödeme alındıktan sonra kullanıcı, fatura bilgilerini girmek zorunda kalmadan çeki kapatabilir.
{
"checkTotal": 12000, -> Hesap toplam tutarı (indirim hariç)
"checkSeq": 13716, -> Sistemde unique olan adisyon numarası
"checkNo": 13716, -> Unique olmayan adisyon numarası (CheckSeq ile aynı olabilir)
"rvcId": 1, -> Gelir merkezi numarası
"businessDate": "2024-12-03T20:28:27", -> İş günü tarihi
"saleItems": [
{
"plu": 12345, -> Bu ürünün bağlı olduğu grup için /SyncProduct isteğinde gönderilen PLU numarası
"productName": "Product 1", -> Ürün adı
"Quantity": 1000, -> Adet (X1000 olarak girilmelidir. Örn. 1ad için 1000)
"TotalAmount": 7000, -> Ürünün tutarı (indirimsiz)
"ItemDiscount": 70, -> Ürününe uygulanan indirim
"TaxAmount": 40, -> KDV tutarı
"TaxRate": 2000 -> KDV oranı
},
{
"plu": 34567,
"productName": "Product 2",
"Quantity": 2000,
"TotalAmount": 5000,
"ItemDiscount": 50,
"TaxAmount": 22,
"TaxRate": 1000
}
]
/*
,
"Invoice": {
"InvoiceName": "",
"InvoiceNote": "",
"DiplomatNo": "",
"City": "İstanbul",
"County": "",
"Country": "Türkiye",
"TaxOffice": "",
"CustomerName": "Fatih Çelik",
"CustomerEmail": "fcelik@protel.com.tr",
"Address1": "ABC sokak",
"Address2": "No:32",
"InvoiceType": 2,
"InvoiceDate": "2024-12-03T00:00:00",
"TcKimlikVergiNo": "1234567811",
"InvoiceNo" : ""
}
*/
}
2. Get Payments
Bu servis ile adisyonun ödeme bilgileri alınır. Dönen response’ta indirim için ayrı bir array elemanı dönecektir. Aşağıdaki örnekte ilk array elemanı indirim için, sonrakiler ise ödeme tipleri için dönülmüştür.
https://gmubasket-apitest.protel.com.tr/api/payments/checks/{checkseq}
[
{
"AmountPaid": 0,
"PaymentMethodId": 0,
"Id": 37501,
"ReceiptNo": null,
"ZNo": 0,
"EkuNo": 0,
"FinancialTransactionDate": "2022-06-17T09:49:38.557",
"PaymentTerminalId": null,
"DetailType": "Discount",
"DiscountAmount": 700,
"PaymentDesc": null,
"PaymentInfo": null,
"DiscountOriginType": 4,
"PaymentMethod": "Undefined",
"BankBKMID": null,
"BankTerminalId": null,
"MerchantId": null,
"BatchNumber": null,
"Referencenumber": null,
"AuthorizationCode": null,
"PaymentsubType": null,
"Numberofinstallement": null,
"MaskedPan": null,
"Stannumber": null
},
{
"AmountPaid": 1500,
"PaymentMethodId": 6740,
"Id": 37502,
"ReceiptNo": "12",
"ZNo": 2354,
"EkuNo": 2,
"FinancialTransactionDate": "2020-03-01T20:28:27",
"PaymentTerminalId": "POSFIRMA",
"DetailType": "Payment",
"DiscountAmount": 0,
"PaymentDesc": null,
"PaymentInfo": null,
"DiscountOriginType": 4,
"PaymentMethod": "CreditCard",
"BankBKMID": 67,
"BankTerminalId": null,
"MerchantId": null,
"BatchNumber": null,
"Referencenumber": null,
"AuthorizationCode": "4547678",
"PaymentsubType": null,
"Numberofinstallement": null,
"MaskedPan": null,
"Stannumber": null
},
{
"AmountPaid": 2000,
"PaymentMethodId": 11140,
"Id": 37502,
"ReceiptNo": "12",
"ZNo": 2354,
"EkuNo": 2,
"FinancialTransactionDate": "2020-03-01T20:28:27",
"PaymentTerminalId": "POSFIRMA",
"DetailType": "Payment",
"DiscountAmount": 0,
"PaymentDesc": null,
"PaymentInfo": null,
"DiscountOriginType": 4,
"PaymentMethod": "CreditCard",
"BankBKMID": 111,
"BankTerminalId": null,
"MerchantId": null,
"BatchNumber": null,
"Referencenumber": null,
"AuthorizationCode": "4547678",
"PaymentsubType": null,
"Numberofinstallement": null,
"MaskedPan": null,
"Stannumber": null
},
{
"AmountPaid": 2000,
"PaymentMethodId": 41,
"Id": 37503,
"ReceiptNo": "12",
"ZNo": 2354,
"EkuNo": 2,
"FinancialTransactionDate": "2020-03-01T20:28:27",
"PaymentTerminalId": "POSFIRMA",
"DetailType": "Payment",
"DiscountAmount": 0,
"PaymentDesc": null,
"PaymentInfo": null,
"DiscountOriginType": 4,
"PaymentMethod": "Cash",
"BankBKMID": null,
"BankTerminalId": null,
"MerchantId": null,
"BatchNumber": null,
"Referencenumber": null,
"AuthorizationCode": null,
"PaymentsubType": null,
"Numberofinstallement": null,
"MaskedPan": null,
"Stannumber": null
}
]
3. Withdrawn
Basket API’ye gönderilen bir çekin geri çağrılması, POS sistemi tarafında adisyona yeniden müdahale edilmesine izin verilmesi için kullanılır. Bu isteğin body’sine sadece "Withdrawn" yazmak yeterlidir.
https://gmubasket-apitest.protel.com.tr/api/checks/{checkseq}/status
Ödeme Bilgilerini Okuma Yöntemleri
Cihaz üzerinden ödeme işlemleri tamamlanan hesaba ait ödeme bilgileri için 2 yöntem kullanılabilir.
Get Payments başlığında anlatıldığı gibi API’ye request gönderilerek ödeme bilgileri alınabilir. Ancak bu yöntemle ödeme bilgisini anında almak için sık istek gönderilirse API bu istekleri bloklayacaktır. O yüzden sadece kullanıcı tarafından POS üzerinde bir işlem tetiklendiğinde bu istek gönderilmelidir.
Ödeme bilgilerinin kullanıcı tarafından bir işlem tetiklenmesini beklemeksizin otomatik olarak alınması isteniyorsa o zaman kuyruktan okuma yöntemi kullanılmalıdır. Kuyruk bilgileri aşağıdaki gibidir.
Endpoint=sb://Basket APIsb.servicebus.windows.net/;SharedAccessKeyName=SAP_SimpraPos;SharedAccessKey=StnWVeHLmkT55ANSKsgkeOdjU54AlWYTRLz+77eBWOE=
Topic: Basket API.test
SubScription: Site_{SiteId}
{SiteId} değerini almak için aşağıdaki örnekteki gibi API’ye bir istek gönderilmelidir. Username ve Password bilgileri Protel tarafından işletmeye özel olarak üretilecektir.
https://Basket API.protel.com.tr/api/sites?Username=88888888-4444-4444-4444-200000000001&Password=88888888-4444-4444-4444-200000000001
Bu senaryoda aşağıdaki endpoint’lere gönderilen isteklerde anahtar verilerin doğru gönderilmesi gerekmektedir.
/api/open/checks
- Header’da TerminalId mutlaka gönderilmelidir.
TerminalId bilgisi Simpra Quick uygulamasında Ayarlar>Uygulama Ayarları bölümünden alınabilir.
- Body’de Invoice, SalesItems ve SalesItemizers verileri gönderilmelidir. Request örneği aşağıdaki gibidir.
{
"WsNo": 4052,
"EmpNo": 3175,
"CheckTotal": 3150,
"CheckSeq": 1213,
"RvcId": 1,
"BusinessDate": "2022-09-30T16:05:21.837+03:00",
"TableNo": "",
"CheckNo": 1213,
"CheckName": "",
"Invoice": {
"InvoiceName": "",
"InvoiceNote": "",
"DiplomatNo": "",
"City": "İstanbul",
"County": "",
"Country": "Türkiye",
"TaxOffice": "",
"CustomerName": "Fatih Çelik",
"CustomerEmail": "fcelik@protel.com.tr",
"Address1": "ABC sokak",
"Address2": "No:32",
"InvoiceType": 2,
"InvoiceDate": "2022-09-29T22:52:17.662754+03:00",
"TcKimlikVergiNo": "1234567890"
},
"SaleItems": [
{
"PLU": 2,
"Title": "Espresso",
"ProductName": "Espresso",
"Quantity": 1000,
"TotalAmount": 350,
"ItemDiscount": 35,
"TaxAmount": 26,
"TaxRate": 800,
"SalesItemizerSeq": 5
},
{
"PLU": 2,
"Title": "Americano",
"ProductName": "Americano",
"Quantity": 1000,
"TotalAmount": 400,
"ItemDiscount": 40,
"TaxAmount": 30,
"TaxRate": 800,
"SalesItemizerSeq": 5
},
{
"PLU": 1,
"Title": "Hamburger",
"ProductName": "Hamburger",
"Quantity": 2000,
"TotalAmount": 2400,
// "ItemDiscount": 240,
"TaxAmount": 366,
"TaxRate": 1800,
"SalesItemizerSeq": 1
}
],
"SalesItemizers": [
{
"SalesItemizerSeq": 1,
"Index": 0,
"Type": 0,
"Name": "Yiyecek (%18)",
"Percantage": 1800
},
{
"SalesItemizerSeq": 2,
"Index": 0,
"Type": 0,
"Name": "Yiyecek (%8)",
"Percantage": 800
},
{
"SalesItemizerSeq": 3,
"Index": 0,
"Type": 0,
"Name": "Yiyecek (%1)",
"Percantage": 100
},
{
"SalesItemizerSeq": 4,
"Index": 0,
"Type": 0,
"Name": "İçecek (%18)",
"Percantage": 1800
},
{
"SalesItemizerSeq": 5,
"Index": 0,
"Type": 0,
"Name": "İçecek (%8)",
"Percantage": 800
},
{
"SalesItemizerSeq": 6,
"Index": 0,
"Type": 0,
"Name": "İçecek (%1)",
"Percantage": 100
},
{
"SalesItemizerSeq": 7,
"Index": 0,
"Type": 0,
"Name": "Servis Ücreti (%18)",
"Percantage": 1800
},
{
"SalesItemizerSeq": 8,
"Index": 0,
"Type": 0,
"Name": "%4 (%4)",
"Percantage": 400
}
]
}
Hızlı Servis Kullanımı (GMP3 benzeri kullanım)
/api/checks/{CheckSeq}/payments
- /api/open/checks isteğinin ardından /payments isteği gönderilmelidir.
- Header’da
TerminalId
vePostype
bilgileri gönderilmelidir.
"AmountPaid":
değeri gönderilmelidir."DetailType":"InCompletePayment"
olarak gönderilmelidir."PaymentMethodId":
değeri gönderilmelidir."FinancialTransactionDate":
değeri gönderilmelidir."bkmId":
değeri gönderilmelidir.
Request aşağıdaki gibi olmalıdır;
[
{
"AmountPaid": 12000,
"DetailType":"IncompletePayment",
"PaymentMethodId":41,
"FinancialTransactionDate":"2024-12-03T16:28:27"
"BankBKMID" : "1"
}
]
Ödeme isteğinde gönderilecek bilgiler ve açıklamaları aşağıdaki tabloda belirtilmiştir;
PaymentMethodId | AppId/BkmId | İsim | Çıktı | Ödeme İsmi | Açıklama |
---|---|---|---|---|---|
40 | 2 | GMUCreditCard | Standart Fatura Bilgi Fişi | Kredi Kartı | Kredi kartı ödemesi alır. Fatura oluşturur. Bilgi fişi keser. |
41 | 1 | GMUCash | Standart Fatura Bilgi Fişi | Nakit | Nakit ödemesi alır. Fatura oluşturur. Bilgi fişi keser. |
42 | 16 | GMUFoodTicket | Standart Bilgi Fişi | Yemek Kartı | Finansal olmayan işlemdir. Sadece bilgi fişi üretilerek çek kapatılır. |
44 | 24 | GMUAcikHesap | Standart Fatura Bilgi Fişi | Açık Hesap | Nakit gibi işlem yapılır. Fatura oluşturulur. Bilgi fişi kesilir. |
45 | 1005 | GMUTahsilatCash | Özel | Nakit Tahsilat | Finansal olmayan işlem olarak kaydedilir. Ancak ekstra bilgiler alınır ve bilgi fişi farklı üretilir. |
46 | 1006 | GMUTahsilatCreditCard | Özel | Kredi Kartı Tahsilat | Finansal olmayan işlem olarak kaydedilir. Kredi kartı ödemesi gibi payment'a gidilir. Nakit tahsilatta olduğu gibi ekstra bilgiler alınır ve bilgi fişi farklı üretilir. |
48 | 22 | GMUBankTransfer | Standart Fatura Bilgi Fişi | Banka Transferi | Nakit gibi işlem yapılır. Fatura oluşturulur. Bilgi fişi kesilir. |
49 | 16 | GMUGiftCard | Standart Fatura Bilgi Fişi | Hediye Çeki | Nakit gibi işlem yapılır. Fatura oluşturulur. Bilgi fişi kesilir. |
50 | 18 | GMUOdemesiz | Standart Bilgi Fişi | Bilgi Fişi | Finansal olmayan işlemdir. Sadece bilgi fişi üretilerek çek kapatılır. |
51 | 1007 | GMUAvansCash | Özel | Nakit Avans | Finansal olmayan işlem olarak kaydedilir. Ancak ürünler olmadan finansal olmayan özel bir bilgi fişi üretilir. |
52 | 1008 | GMUAvansCreditcard | Özel | Kredi Kartı Avans | Finansal olmayan işlem olarak kaydedilir. Kredi kartı ödemesi gibi payment'a gidilir. Nakit avansta olduğu gibi özel bilgi fişi farklı üretilir. |
53 | 16 | GMUIstanbulCard | Standart Fatura Bilgi Fişi | İstanbul Kart | İstanbul Kart ödemesi kredi kartı gibi alınıp Fatura kesilir. Fatura bilgi fişi kesilir. |
54 | 1001 | GMUMultinetEntegre | Standart Bilgi Fişi | Multinet Entegre | Multinet sisteminden yapılan ödeme tahsil edilir ve bilgi fişi basılır. Ödeme bilgileri fiş altına basılır. |
Sorun Giderme
/checks/{CheckSeq}
isteğinde “No Content” dönüyor ise bu, çek için ödeme olmadığı anlamına gelmektedir. SimpraQuick ile ödeme alındığında detaylar gelecektir.
App to App Entegrasyon
Simpra Quick uygulaması içinde yer alan sepet modülü, başka bir Android uygulaması tarafından Intent Action kullanılarak tetiklenebilmektedir. Sepet modülünde yer alan tüm akışlar External Check kullanılarak veya kullanılmayarak Simpra Quick üzerinden başlatılabilmektedir. Aşağıdaki başlıklarda Intent Action'ın ne şekilde kullanılması gerektiği ile ilgili detaylar belirtilmiştir.
Intent Action
Action name: com.simpra.START_BASKET_PROCESS
Intent action, Simpra Quick tarafındaki sepet akışını başlatmaktadır.
Intent Extra
Key: target_package_name_for_result
Intent extra olarak paket adını göndermeniz gerekmektedir.
Key: external_check
İhtiyaç dahilinde, JSON formatında opsiyonel şekilde External Check içeren bir intent extra gönderilebilir. External Check olmadan da intent tetiklenebilmektedir.
Intent Flags
Intent action başlatılırken aşağıdaki flagler dahil edilmelidir;
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TASK
Intent Tetikleme
1. External Check Olmadan Intent Başlatma
Herhangi ekstra bir data göndermeden (External Check akışına girmeden) Simpra Quick’i başlatmak için aşağıdaki kodu kullanabilirsiniz;
val intent = Intent("com.simpra.START_BASKET_PROCESS").apply {
putExtra(
"target_package_name_for_result",
"YOUR.PACKAGE.NAME" //applicationContext.packageName
)
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
}
startActivity(intent)
2. External Check ile Intent Başlatma
Ekstra data göndererek (External Check akışına girerek) Simpra Quick’i başlatmak için intent aksiyonu JSON formatına çevrilip, external_check
key’i kullanılarak gönderilmelidir.
JSON Formatı
Gönderilmesi gereken örnek JSON nesnesi aşağıdaki gibidir;
{
"checkTotal": 50,
"checkSeq": 654345,
"rvcId": 1001,
"businessDate": "2024-10-19T15:08:42",
"checkNo": 7899822,
"passInvoiceScreen": false,
"saleItems": [
{
"plu": 12345,
"productName": "Product 1",
"quantity": 2000,
"totalAmount": 200,
"taxAmount": 200,
"taxRate": 100,
"itemDiscount": 20
},
{
"plu": 67890,
"productName": "Product 2",
"quantity": 1000,
"totalAmount": 300,
"taxAmount": 300,
"taxRate": 100,
"itemDiscount": 30
}
],
"invoice": {
"tcKimlikVergiNo": "11111111111",
"invoiceNote": "Test",
"country": "Country",
"county": "County",
"customerName": "Batuhan Coşkun",
"customerEmail": "bcoskun@protel.com.tr",
"phoneNumber": "905555555555"
},
"payments": [
{
"amountPaid": 2.5,
"paymentMethodId": "40",
"bankBkmId": "2",
"paymentTerminalId": "f4f9c0f6de92c445",
"detailType": "INCOMPLETE_PAYMENT"
},
{
"amountPaid": 1.5,
"paymentMethodId": "51",
"bankBkmId": "1007",
"paymentTerminalId": "f4f9c0f6de92c445",
"detailType": "INCOMPLETE_PAYMENT"
},
{
"amountPaid": 0.5,
"paymentMethodId": "50",
"bankBkmId": "18",
"paymentTerminalId": "f4f9c0f6de92c445",
"detailType": "INCOMPLETE_PAYMENT"
},
{
"paymentMethodId": "0",
"discountAmount": 0.5,
"paymentTerminalId": "f4f9c0f6de92c445",
"detailType": "DISCOUNT"
}
]
}
External Check göndermek için örnek kod;
val externalCheckJsonString = …
val intent = Intent("com.simpra.START_BASKET_PROCESS").apply {
putExtra(
"target_package_name_for_result",
"YOUR.PACKAGE.NAME" //applicationContext.packageName
)
putExtra("external_check", externalCheckJsonString)
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
}
startActivity(intent)
Intent Sonucunu Dinleme
Akış tamamlandıktan sonra Simpra Quick aşağıdaki sonuçları key değeri olarak dönmektedir;
is_process_successful: Quick akışının başarılı veya başarısız olduğunu dönmektedir.
check_detail: Başarılı veya başarısız akıştaki çek detayını dönmektedir.
invoice_detail: Başarılı akıştaki fatura detayını dönmektedir.
Sonuç Dinleme Adımları
1- Broadcast Receiver Tanımlama
val simpraQuickProcessResultReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val isProcessSuccessful = intent.getBooleanExtra(
"is_process_successful",
false
)
val checkDetail = intent.getStringExtra("check_detail")
val invoiceDetail = intent.getStringExtra("invoice_detail")
if (isProcessSuccessful) {
Toast.makeText(context, "Process succeeded!", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(context, "Process failed!", Toast.LENGTH_SHORT).show()
}
//result geldikten sonra receiver unregister edilir.
unregisterReceiver(simpraQuickProcessResultReceiver)
}
}
2- Broadcast Receiver Register Etme
val filter = IntentFilter("com.simpra.BASKET_PROCESS_RESULT")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
// Android 12 (API 31) ve üstü cihazlar için güvenlik sebebiyle RECEIVER_EXPORTED eklenmelidir.
registerReceiver(simpraQuickProcessResultReceiver, filter, RECEIVER_EXPORTED)
} else {
registerReceiver(simpraQuickProcessResultReceiver, filter)
}
3- Broadcast Receiver Unregister Etme
override fun onDestroy() {
super.onDestroy()
unregisterReceiver(simpraQuickProcessResultReceiver)
}
- Opsiyonel Intent Extra:
external_check
gönderimi opsiyoneldir. Ekstra data gönderilmesine gerek yok ise, External check olmadan intent başlatma akışı kullanılmaldır. - JSON Format:
external_check
gönderilirken, datanın JSON string formatında olduğundan emin olunmalıdır. - Unique Tanımlayıcılar:
checkSeq
vecheckNo
alanları unique değer olmalıdır.
EFTPOS Örnek Senaryolar
Senaryo 1
2 Ürün ile Sadece EFTPOS Gönderme
https://gmubasket-apitest.protel.com.tr/api/open/checks
{
"CheckTotal": 32500,
"CheckSeq": 345733,
"RvcId": 1,
"BusinessDate": "2025-02-08T08:33:23.099Z",
"CheckNo": 848911,
"SaleItems": [
{
"PLU": 12345,
"TotalAmount": 12500,
"TaxAmount": 1136,
"TaxRate": 1000,
"Quantity": 2000,
"ProductName": "Ürün 1"
},
{
"PLU": 56789,
"TotalAmount": 20000,
"TaxAmount": 3333,
"TaxRate": 2000,
"Quantity": 1000,
"ProductName": "Ürün 2"
}
]
}
Senaryo 2
3 Ürün, 1 Tanesi KG'lı ve İndirim Sadece EFTPOS Gönderme
https://gmubasket-apitest.protel.com.tr/api/open/checks
{
"CheckTotal": 74250,
"CheckSeq": 39575,
"RvcId": 1,
"BusinessDate": "2025-02-08T08:33:23.099Z",
"CheckNo": 11795,
"SaleItems": [
{
"PLU": 12345,
"TotalAmount": 12500,
"TaxAmount": 1136,
"TaxRate": 1000,
"Quantity": 2000,
"ItemDiscount": 1250,
"ProductName": "Ürün 1"
},
{
"PLU": 56789,
"TotalAmount": 20000,
"TaxAmount": 3333,
"TaxRate": 2000,
"Quantity": 1000,
"ItemDiscount": 2000,
"ProductName": "Ürün 2"
},
{
"PLU": 73833,
"TotalAmount": 50000,
"TaxAmount": 4545,
"TaxRate": 1000,
"Quantity": 1000,
"ItemDiscount": 5000,
"ProductName": "Ürün 3"
}
],
"DiscountAmount": 8250
}
Senaryo 3
2 Ürün, Nakit Ödeme - E-arşiv Fatura Bilgileriyle Hızlı Servis
https://gmubasket-apitest.protel.com.tr/api/open/checks
{
"CheckTotal": 32500,
"CheckSeq": 34544,
"RvcId": 1,
"BusinessDate": "2025-02-08T08:33:23.099Z",
"CheckNo": 84866,
"Invoice": {
"InvoiceType": 2,
"InvoiceDate": "2025-02-08T08:37:07.433Z",
"TcKimlikVergiNo": "22224536378",
"City": "Ankara",
"Country": "TÜRKİYE",
"TaxOffice": "Beşiktaş Vergi Dairesi Müdürlüğü",
"CustomerName": "Efe Çetin",
"CustomerEmail": "ecetin@protel.com.tr"
},
"SaleItems": [
{
"PLU": 12345,
"TotalAmount": 12500,
"TaxAmount": 1136,
"TaxRate": 1000,
"Quantity": 2000,
"ProductName": "Ürün 1"
},
{
"PLU": 56789,
"TotalAmount": 20000,
"TaxAmount": 3333,
"TaxRate": 2000,
"Quantity": 1000,
"ProductName": "Ürün 2"
}
]
}
https://gmubasket-apitest.protel.com.tr/api/checks/{checkSeq}/payments
[
{
"AmountPaid": 32500,
"DetailType":"InCompletePayment",
"PaymentMethodId":41,
"FinancialTransactionDate":"2025-02-08T08:33:23.099Z",
"BankBKMID" : "1"
}
]
Senaryo 4
2 Ürün, Kredi Kartı - E-fatura Fatura Bilgileriyle Hızlı Servis
https://gmubasket-apitest.protel.com.tr/api/open/checks
{
"CheckTotal": 32500,
"CheckSeq": 345226,
"RvcId": 1,
"BusinessDate": "2025-02-08T08:33:23.099Z",
"CheckNo": 848226,
"Invoice": {
"InvoiceType": 1,
"InvoiceDate": "2025-02-08T08:37:07.433Z",
"TcKimlikVergiNo": "7330354914",
"City": "İstanbul",
"Country": "TÜRKİYE",
"County": "Beşiktaş",
"TaxOffice": "Beşiktaş Vergi Dairesi Müdürlüğü",
"CustomerName": "PROTEL BSLGSSAYAR ANONSM",
"CustomerEmail": "ecetin@protel.com.tr",
"Address1": "Beşiktaş",
"Address2": "Beşiktaş",
"CustomerAlias": "urn:mail:defaultpk@protel.com"
},
"SaleItems": [
{
"PLU": 12345,
"TotalAmount": 12500,
"TaxAmount": 1136,
"TaxRate": 1000,
"Quantity": 2000,
"ProductName": "Ürün 1"
},
{
"PLU": 56789,
"TotalAmount": 20000,
"TaxAmount": 3333,
"TaxRate": 2000,
"Quantity": 1000,
"ProductName": "Ürün 2"
}
]
}
https://gmubasket-apitest.protel.com.tr/api/checks/{checkSeq}/payments
[
{
"AmountPaid": 32500,
"DetailType":"InCompletePayment",
"PaymentMethodId":40,
"FinancialTransactionDate":"2025-02-08T08:33:23.099Z",
"BankBKMID" : "2"
}
]
Senaryo 5
2 Ürün, Sadece Bilgi Fişi Yemek Kartı - Hızlı Servis
https://gmubasket-apitest.protel.com.tr/api/open/checks
{
"CheckTotal": 32500,
"CheckSeq": 34333,
"RvcId": 1,
"BusinessDate": "2025-02-08T08:33:23.099Z",
"CheckNo": 84833,
"SaleItems": [
{
"PLU": 12345,
"TotalAmount": 12500,
"TaxAmount": 1136,
"TaxRate": 1000,
"Quantity": 2000,
"ProductName": "Ürün 1"
},
{
"PLU": 56789,
"TotalAmount": 20000,
"TaxAmount": 3333,
"TaxRate": 2000,
"Quantity": 1000,
"ProductName": "Ürün 2"
}
]
}
https://gmubasket-apitest.protel.com.tr/api/checks/{checkSeq}/payments
[
{
"AmountPaid": 32500,
"DetailType":"InCompletePayment",
"PaymentMethodId":42,
"FinancialTransactionDate":"2025-02-08T08:33:23.099Z",
"BankBKMID" : "16"
}
]
Senaryo 6
3 Ürün, 1 Tanesi KG'lı ve İndirim, Hızlı Servis E-arşiv, Nakit Kredi Kartı Birlikte
https://gmubasket-apitest.protel.com.tr/api/open/checks
{
"CheckTotal": 74250,
"CheckSeq": 32775,
"RvcId": 1,
"BusinessDate": "2025-02-08T08:33:23.099Z",
"CheckNo": 98655,
"SaleItems": [
{
"PLU": 12345,
"TotalAmount": 12500,
"TaxAmount": 1136,
"TaxRate": 1000,
"Quantity": 2000,
"ItemDiscount": 1250,
"ProductName": "Ürün 1"
},
{
"PLU": 56789,
"TotalAmount": 20000,
"TaxAmount": 3333,
"TaxRate": 2000,
"Quantity": 1000,
"ItemDiscount": 2000,
"ProductName": "Ürün 2"
},
{
"PLU": 73833,
"TotalAmount": 50000,
"TaxAmount": 4545,
"TaxRate": 1000,
"Quantity": 1000,
"ItemDiscount": 5000,
"ProductName": "Ürün 3"
}
],
"DiscountAmount": 8250
}
https://gmubasket-apitest.protel.com.tr/api/checks/{checkSeq}/payments
[
{
"AmountPaid": 40000,
"DetailType":"InCompletePayment",
"PaymentMethodId":41,
"FinancialTransactionDate":"2025-02-08T08:33:23.099Z",
"BankBKMID" : "1"
},
{
"AmountPaid": 34250,
"DetailType":"InCompletePayment",
"PaymentMethodId":40,
"FinancialTransactionDate":"2025-02-08T08:33:23.099Z",
"BankBKMID" : "2"
}
]
Senaryo 7
2 Ürün, Tevkifat, Kredi Kartı Hızlı Servis - E-fatura
https://gmubasket-apitest.protel.com.tr/api/open/checks
{
"CheckTotal": 3026516,
"CheckSeq": 343517,
"RvcId": 1,
"BusinessDate": "2025-02-08T08:33:23.099Z",
"CheckNo": 848327,
"Invoice": {
"InvoiceType": 1,
"InvoiceDate": "2025-02-08T08:37:07.433Z",
"TcKimlikVergiNo": "7330354914",
"City": "İstanbul",
"Country": "TÜRKİYE",
"County": "Beşiktaş",
"TaxOffice": "Beşiktaş Vergi Dairesi Müdürlüğü",
"CustomerName": "PROTEL BSLGSSAYAR ANONSM",
"CustomerEmail": "ecetin@protel.com.tr",
"Address1": "Beşiktaş",
"Address2": "Beşiktaş",
"CustomerAlias": "urn:mail:defaultpk@protel.com",
"WithholdingTaxCode": "604"
},
"SaleItems": [
{
"PLU": 12345,
"TotalAmount": 1250000,
"TaxAmount": 56818,
"TaxRate": 1000,
"Quantity": 2000,
"WithholdingTax": 56818,
"ProductName": "Ürün 1"
},
{
"PLU": 56789,
"TotalAmount": 2000000,
"TaxAmount": 166666,
"TaxRate": 2000,
"Quantity": 1000,
"WithholdingTax": 166666,
"ProductName": "Ürün 2"
}
]
}
https://gmubasket-apitest.protel.com.tr/api/checks/{checkSeq}/payments
[
{
"AmountPaid": 3026516,
"DetailType":"InCompletePayment",
"PaymentMethodId":40,
"FinancialTransactionDate":"2025-02-08T08:33:23.099Z",
"BankBKMID" : "2"
}
]
Senaryo 8
2 Ürün, Footer Bilgi, Avans Kredi Kartı Hızlı Servis
https://gmubasket-apitest.protel.com.tr/api/open/checks
{
"CheckTotal": 32500,
"CheckSeq": 345754,
"RvcId": 1,
"BusinessDate": "2025-02-08T08:33:23.099Z",
"CheckNo": 84877,
"SlipFooters": [
"PostmanDeneme"
],
"SaleItems": [
{
"PLU": 12345,
"TotalAmount": 12500,
"TaxAmount": 1136,
"TaxRate": 1000,
"Quantity": 2000,
"ProductName": "Ürün 1"
},
{
"PLU": 56789,
"TotalAmount": 20000,
"TaxAmount": 3333,
"TaxRate": 2000,
"Quantity": 1000,
"ProductName": "Ürün 2"
}
]
}
https://gmubasket-apitest.protel.com.tr/api/checks/{checkSeq}/payments
[
{
"AmountPaid": 32500,
"DetailType":"InCompletePayment",
"PaymentMethodId":52,
"FinancialTransactionDate":"2025-02-08T08:33:23.099Z",
"BankBKMID" : "1008"
}
]
İade Senaryosu
https://gmubasket-apitest.protel.com.tr/api/open/checks
{
"CheckTotal": 32500,
"CheckSeq": 211633,
"RvcId": 1,
"BusinessDate": "2025-02-08T08:33:23.099Z",
"CheckNo": 44531,
"SaleItems": [
{
"PLU": 12345,
"TotalAmount": 12500,
"TaxAmount": 1136,
"TaxRate": 1000,
"Quantity": 2000,
"ProductName": "Ürün 1"
},
{
"PLU": 56789,
"TotalAmount": 20000,
"TaxAmount": 3333,
"TaxRate": 2000,
"Quantity": 1000,
"ProductName": "Ürün 2"
}
]
}
Uygulamadan Ödeme alınır. Ödeme alındıktan sonra aşağıdaki istekler ile devam edilir.
https://gmubasket-apitest.protel.com.tr/api/checks/checkSeq/status
Body---> "Closed"
https://gmubasket-apitest.protel.com.tr/api/open/checks
{
"CheckTotal": 32500,
"CheckSeq": 211633,
"RvcId": 1,
"BusinessDate": "2025-02-08T08:33:23.099Z",
"CheckNo": 44531,
"TransactionType":2,
"SaleItems": [
{
"PLU": 12345,
"TotalAmount": 12500,
"TaxAmount": 1136,
"TaxRate": 1000,
"Quantity": 2000,
"ProductName": "Ürün 1"
},
{
"PLU": 56789,
"TotalAmount": 20000,
"TaxAmount": 3333,
"TaxRate": 2000,
"Quantity": 1000,
"ProductName": "Ürün 2"
}
]
}
Son istekten sonra uygulamadaki çek listesinde ilgili çekin "İade Alınacak" yazısıyla listelendiği görülür.