İçeriğe geç
Sipariş başına komisyon yok. Sabit lisans, 14 gün koşulsuz iade. Fiyatlara bak
QRSystema
Rehber · Entegrasyon

Yazarkasanız siparişleri okusun.

API anahtarı üretme, bağlantıyı deneme, okuma uçları, imzalı bildirimlerin doğrulanması ve yazarkasa firmasına ne söyleyeceğiniz.

Entegrasyon8 dk okumaGüncelleme: 1 Ekim 2026

Kullandığınız yazarkasa, muhasebe ya da adisyon programı QRSystema'daki siparişleri okumak istiyorsa bir API anahtarına ihtiyacı vardır. Anahtarı panelden siz oluşturur, entegrasyonu yapan firmaya verirsiniz. Bu sayfa hem sizin hem de firmanın yazılımcısı içindir: önce işletme sahibi adımları, sonra teknik ayrıntılar.

API salt okunurdur. Dış sistem menüyü, siparişleri ve ciro özetini okuyabilir; sipariş oluşturamaz, hesap kapatamaz, fiyat değiştiremez. Kasada yapılan işlem yine QRSystema panelinden yürür.

1. Anahtar oluşturun

  1. Panelde Kasa & Cihazlar → Program bağlantısı sayfasını açın.
  2. Anahtar oluştur düğmesine basın. Bağlantı adı alanına hangi sistem için verdiğinizi yazın (“Yazarkasa”). Bildirim adresi isteğe bağlıdır; boş bırakıp sonradan da girebilirsiniz.
  3. Oluşturunca ekranda iki değer çıkar: Anahtar ve İmza sırrı (imza sırrı, bildirim kullanmayacaksanız da üretilir). İkisi de yalnızca bir kez gösterilir. Kopyala düğmesiyle kopyalayıp firmaya güvenli bir kanalla iletin.

Sayfadan ayrıldıktan sonra bu değerleri bir daha göremezsiniz; sistemde yalnız şifrelenmiş özet saklanır. Kaybederseniz yeni anahtar oluşturun. En fazla 10 anahtar tanımlayabilirsiniz; kullanmadıklarınızı silin. İstediğiniz an bir bağlantıyı Durdurabilir ya da silebilirsiniz; silince o anahtarı kullanan sistem bağlantısını kaybeder. “DoyHadi” adı DoyHadi bağlantısına ayrılmıştır, anahtara başka bir ad verin.

2. Bağlantıyı deneyin

Firmanın yazılımcısı (ya da siz) anahtarı bir istek başlığıyla gönderir. Kimlik doğrulama için X-API-Key başlığı ya da Authorization: Bearer biçimi kabul edilir:

curl -H "X-API-Key: qrs_xxxxxxxx" https://qrsystema.com/api/v1/me

İşletme bilgisi dönerse bağlantı çalışıyor demektir. Bağlantılar tablosunda anahtarın “Son kullanım” sütunu da güncellenir.

3. Okuma uçları

AdresNe döner
GET /api/v1/meİşletme bilgisi, bağlantı testi için.
GET /api/v1/menuKategoriler, ürünler, porsiyonlar, ilaveler ve fiyatlar.
GET /api/v1/products/{id}Tek ürün.
GET /api/v1/tablesMasa durumu: açık masalar ve birikmiş tutarlar.
GET /api/v1/ordersMasa siparişleri. ?status=open|pending|approved|closed|cancelled|all
GET /api/v1/orders/{id}Tek sipariş, kalem kalem.
GET /api/v1/delivery-ordersEve siparişler.
GET /api/v1/sales/summaryGün sonu: masa ve paket cirosu, nakit/kart dağılımı.

Sınırlar: anahtar başına dakikada 120 istek (aşılırsa 429 döner); listeler page ve pageSize ile sayfalanır, varsayılan 50, en çok 200. Tarih süzgeci from ve to alır; saat dilimi yazılmazsa işletme saati, sonuna Z koyarsanız UTC kabul edilir. Sipariş tutarı için total alanı esas alınmalıdır: tutar sunucudaki güncel menü fiyatlarına göre hesaplanır.

4. Bildirimleri (webhook) açın

Dış sistemin sürekli sorgu atmasına gerek kalmadan olaylar ona gönderilsin istiyorsanız bağlantının Bildirim adresi alanına bir https adresi yazıp kaydedin. Bağlantı satırındaki Deneme bildirimi gönder düğmesi bir deneme bildirimi (test.ping) gönderir. Olaylar:

OlayNe zaman
order.createdMasadan yeni sipariş düştüğünde.
order.updatedAçık masaya yeni kalem eklendiğinde.
order.status_changedSipariş onaylandığında ya da iptal edildiğinde.
bill.requestedMasa hesap istediğinde.
bill.closedHesap kapandığında; ödeme türü ve tutar yer alır.
delivery.created / delivery.status_changedEve sipariş geldiğinde ve durumu ilerlediğinde.

Gövde şu alanları taşır: id, event, occurredAt, restaurantId, data.

5. Bildirimin imzasını doğrulayın

Her bildirimde üç başlık gelir: X-QRS-Event (olay adı), X-QRS-Delivery (bildirim kimliği) ve X-QRS-Signature. İmza başlığı t=1789045462,v1=9c1f… biçimindedir. Doğrulama adımları:

  1. Başlıktaki t (zaman damgası) ve v1 (imza) değerlerini ayırın.
  2. İmzalanan metni kurun: t değeri, bir nokta ve gövdenin ham hâli. JSON'u ayrıştırıp yeniden yazmayın; gövde bayt bayt aynı kalmalıdır.
  3. Bu metnin HMAC-SHA256 özetini, imza sırrınızı anahtar olarak kullanarak hesaplayın ve küçük harfli onaltılık yazıya çevirin.
  4. Sonucu v1 ile karşılaştırın (mümkünse sabit zamanlı karşılaştırmayla).
  5. Zaman damgası 5 dakikadan eskiyse isteği reddedin.
import hmac, hashlib, time

def dogrula(sir, imza_basligi, ham_govde):   # ham_govde: bayt
    p = dict(x.split("=", 1) for x in imza_basligi.split(","))
    metin = (p["t"] + ".").encode() + ham_govde
    beklenen = hmac.new(sir.encode(), metin, hashlib.sha256).hexdigest()
    return hmac.compare_digest(beklenen, p["v1"]) and abs(time.time() - int(p["t"])) <= 300

Karşı adresiniz 10 saniye içinde 2xx yanıt vermelidir; ağır işleri yanıttan sonra yapın. Yönlendirme (3xx) izlenmez. Aynı bildirim iki kez ulaşabilir: id ve X-QRS-Delivery yeniden denemede değişmez, bu değeri kaydedip tekrarı yok sayın. Yeniden deneme kuralları SSS'te anlatılmıştır. İmza sırrını kaybettiyseniz Sırrı yenile düğmesiyle yenisini üretin ve hemen dış sisteme girin; eski sır geçersiz olur.

6. Yazarkasa firmasına ne söyleyeceksiniz

  • API salt okunurdur; sipariş ve ciro verisini okuyabilir.
  • Kimlik doğrulama başlığı ve dakikada 120 istek sınırı.
  • İsterlerse bildirim adresi ve imza doğrulama; yoksa belirli aralıklarla /api/v1/orders sorgulayabilirler.
  • Anahtarı iş bittiğinde silmeniz ya da durdurmanız gerekir.

QRSystema mali yazarkasa değildir ve mali belge üretmez. Bu işi yazarkasa yazılımı yapar; API yalnız ona siparişleri verir.

Sık yapılan hatalar

HataÇözüm
401 “anahtar_gecersiz”Anahtar yanlış kopyalanmış, durdurulmuş ya da silinmiş. Yeni anahtar oluşturun.
429 “cok_fazla_istek”Dakikada 120 isteği aştınız; sorgu sıklığını azaltın ya da bildirim kullanın.
Anahtarı kaybettimTekrar gösterilemez. Yeni anahtar oluşturup eskisini silin.
Bildirim imzası tutmuyorGövdeyi ayrıştırıp yeniden yazmayın; ham gövdeyi ve yeni sırrı kullanın.
Bildirim hiç gelmiyorAdres https olmalı ve 10 saniyede 2xx dönmeli. Satırdaki “Deneme bildirimi gönder” düğmesiyle deneyin.
Anahtarı herkese verdimAnahtar sipariş ve ciro verinizi okur. Yalnız güvendiğiniz firmaya verin, işi bitince silin.

Daha fazlası için sık yapılan hatalar ve çözümleri sayfasına bakın.

Kontrol listesi

  • Anahtar yalnız bir kez gösterildi, kopyalanıp güvenli iletildi.
  • İsteğe bağlı bildirim adresi https ve 10 saniyede 2xx dönüyor.
  • /api/v1/me ile bağlantı denendi.
  • İmza doğrulaması ham gövde ve zaman damgası kontrolüyle yapılıyor.
  • Tekrar eden bildirimler id ile ayıklanıyor.
  • Kullanılmayan anahtarlar silindi.

Özelliğin genel anlatımı için API ve yazarkasa bağlantısı sayfasına bakabilirsiniz.

Sık sorulanlar

API ile sipariş oluşturabilir ya da hesap kapatabilir miyim?

Hayır. API salt okunurdur: menüyü, siparişleri, masa durumunu ve ciro özetini okur. Sipariş oluşturamaz, hesap kapatamaz, fiyat değiştiremez. Kasada yapılan işlem yine QRSystema panelinden yürür.

API anahtarımı kaybettim, tekrar görebilir miyim?

Hayır. Anahtar ve imza sırrı yalnız oluşturulduğunda bir kez gösterilir; sistemde yalnız şifrelenmiş özeti saklanır. Kaybederseniz yeni bir anahtar oluşturun, eskisini silin ve yazarkasa firmasına yenisini verin.

QRSystema mali yazarkasa mıdır?

Hayır. QRSystema bir mali cihaz ya da mali fiş çözümü değildir; API, kullandığınız yazarkasa ya da adisyon yazılımının siparişleri okumasını sağlar. Mali belge ve cihaz yükümlülükleri için yazarkasa firmanıza danışın ve güncel mevzuatı kontrol edin.

Bildirim adresim bir süre kapalı kalırsa bildirimler kaybolur mu?

Hemen kaybolmaz. Geçici hatalarda (zaman aşımı, 5xx, 429 gibi) bildirim artan aralıklarla, 30 saniyeden 8 saate kadar yeniden denenir. Kalıcı hatalarda (400, 401, 403, 404, 410) tekrar denenmez. Yine de bildirim adresinizin açık olduğundan emin olun ve gelen kayıtları ayrıca sorgulayarak doğrulayın.

İşletmenizi bugün açalım.

Kurulum ücreti yok. Menünüzü girin, masa karekodlarınızı yazdırın, ilk siparişi aynı gün alın.