Ana içeriğe geç

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;

  1. Harici sistem, API üzerinden Basket SDK'ya sepet bilgisini gönderir.

  2. 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;

3rd Party SimpraQuick Islem Akisi

ÖKC Ödeme Servisi Akış Şeması

OKC Payment Service Flow

Dikkat

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.

  1. 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.

  2. Ö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.

Basket Open Checks Postman

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 ve Postype bilgileri gönderilmelidir.

basket-payments

  • "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;

PaymentMethodIdAppId/BkmIdİsimÇıktıÖdeme İsmiAçıklama
402GMUCreditCardStandart Fatura Bilgi FişiKredi KartıKredi kartı ödemesi alır. Fatura oluşturur. Bilgi fişi keser.
411GMUCashStandart Fatura Bilgi FişiNakitNakit ödemesi alır. Fatura oluşturur. Bilgi fişi keser.
4216GMUFoodTicketStandart Bilgi FişiYemek KartıFinansal olmayan işlemdir. Sadece bilgi fişi üretilerek çek kapatılır.
4424GMUAcikHesapStandart Fatura Bilgi FişiAçık HesapNakit gibi işlem yapılır. Fatura oluşturulur. Bilgi fişi kesilir.
451005GMUTahsilatCashÖzelNakit TahsilatFinansal olmayan işlem olarak kaydedilir. Ancak ekstra bilgiler alınır ve bilgi fişi farklı üretilir.
461006GMUTahsilatCreditCardÖzelKredi Kartı TahsilatFinansal 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.
4822GMUBankTransferStandart Fatura Bilgi FişiBanka TransferiNakit gibi işlem yapılır. Fatura oluşturulur. Bilgi fişi kesilir.
4916GMUGiftCardStandart Fatura Bilgi FişiHediye ÇekiNakit gibi işlem yapılır. Fatura oluşturulur. Bilgi fişi kesilir.
5018GMUOdemesizStandart Bilgi FişiBilgi FişiFinansal olmayan işlemdir. Sadece bilgi fişi üretilerek çek kapatılır.
511007GMUAvansCashÖzelNakit AvansFinansal olmayan işlem olarak kaydedilir. Ancak ürünler olmadan finansal olmayan özel bir bilgi fişi üretilir.
521008GMUAvansCreditcardÖzelKredi Kartı AvansFinansal olmayan işlem olarak kaydedilir. Kredi kartı ödemesi gibi payment'a gidilir. Nakit avansta olduğu gibi özel bilgi fişi farklı üretilir.
5316GMUIstanbulCardStandart Fatura Bilgi Fişiİstanbul Kartİstanbul Kart ödemesi kredi kartı gibi alınıp Fatura kesilir. Fatura bilgi fişi kesilir.
541001GMUMultinetEntegreStandart Bilgi FişiMultinet EntegreMultinet 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)
}
NOTLAR
  • 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 ve checkNo 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"
}
]
}

EFTPOS Senaryo 1

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
}

EFTPOS Senaryo 2

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"
}
]

EFTPOS Senaryo 3

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"
}
]

EFTPOS Senaryo 4

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"
}
]

EFTPOS Senaryo 5

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"
}
]

EFTPOS Senaryo 6

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"
}
]

EFTPOS Senaryo 7

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"
}
]

EFTPOS Senaryo 8

İ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.