Token Developer Portal
Token AI Support
X Platform - Entegrasyon
X Platform - Entegrasyon
  • Token X Entegrasyon
  • Welcome
  • İş Akışları & Hazır Sepetler
  • Token X Connect (Wire)
    • Hızlı Başlangıç
    • Genel Tanıtım
    • Geliştirici Dokümanı
    • Örnek Uygulamalar
    • Sık Sorulan Sorular
    • Cihaz Bilgilendirme
    • Protokol Bilgileri
    • Sorun Tespit Aracı
  • Token X Connect (Cloud)
    • Genel Tanıtım (TR)
    • Geliştirici Dokümanı (TR)
    • TokenX API Integration (EN)
    • Automation Software Simulator
    • Sık Sorulan Sorular
  • Changelog
    • TokenX Connect
    • Backend
  • DESTEK
    • Geliştirici Destek
  • Test
    • Test Sürecimiz
  • APPSTORE
    • Tanıtım
Powered by GitBook
On this page
  • Kendi Yazılımınız ile Token integration Hub DLL'i Entegre Edin
  • C# .NET Forms App Örneği
  • Adım 1: Yeni Bir Proje Açın
  • Adım 2: Sağladığımız IntegrationHub Kütüphanesini Projeye Ekleyin
  • Adım 3 (Opsiyonel): Yardımcı Json Classlarımızı ve Json Kütüphanesini Ekleyin
  • Adım 4: Communication Objesinin Oluşturulması
  • Adım 5: Sepet Objesi ve Callbackleri Ayarlamak
  • Integration Hub API C# Dokümanı
  • USB Üzerinden Seri Haberleşme İçin Communication Objesi
  • ÖKC Bağlantısı
  • Cihaz durumundaki değişiklikleri dinlemek
  • Bağlı cihaz tipinin alınması
  • ÖKC'den kısımları (KDV'leri, departmanları) nasıl çekebilirim?
  • Protokolün İletişim Fonksiyonları
  • ÖKC'ye Sepet Yollamak
  • ÖKC' ye Ödeme Yollamak
  • ÖKC'den Gelen Paketleri Dinlemek
  • serialInCallback'te Hangi Veri Tipleri Gelir?
  • Satış Bilgilerini Dinlemek
  • İletişimin Kod Üzerinden Olarak Kontrol Edilmesi
  • JSON Açıklamaları
  • Sepet JSON'ı
  • Sepete nasıl ürün eklerim?
  • Items Objesi
  • Sepete ödeme nasıl eklerim?
  • PaymentItems Objesi
  • Ödeme Tipleri
  • Hangi satış tipleri kullanabilirim?
  • Sepete müşteri bilgileri nasıl eklerim?
  • CustomerInfo Objesi
  • Sepete veya ürüne nasıl indirim artırım ekleyebilirim?
  • Adjust Objesi
  • Fiscal Bilgisi JSON'ı
  • Plus Objesi
  • Section Objesi
  • Satış Durumu JSON'ı
  • Belirli Banka ve Yemek Kartı Uygulamalarına Yönlendirme
  1. Token X Connect (Wire)

Geliştirici Dokümanı

Bu doküman geliştiriciler için adım adım Token Integration Hub Protokolüne nasıl entegre olunacağını anlatır.

PreviousGenel TanıtımNextÖrnek Uygulamalar

Last updated 13 days ago

Kendi Yazılımınız ile Token integration Hub DLL'i Entegre Edin

C# .NET Forms App Örneği

Adım 1: Yeni Bir Proje Açın

Adım 2: Sağladığımız IntegrationHub Kütüphanesini Projeye Ekleyin

  • “Add Reference…” butonuna tıklayın.

  • “IntegrationHub.dll” adlı dosyayı seçip OK tuşuna basın.

  • Bu aşamalardan sonra kod içinde IntegrationHub kütüphanesini kullanabilirsiniz:

    using IntegrationHub;
    public static IntegrationHub.POSCommunication communication = IntegrationHub.POSCommunication.getInstance("Firma İsmi");

Adım 3 (Opsiyonel): Yardımcı Json Classlarımızı ve Json Kütüphanesini Ekleyin

Bu kısım isteğe bağlıdır, ancak önerilmektedir; çünkü JSON oluşturacak ve ayrıştıracaksınız. Sağladığımız sınıflar ve kütüphaneler, bunu yapmanızı kolaylaştıracaktır. Bu dokuman, bu adımı tamamlamışsınız gibi devam edecektir. Kendi JSON dönüştürme sistemlerinizi yazmak isterseniz, bunu yapmaktan çekinmeyin; ancak bu dokumanla ilerlemek zorlaşabilir.

  • Newtonsoft.Json paketini NuGet ile indirin

  • Projenize, şablon dosyalarında sağlanan Basket.cs, FiscalInfo.cs ve ReceiptInfo.cs sınıflarını ekleyin.

Adım 4: Communication Objesinin Oluşturulması

Communication nesnesini, uygulama genelinde erişilebilir olmasını sağlamak için Program sınıfı kapsamında bir singleton olarak başlatın. İletişimin uygulama başlayınca hemen başlamasını istemiyorsanız Objeyi bir buton yardımı ile kullanıcı butona basınca oluşturabilirsiniz.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TokenDotNet
{
    internal static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        /// 
				
        public static IntegrationHub.POSCommunication communication = IntegrationHub.POSCommunication.getInstance("Firma İsmi");

        [STAThread]
        static void Main()
        {

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Application.Run(new MainForm());
        }
    }
}

Adım 5: Sepet Objesi ve Callbackleri Ayarlamak

Cihaz durumu ve seri iletişimi yönetmek için callback'leri ayarlayın ve sepet nesnesini ana formun içinde bir üye değişkeni olarak ayarlayın. Aşağıdaki kod parçası, şablon projedeki kodun basitleştirilmiş bir versiyonudur.

namespace TokenDotNet
{
    public partial class MainForm : Form
    {
        private Basket basket;
        private IntegrationHub.POSCommunication communication = Program.communication;

	public void deviceStateCallback(bool isConnected, string id)
	{
	    Control.CheckForIllegalCrossThreadCalls = false;
	    if (isConnected)
	    {
	        //Device connect
	    }
	    else
	    {
	       //Device disconnect
	    }
	}
			
	public int serialInCallback(int type, string value) {
	    //Do what you want with the data which is passed as type,value pair. 
	    //Types can be found in documentation. 
	    return 1;
	}
        
        private void setUpCallbacks()
        {
            communication.setDeviceStateCallback(deviceStateCallback);
            communication.setSerialInCallback(serialInCallback);
        }
        
        public MainForm()
        {
            InitializeComponent();

						//init callbacks non-blocking way
            Thread thread = new Thread(setUpCallbacks);
            thread.Start();

						//create basket
            basket = new Basket();
            basket.basketID = "93ced0be-99f5-4e42-b0ca-bc781c778d69";
            basket.createInvoice = false;
            basket.documentType = 0;
            basket.isVoid = false;
        }
        
        private void clearBasket()
        {
            basket = new Basket();
        }
        
        private FiscalInfo constructFiscalInfoFromJson(string json)
        {
            return JsonConvert.DeserializeObject<FiscalInfo>(json);
        }
        private ReceiptInfo constructReceiptInfoFromJson(string json)
        {
            return JsonConvert.DeserializeObject<ReceiptInfo>(json);
        }

        private string constructJsonFromBasket(Basket basket)
        {
            return JsonConvert.SerializeObject(basket, Formatting.Indented);
        }
        
        private void sendBasketToPOS()
        {
            int basketStatus = communication.sendBasket(constructJsonFromBasket(basket));
	}
    }
}

Integration Hub API C# Dokümanı

USB Üzerinden Seri Haberleşme İçin Communication Objesi

Communication, kodunuz ile Android ÖKC cihazı arasında Integration Hub API'sini kullanarak iletişimi kolaylaştıran bir objedir. İletişimi başlatmak için öncelikle bu nesneyi oluşturmalısınız. Bu nesne oluştuktan sonra arka planda DLL bağlanmış olacak ve dokumanın ileri kısımlarında anlatıldığı gibi cihaz bağlanması veya bağlantı kopması durumlarında sizi callback mekanizması ile bilgilendiriyor olacak. Detaylı kullanım için Token Template Simulator uygulamasının kaynak kodlarına bakabilirsiniz.

//Init the communication object using Instance of it.
public static IntegrationHub.POSCommunication communication = IntegrationHub.POSCommunication.getInstance("Firma İsmi");

ÖKC Bağlantısı

Cihaz durumundaki değişiklikleri dinlemek

  • Cihaz durumlarındaki değişiklikleri dinlemek için setDeviceStateCallback() komutunu kullanın. Bu callback, yeni bir cihaz bağlandığında veya mevcut cihaz bağlantısı kesildiğinde yürütülecektir.

  • isConnected parametresi, callbackin bir cihaz bağlantısı mı yoksa bağlantı kesilmesi mi olduğunu temsil eder. True değeri, bir cihazın bağlı olduğu anlamına gelir; false değeri ise bir cihazın bağlantısının kesildiğini gösterir.

  • id cihazın mali numara bilgisini döndürür.

Bu fonksiyon, senkron olarak çalışan getDeviceInfo()'u çağırdığı için ana program akışınızı engelleyebilir. Kullanırken dikkatli olun, ana programınızın engellenmemesi için thread'ler veya diğer yapılar kullanın. Optimal bir durumda çalıştırılması çok az zaman alır, ancak sorunlara yol açabilir.

isConnected true geldiğinde kısımları çekmek zorunludur. Fiscal bilgileri alınmadan satış işlemlerine başlamayın.

//Signature of the function
public delegate void DeviceStateCallback(bool isDeviceConnected, string id);

public void deviceStateCallback(bool isConnected, string id)
{
    Control.CheckForIllegalCrossThreadCalls = false;
    if (isConnected)
    {
        //Device connected
        string fiscalInfo = communication.getFiscalInfo();
    }
    else
    {
       //Device disconnected
    }
}

communication.setDeviceStateCallback(deviceStateCallback);

Bağlı cihaz tipinin alınması

  • IntegrationHub.dll hem X30 TR hem de 300 TR ile uyumlu çalışmaktadır. Anlık olarak hangi cihazın bağlı olduğunu anlamak için getActiveDeviceIndex komutunu kullanabilirsiniz. Device state callback ile bağlantının sağlandığına emin olduktan sonra bu komutu çağırdığınızda X30 TR için 0, 300 TR için ise 1 değerini dönecektir.

ÖKC'den kısımları (KDV'leri, departmanları) nasıl çekebilirim?

Fiscal bilgilerini almak protokolü kullanmak için zorunludur. Fiscal bilgilerini alınmadan satış işlemlerine başlamayın.

Bu fonksiyon senkron olarak çalıştığı için ana program akışınızı engelleyebilir. Kullanırken dikkatli olun; ana programınızın engellenmemesi için thread'ler veya diğer yapılar kullanın. Optimal bir durumda çalıştırılması çok az zaman alır, ancak sorunlara yol açabilir.

//Returns the sections and saved products as a json string.
string fiscalInfo = communication.getFiscalInfo()

Protokolün İletişim Fonksiyonları

ÖKC'ye Sepet Yollamak

  • sendBasket() fonksiyonu, sepet bilgilerini ÖKC cihazına göndermek için kullanılır. Parametre olarak bir sepet JSON'u sağlanmalıdır. Bu JSON'un örneğini 'JSON Örnekleri' bölümünde bulabilirsiniz.

  • sendBasket fonksiyonuna cevap olarak gönderimin başarılı olduğu (1) veya başarısız olduğu (0) bilgisi döner.

//Returns 1 if succeed, 0 if fail
int basketStatus = communication.sendBasket(REQUEST_BODY);

ÖKC' ye Ödeme Yollamak

  • Eğer X30 TR' ye bağlıysanız, hem sepet hem ödeme bilgilerini aynı istek içinde sendBasket fonksiyonu ile göndermelisiniz.

  • Eğer 300 TR' ye bağlıysanız, sadece 1 tane ödeme varsa ödeme bilgisini sepet içerisindeki ürün bilgileriyle beraber sendBasket komutu ile gönderebilirsiniz. Birden fazla ödeme yollanmak istenirse sendBasket komutu ile sepet gönderildikten sonra sendPayment komutu ile ödemeler tek tek gönderilmelidir.

  • sendPayment fonksiyonuna cevap olarak gönderimin başarılı olduğu (1) veya başarısız olduğu (0) bilgisi döner.

//Returns 1 if succeed, 0 if fail
int paymentStatus = communication.sendPayment(REQUEST_BODY);
  • 300TR için örnek sendPayment isteği:

  {
    "amount": 1000,
    "type": 1
  }
  • 300TR' de fiş iptali için ise,sendPayment isteği içinde isVoid değerini true göndermeniz yeterli.

  {
    "isVoid": true
  }

ÖKC'den Gelen Paketleri Dinlemek

  • setSerialInCallback() komutunu kullanarak ÖKC'den gelen yanıtları dinleyin. Bu komutu girdikten sonra, ayrı bir thread' de izlenen iletişim, gelen bilgileri belirlediğiniz callback fonksiyonuna yönlendirilecektir.

  • Value, veriyi temsil eden JSON dizesidir.

//Signature of the function
public delegate int SerialInCallback(int type, string value);

public int serialInCallback(int type, string value) {
	//Do what you want with the data which is passed as type,value pair. 
	//Types can be found in documentation. 
	return 1;
}

communication.setSerialInCallback(serialInCallback);

serialInCallback'te Hangi Veri Tipleri Gelir?

Aşağıdaki tablo, kütüphanede mevcut olan istek türlerini açıklamaktadır. Bu türler, seri iletişimdeki callback aracılığıyla dinlenmelidir.

Veri Tipi
Açıklama

1

Sepet durumunun döndüğü tip (sadece 300TR' de parçalı ödemele senaryoları için)

3

Satış bilgisini döner

9

Cihazda satış ekranı açık değilken sepet veya ödeme gönderilirse bu paket döner.

10

Gönderilen ödemenin cevabı (sadece 300TR' de parçalı ödemele senaryoları için)

Satış Bilgilerini Dinlemek

  • Callback fonksiyonu ayarlandığında, gönderilen satışların durumu belirttiğiniz callback fonksiyonuna iletilecektir.

  • Aşağıda callback fonksiyonunun örnek kullanımı görülebilir. Satış JSON'u örneği 'Örnek JSON' bölümünde bulunabilir.

public int serialInCallback(int type, string value) {
	 // If sale info
	 if(type == 3){
		 //This will print 3 to the console since type of sale info is 3.
		 //See request types table in documentation.
		 Console.WriteLine(type);
		 //This will write the sale json to console.
		 Console.WriteLine(value);
	 }
	 return 1;
 }

İletişimin Kod Üzerinden Olarak Kontrol Edilmesi

Kod üzerinden ÖKC bağlantısını kesmek ve ÖKC'ye tekrar bağlanmak için deleteCommunication() ve reConnect() fonksiyonlarını kullanabilirsiniz.

// Bağlantının Kesilmesi
communication.deleteCommunication();

// Tekrar Bağlanılması
communication.reConnect();

JSON Açıklamaları

Sepet JSON'ı

Örnek

{
  "basketID": "93ced0be-99f5-4e42-b0ca-bc781c778d69",
  "createInvoice": false,
  "documentType": 0,
  "isVoid": false,
  "items": [
    {
      "name": "Su",
      "pluNo": 0,
      "price": 500,
      "sectionNo": 1,
      "unit": "Adet",
      "quantity": 1000,
      "taxPercent": 1000
    },
    {
      "barcode": "",
      "name": "Armut",
      "pluNo": 0,
      "price": 1500,
      "sectionNo": 1,
      "quantity": 1000,
      "taxPercent": 1000
    }
  ],
  "paymentItems": [
    {
      "amount": 1000,
      "type": 1
    },
    {
      "amount": 1000,
      "type": 3
    }
  ],
  "customerInfo": {
    "buildingName": "Building B",
    "buildingNumber": "202",
    "cityName": "City Y",
    "citySubdivisonName": "Subdivision 2",
    "country": "Country B",
    "email": "customer2@example.com",
    "isLock": false,
    "name": "Ege Yardımcı",
    "postalZone": "67890",
    "region": "Region Y",
    "room": "20",
    "street": "Street B",
    "taxID": "0987654321",
    "taxScheme": "Scheme B",
    "telefax": "654321",
    "telephone": "0123456789"
  },
  "adjust": {
    "description": "İndirim Açıklaması",
    "discountOrSurcharge": 0,
    "type": 0,
    "value": 2000
  }
}

Açıklama

{
  "basketID": "93ced0be-99f5-4e42-b0ca-bc781c778d69",
  "createInvoice": false,
  "documentType": 0,
  "isVoid": false,
  "items": [],
  "paymentItems": [],
  "customerInfo": null,
  "adjust": null
}

Alan

Tip

Açıklama

Örnek Değer

basketID

string

UUID

“93ced0be-99f5-4e42-b0ca-bc781c778d69”

createInvoice

bool

Fiş oluştur.

true

documentType

int

Satış tipi.

SATIS(0), AVANS(9000), FATURA TAHSILATI(9001), CARI TAHSILAT(9002), FATURA BILGI FISI(9005), E-FATURA BILGI FISI(9006), E-ARSIV BILGI FISI(9007), ECZANE(9008)

isVoid

bool

Eğer true ise iptal fisi basilacaktir.

false

items

[object]

Sepetteki ürünlerin listesi.

paymentItems

[object]

Ödeme planının listesi.

customerInfo

object

Müşteri Bilgisi.

adjust

object

İndirim/Arttırım bilgisi.

note

string

Fiş altı notu

Sepete nasıl ürün eklerim?

Items Objesi

Sepete bu formatta ürün ekleyebilirsiniz.

Eklediğiniz ürün cihazda PLU olarak kayıtlıysa pluNo ekleyebilirsiniz.

"items": [
  {
    "barcode": "",
    "name": "Su",
    "pluNo": 0,
    "price": 500,
    "sectionNo": 1,
    "taxPercent": 1000,
    "unit": "Adet",
    "quantity": 1000
  }]

Alan

Tip

Açıklama

Örnek Değer

barcode

string

Ürün barkodu

8690006200

name

string

Ürün adı

"Su"

pluNo

int

Ürün PLU numarası (sadece cihazda PLU olarak kayıtlıysa gereklidir)

0

price

int

Ürünün kuruş cinsinden fiyatı

500

sectionNo

int

Kısım no

1

unit

string

Ölçü birimi

"Adet"

quantity

int

Miktarın 1000 ile çarpılmış hali

1000

Sepete ödeme nasıl eklerim?

PaymentItems Objesi

Sepete aşağıdaki gibi ödeme ekleyerek ÖKC'de ekstra işleme gerek kalmadan ödemeleri tamamlayabilirsiniz.

"paymentItems": [
  {
    "amount": 1000,
    "type": 1
  }
]

Alan

Tip

Açıklama

Örnek Değer

amount

int

Kuruş cinsinden ödeme miktarı

1000

type

int

1

Ödeme Tipleri

Sepete ödeme eklerken ve satış durum bilgisini alırken aşağıdaki ödeme tipi değerlerini kullanabilirsiniz.

Ödeme Tipi

Değer

Açıklama

PAYMENT_CASH

1

Nakit

PAYMENT_CHEQUE

2

Çek

PAYMENT_CREDITCARD

3

Kredi Kartı

PAYMENT_FOOD

7

Yemek Kartı

PAYMENT_ODEMESIZ

8

Ödemesiz

PAYMENT_IKRAM

9

İkram

PAYMENT_VERESIYE

10

Veresiye

PAYMENT_PUAN

11

Puan

PAYMENT_VPOS

12

EPOS Ödeme

PAYMENT_MOBILE

13

Mobil Ödeme

PAYMENT_EMONEY

14

E-Para Ödeme

PAYMENT_CHARITY

15

Bağış

PAYMENT_BOND

16

Bond ile Ödeme

PAYMENT_OPENACCOUNT

17

Açık Hesap

PAYMENT_MONEYTRANSFER

18

Para Transferi

PAYMENT_TRANSPORTATIONCARD

19

Ulaşım Kartı

PAYMENT_GIFTCARD

20

Hediye Kartı

Hangi satış tipleri kullanabilirim?

Sepet JSON'ı içine "documentType" hanesinde desteklenen satış tiplerini gönderebilirsiniz. Normal satış dışındaki satış tipleri için sepette başka gerekli haneler bulunmaktadır. Diğer satış tipleri için örnek sepetler burada bulunmaktadır. Diğer bilgiler dokümantasyonda bulunmaktadır.

Satış/Belge Tipi
documentType değeri

Satış

0

Avans

9000

Fatura Tahsilatı

9001

Cari Tahsilat

9002

Fatura Bilgi Fişi

9005

e-Fatura Bilgi Fişi

9006

e-Arşiv Bilgi Fişi

9007

Matrah Dışı Tutar İçeren Satış (Eczane/Katkı Payı)

9008

Sepete müşteri bilgileri nasıl eklerim?

CustomerInfo Objesi

Gerekli durumlarda müşteri bilgilerini aşağıdaki formatta ekleyerek belge düzenlenmesini sağlayabilirsiniz.

"customerInfo": {
  "buildingName": "Building B",
  "buildingNumber": "202",
  "cityName": "City Y",
  "citySubdivisonName": "Subdivision 2",
  "country": "Country B",
  "email": "customer2@example.com",
  "isLock": false,
  "name": "Ege Yardımcı",
  "postalZone": "67890",
  "region": "Region Y",
  "room": "20",
  "street": "Street B",
  "taxID": "0987654321",
  "taxScheme": "Scheme B",
  "telefax": "654321",
  "telephone": "0123456789"
}

Alan

Tip

Açıklama

Örnek Değer

buildingName

string

Bina adı.

"Building B"

buildingNumber

string

Bina numarası.

"202"

cityName

string

Şehir adı.

"City Y"

citySubdivisonName

string

İlçe adı.

"Subdivision 2"

country

string

Ülke adı.

"Country B"

email

string

Email.

"customer2@example.com"

isLock

bool

Eğer true ise gönderdiğiniz bilgiler ÖKC'de değiştirilemez.

false

name

string

İsim.

"Ege Yardımcı"

postalZone

string

Posta kodu.

"67890"

region

string

Bölge.

"Region Y"

room

string

Oda numarası.

"20"

street

string

Sokak adı.

"Street B"

taxID

string

Vergi numarası.

"0987654321"

taxScheme

string

Vergi dairesi.

"Scheme B"

telefax

string

Telefax numarası.

"654321"

telephone

string

Telefon numarası.

"0123456789"

Sepete veya ürüne nasıl indirim artırım ekleyebilirim?

Adjust Objesi

Sepete veya ürüne indirim artırım eklemek için aşağıdaki obje formatını kullanabilirsiniz.

Bu objeyi ürünün altına eklediğinizde ürüne, doğrudan sepetin altına eklediğinizde sepetin tamamına indirim/artırım yapmış olursunuz.

"adjust": {
  "description": "Açıklama",
  "discountOrSurcharge": 0,
  "type": 0,
  "value": 2000
}

Alan

Tip

Açıklama

Örnek Değer

description

string

İndirim/Arttırım açıklaması. Fişte bastırılır.

"İndirim"

discountOrSurcharge

int

0 indirim, 1 arttırım.

0

type

int

0 fiyat indirim/arttırımı, 1 yüzdelik indirim arttırım.

0

value

int

Adet başına İndirim veya arttırım değerinin 100 ile çarpılmış hali

2000

totalValue

int

Ürüne yapılan toplam indirim veya artırım değerinin 100 ile çarpılmış hali

2000

2 adet olan bir ürüne value=1000 gönderirseniz 20 TL, totalValue=1000 gönderirseniz 10 TL indirim/artırım yapılmış olur.

Sepete indirim/artırım yaparken sadece value gönderilebilir. totalValue kullanılamaz.

Fiscal Bilgisi JSON'ı

Örnek

{
  "businessMode": 0,
  "pluCount": 1,
  "plus": [
    {
      "barcode": "",
      "name": "Elma",
      "pluNo": 0,
      "price": 2000,
      "sectionNo": 1,
      "taxPercent": 1000,
      "type": 0,
      "unit": "Adet",
      "vatID": 1
    }
  ],
  "receiptLimit": null,
  "sectionCount": 2,
  "sections": [
    {
      "limit": 0,
      "name": "GİDA",
      "price": 0,
      "sectionNo": 1,
      "taxPercent": 1000,
      "type": 0
    },
    {
      "limit": 0,
      "name": "TEKEL",
      "price": 0,
      "sectionNo": 2,
      "taxPercent": 2000,
      "type": 0
    }
  ]
}

Açıklama

{
  "businessMode": 0,
  "pluCount": 1,
  "plus": []
  "receiptLimit": null,
  "sectionCount": 2,
  "sections": []
}

Alan

Tip

Açıklama

Örnek Değer

businessMode

int

Isletme modu.

Standart(0), Eczane(1), Konaklama(2)

pluCount

int

Cihazda kayitli PLU adeti.

1

plus

[object]

Cihazda kayıtlı ürünlerin listesi.

[{"barcode": "", "name": "Elma", "pluNo": 0, "price": 2000, "sectionNo": 1, "taxPercent": 1000, "type": 0, "unit": "Adet", "vatID": 1}]

receiptLimit

int

Fiş limiti. Bu tutarın üstüne bilgi fişi oluşturulmalıdır.

6900

sectionCount

int

Cihazda kayıtlı kısımların sayısı.

2

sections

[object]

Cihazda kayıtlı kısımların listesi.

[{"limit": 0, "name": "GİDA", "price": 0, "sectionNo": 1, "taxPercent": 1000, "type": 0}, {"limit": 0, "name": "TEKEL", "price": 0, "sectionNo": 2, "taxPercent": 2000, "type": 0}]

Plus Objesi

"plus": [
  {
    "barcode": "",
    "name": "Elma",
    "pluNo": 0,
    "price": 2000,
    "sectionNo": 1,
    "taxPercent": 1000,
    "type": 0,
    "unit": "Adet",
    "vatID": 1
  }
]

Alan

Tip

Açıklama

Örnek Değer

barcode

string

Ürün barkodu.

""

name

string

Ürün ismi

"Elma"

pluNo

int

PLU numarası.

0

price

int

Ürün fiyatı kuruş cinsinden.

2000

sectionNo

int

Bağlı oldugu kısım numarası.

1

taxPercent

int

Vergi dilimi.

1000

type

int

Ürün tipi.

Standart(0), Konaklama(1)

unit

string

Ölçü birimi.

"Adet"

vatID

int

-

1

Section Objesi

"sections": [
  {
    "limit": 0,
    "name": "GİDA",
    "price": 0,
    "sectionNo": 1,
    "taxPercent": 1000,
    "type": 0
  }
]

Alan

Tip

Açıklama

Örnek Değer

limit

int

-

0

name

string

Kısım adı.

"GİDA"

price

int

-

0

sectionNo

int

Kısım numarası.

1

taxPercent

int

Vergi dilimi.

1000

type

int

-

0

Satış Durumu JSON'ı

Satış durumu JSON'u, ÖKC tarafından ana makineye gönderilecektir. İşte bu JSON'un iki örneği: biri başarılı bir satış, diğeri ise başarısız bir satış. Bu bilgiler callback'ler aracılığıyla gözlemlenebilir.

Örnek

//Başarılı Satış
{
  "basketID": "93ced0be-99f5-4e42-b0ca-bc781c778d69",
  "documentType": 0,
  "InstanceIdentifier": "XXXX",
  "invoiceID": "",
  "message": "OK",
  "paymentCount": 1,
  "paymentItems": [
    {
      "amount": 2000,
      "BatchNo": 0,
      "currencyId": 0,
      "description": "Tum tutarı nakit olarak odet",
      "operatorId": 0,
      "status": -1,
      "TxnNo": 0,
      "type": 1
    }
  ],
  "receiptNo": 2,
  "status": 0,
  "UUID": "aa2c8046-f0bd-4617-9f5d-0bb6eb4f4ed7",
  "zNo": 12
}

//Başarısız Satış
{
	"basketID":"",
	"message":"CANCELLED",
	"status":-1
}

Belirli Banka ve Yemek Kartı Uygulamalarına Yönlendirme

paymentItems içindeki ödemelerde, eğer o ödeme kredi kartı (type 3) veya yemek kartı (type 7) ise, cihazda yüklü olması şartıyla, belirli bir banka veya yemek kartı uygulamasına yönlendirilmesini sağlayabilirsiniz.

"paymentItems": [
  {
    "amount": 1000, // 10 TL
    "type": 3, // Kredi Kartı
    "operatorId": 67 // Yapı Kredi
  }
]

veya

"paymentItems": [
  {
    "amount": 1000, // 10 TL
    "type": 7, // Yemek Kartı
    "operatorId": 1005 // TokenFlex
  }
]

Device state callback'i ile bağlantının sağlandığına emin olduktan sonra getFiscalInfo() komutunu kullanarak ÖKC cihazından bölüm ve kaydedilmiş ürün bilgilerini alın. Bağlantının sağlandığına nasıl emin olunacağı ile alakalı kod örneği Token Template Simulator'ün kaynak dosyalarında bulunmaktadır.

Satışın ve ödemelerin durumunu

Ödemelerin durumunu

Type, ÖKC'den gelen verinin türünü temsil eder; türler ve tanımları bu belgede bulunan bulunabilir.

Banka ve yemek kartı uygulamaları listesi için tıklayın.
Bu fonksiyon, bir JSON objesi döndürür.
serialInCallback üzerinden ilgili tag ile takip etmelisiniz.
serialInCallback üzerinden ilgili tag ile takip etmelisiniz.
Türler tablosunda
Ödeme türü