Geliştirici Dokümanı (TR)
Sunucu entegrasyonu
Last updated
Sunucu entegrasyonu
Last updated
Bu dokümantasyon, TokenX API ile entegrasyon sürecini ayrıntılı bir şekilde açıklamaktadır. Entegrasyon süreci, gerekli API KEY bilgilerini almak, webhook adreslerini ayarlamak ve çeşitli API çağrıları yapmak gibi adımları içerir. Aşağıda, TokenX API ile entegrasyon için izlenmesi gereken ana adımlar detaylandırılmaktadır.
Sepet: Satın alma işleminin Token ÖKC tarafından işlenmesi gereken detaylarını içerir. Bu detaylar, fiş veya fatura kesmek için gerekli olan ürün isimleri, fiyatlar, miktarlar ve vergi bilgilerini kapsar.
Access_token: API isteklerini doğrulamak ve yetkilendirmek için kullanılan bir kimlik doğrulama anahtarı, yalnızca yetkili kullanıcıların sistemle etkileşimde bulunmasını sağlar.
Terminal: İşlemleri ve ödemeleri işlemek için kullanılan Token ÖKC.
terminal-id: Terminalinize özel olan benzersiz bir id (AV veya AT ile başlayan).
branch-id: Bir veya birden fazla terminal ile ilişkili belirli bir şubeyi tanımlayan benzersiz id.
ÖKC (Ödeme Kaydedici Cihaz): Satış ve vergi bilgilerinin yasal düzenlemelere uygun olarak kaydedilmesi için kullanılan mali cihaz.
Entegrasyon için aşağıdaki adımların takip edilmesi gerekmektedir.
TokenX Kablosuz Entegrasyon'da bulunan tüm API istekleri atılırken, her bir işlemin header kısmında access_token bulunmalıdır. Bu access_token'ı almak için entegrasyon yapacak iş yerine özel olarak tanımlanan client-id
ve client-secret
bilgilerine ihtiyacınız vardır.
Test aşamasında, client-id
ve client-secret
bilgileri developer team tarafından tarafınıza iletilecektir.
İş Yeri Sahibi ve Bilgilerin Paylaşımı: İş yerine özgü bu bilgiler, iş yeri sahibinden alınmalıdır. İş Yeri sahibi, TokenX İş yeri Paneli’ndeki Kablosuz Entegrasyon sayfasından client-id
ve client-secret
bilgilerini alabilir.
Access Token Bilgilerinin Alınması: client-id
ve client-secret
bilgilerini aldıktan sonra tarafınıza iletilen TEST_URL/v1/auth/token endpoint'ine client-id
ve client-secret'ı
header'da Basic Auth tekniğini kullanarak POST isteği şeklinde gönderilir. İsteğin sonucunda kullanıcıya access-token dönülür.
Yanıt:
Asenkron işlem sonuçları, entegrasyon yapacak firmanın sunucularına Webhook şeklinde POST isteği atılarak gönderilir. Entegrasyon yapacak firma, bu isteği karşılayacak Webhook adresini ve bu adrese erişmek için gereken Auth bilgisini Postman koleksiyonunda bulunan ClientSettings/Set
API'ı aracılığıyla ayarlamalıdır. Aksi takdirde, entegrasyonun ilerleyen aşamalarında yapılacak işlemlerin (lock, unlock, payment) asenkron statüleri hakkında bilgi sahibi olamayacaktır.
ClientSettings/Set API Detayları
IP Whitelist
Entegrasyon yapacak işyerleri, IP kısıtlamaları var ise, iletişimin güvenliğini sağlamak amacıyla belirli TokenX IP adreslerini isteğe bağlı olarak IP listelerine ekleyebilirler.
Test Ortamı: İsteğe bağlı olarak developer team tarafından paylaşılacaktır.
Production Ortamı: İsteğe bağlı olarak developer team tarafından paylaşılacaktır.
Header:
İsteğin header kısmında, Auth tekniği
olarak Bearer Token
seçilmelidir ve Bearer Token
değeri, bir önceki adımda yapılan TEST_URL/v1/auth/token isteği sonucunda elde edilen Access Token
bilgisidir.
Body:
Callback Auth: Bu alana, sizin tarafınızdan sağlanacak olan Callback URL'inizin Auth tekniğini girmeniz gerekmektedir. Bir Auth mekanizması kullanmak istemediğiniz takdirde, bu alanı body'de belirtmenize/göndermenize gerek yoktur.
Yanıt:
Harici sistem ile Token ÖKC'nin mali olarak eşleşmesi için zorunlu adımdır. Mali parametreleri almak için Postman Collection'da yer alan isteği inceleyebilirsiniz.
Header: terminal-id
ve access_token
atılan isteğin header'ında yer almalıdır.
Yanıt:
Oluşturulan, tamamlanmamış (açık kalan) ve iptal edilen sepetler azami 2 hafta boyunca tutulmaktadır.
Bir Terminal İçin Sepet Oluşturma: Sadece bir terminale istek atılması isteniyor ise Postman Collection'da yer alan isteğin header kısmına terminal-id
ve access_token
eklenmelidir.
Şube'ye Tanımlanmış Tüm Terminal'ler İçin Sepet Oluşturma: Şube'ye tanımlanmış tüm terminallere istek atılması isteniyor ise Postman Collection'da yer alan isteğin header kısmına branch-id
ve access_token
eklenmelidir.
Opsiyonel Parametreler: İsteğe bağlı olarak checkNumber
(çek numarası), title
(başlık), note
(not), filter
(filtre) bilgileri de gönderilebilir. Bu bilgiler ÖKC arayüzünde görüntülenir.
Hazır Örnek Sepetler: Hazır istek örnekleri ve detaylarına aşağıdaki link'ten ulaşabilirsiniz. Hazır Örnek Sepetler
Bir sepeti direkt bir terminal üzerinde anında ödeme alma amaçlı kullanım için kullanılır.
4. maddedeki opsiyonel parametreler ve body aynen geçerli olup header'da terminal-id
girilmelidir. Yine authentication için access_token
da header'da sağlanmalıdır.
Bu isteği kullanarak cihaza direkt sepet gönderebilmek için cihazın modu 'sepet ödemesini hemen al' şeklinde değiştirilmiş olmalıdır.
Bu isteğin header'ına branch-id
girilmemelidir.
Oluşturulan, tamamlanmamış (açık kalan) ve iptal edilen sepetler azami 2 hafta boyunca tutulmaktadır.
Bu istek terminalinizde olan, 4. veya 5. adımda oluşturduğunuz ve tamamlamadığınız sepetlerin bilgilerine ulaşabilmeniz için kullanılır.
Header: terminal-id
ve access_token
atılan isteğin header'ında yer almalıdır.
Örnek kullanım senaryoları:
- 4. veya 5. adımda bir sepet oluşturdunuz ancak bu sepetin basketID'sini
kayıt etmeyi unuttunuz.
- Günler önce oluşturduğunuz bir sepetin bilgilerini almak istiyorsunuz ancak bu sepete dair elinizde bir veri yok (basketId, checkNumber gibi).
- Terminalinizde bulunan tamamlanmamış sepetleri incelemek istiyorsunuz.
Oluşturduğunuz sepetin bilgilerini almak için Postman Collection'da yer alan isteğin path kısmında sepetin basketID
bilgisi belirtilmelidir. Bu basketID
bilgisi 4. adımda (Send Basket) gönderdiğiniz isteğin body kısmında bulunan basketID
alanı ile aynı olmalıdır.
Path Parametresi: Sepetin basketID
bilgisi isteğin URL path'inde {{BASKET_ID}} olarak belirtilen kısımda verilmelidir.
Header: terminal-id
ve access_token
atılan isteğin header'ında yer almalıdır.
Yanıt:
Oluşturduğunuz sepeti silmek için Postman Collection'da yer alan isteğin path kısmında sepetin basketID
bilgisi belirtilmelidir. Bu basketID
bilgisi 4. adımda (Send Basket) gönderdiğiniz isteğin body kısmında bulunan basketID
alanı ile aynı olmalıdır.
Path Parametresi: Sepetin basketID
bilgisi isteğin URL path'inde {{BASKET_ID}} olarak belirtilen kısımda verilmelidir.
Header: access_token
atılan isteğin header'ında yer almalıdır.
Yanıt:
Oluşturduğunuz bir sepetin ödemesini yaptıktan sonra 2. Adımda girdiğiniz webhook adresine (girildi ise) ödemenin detaylarını içeren bir data iletilecektir. İletilecek data ödeme sonucuna göre değişecektir, aşağıda iletilebilecek data'ların örneklerini bulabilirsiniz:
Status = 0 Başarılı ödenen bir sepet sonrası giden webhook içeriği:
Status = -1 Ödemeden vazgeçildi:
Status = 99 Fiş İptali:
Sepet işlemlerine ait durum kodları aşağıdaki gibidir:
Token-X Connect API Entegrasyon Kodları
Status
Description
Type
0001
JWT token algoritması beklenen ile eşleşmiyor.
Token algoritma doğrulama hatası
0002
JWT token süresi dolmuş ve artık geçerli değil.
Token süresi dolma hatası
0003
JWT token imzası geçersiz veya beklenen imza ile eşleşmiyor.
Token imza doğrulama hatası
0004
Authorization başlığı eksik veya yanlış formatlanmış.
Authorization başlığı hatası
0005
JWT token'den belirli bir alan (örneğin "claim") alınamıyor.
Token alanı çıkarma hatası
0
Successful
success
1006
No record found
error
1007
DB error: Duplicate record
error
1013
Wrong data format
error
1018
Error: Order locked! For this operation you must first unlock the order.
error
1100
There is already an open basket assigned to this terminal
error
1101
There is already an open basket for this check number
error
1102
This basket has already been completed
error
1103
The total of the items and the total payment amount are not equal!'
error
1104
This terminals mode is not suitable for receiving instant baskets
error
Authenticate API Postman Collection Link:
Callback URL: Bu alana, kullanıcının kendi Webhook adresini girmesi gerekmektedir. Bu URL, entegrasyon sürecinde asenkron olarak gönderilecek işlem durumlarının iletileceği adrestir. (Not: Testler sırasında, herhangi bir sunucu ayağa kaldırılmadan gelen işlem sonucunu görebilmek adına gibi REST API karşılayan bir site kullanarak kolaylıkla webhook adresi edinip asenkron işlemlerine rahatlıkla ulaşabilirsiniz.)
ClientSettings/Set API Postman Collection Link:
Get Fiscal Parameters API Postman Collection Link:
İstek Body'si Detayları ve Yanıt'ı: İsteğin body kısmına eklenecek diğer alanlar ile ilgili detaylar'a aşağıdaki link'ten ulaşabilirsiniz.
Add Basket API Postman Collection Link:
Add Instant Basket API Postman Collection Link:
Get Open Basket For Terminal API Postman Collection Link:
Get Basket Details API Postman Collection Link:
Delete Basket API Postman Collection Link:
Aşağıda belirtilen Postman Koleksiyonu'nu kullanarak, yukarıda belirtilen TokenX API'larının detaylarına ulaşabilirsiniz ve TokenX API'larını verimli ve hızlı bir şekilde test edebilirsiniz:
Aşağıda belirtilen link'e tıklayarak, yukarıda belirtilen TokenX API'larını dinamik simülatör uygulamamız aracılığıyla kolayca test edebilirsiniz: