Webhook Servisi
Faturanız hazır olduğunda ya da bir sorun çıktığında Eafatura, belirlediğiniz Webhook URL adresine otomatik bildirim gönderir. Böylece fatura durumunu sürekli sormanız gerekmez.
- • create-invoice yanıtındaki
pdf_urladresi, PDF dosyası üretilene kadar açılmaz. PDF hazır olduğundainvoice.pdf_readyolayı gelir. - • Bildirimler belirlediğiniz adrese JSON gövdeli POST isteği olarak iletilir. Adres https olmalıdır.
- • Her istek, panelinizdeki Webhook Secret ile HMAC-SHA256 imzalanır. İmzayı doğrulamadan gelen isteğe güvenmeyin.
- • Endpointiniz başarılı işlemde 2xx yanıt vermelidir. Aksi halde teslimat otomatik yeniden denenir; aynı olay birden fazla kez gelebilir,
idile tekilleştirin. - • Webhook alanını panelden tanımlarsınız; Test Olayı Gönder düğmesiyle canlı fatura kesmeden deneyebilirsiniz.
https://siteniz.com/webhooks/eafatura
Olaylar
Fatura PDF dosyası üretildi; data.pdf_url artık açılır. Bu olay e-arşiv ve e-fatura, satış ve iade faturaları için aynıdır.
Fatura oluşturuldu ancak PDF dosyası üretilemedi ve yeniden deneme hakkı bitti. Fatura belgesi geçerlidir; yalnızca PDF dosyası yoktur. Ayrıntı data.reason ve data.message alanlarındadır.
Panelden “Test Olayı Gönder” ile gönderilen örnek olaydır; data alanı gerçek bir invoice.pdf_ready olayının alanlarını taşır (ek olarak sample_of). Tek denemedir, yeniden denenmez.
Webhook adresini panelden kaydederken adresinizin ulaşılabilir olduğunu doğrulamak için bir kez gönderilir. Aynı imza ile gelir.
Olay Gövdesi
Her olay aynı zarfla gelir. Yeni alanlar eklenebilir; mevcut alanlar silinmez ya da yeniden adlandırılmaz. Bilmediğiniz alanları yok sayın.
Olayın benzersiz kimliğidir (X-Eafatura-Delivery başlığıyla aynı). Yeniden denemelerde ve “tekrar gönder”de değişmez: işlediğiniz olayları bu kimlikle tekilleştirin.
Olay türü: invoice.pdf_ready, invoice.failed, webhook.test, ping.
Gövde biçiminin sürümü. Şu an 2.0.
Olayın oluşturulma zamanı (ISO 8601, saat dilimi ile).
Olaya göre değişen ayrıntılar. Fatura olaylarında şu alanlar bulunur:
- •
document_number: faturanın belge numarası - •
ettn: faturanın ETTN (UUID) değeri - •
order_number: sipariş numarası; yoksanull(iade faturalarında olmaz) - •
invoice_type:satis,istisnaya daiade - •
document_kind:e_arsivya dae_fatura - •
pdf_url: yalnızcainvoice.pdf_ready; PDF dosyasının adresi - •
reason,message: yalnızcainvoice.failed; neden kodu (şu anpdf_generation_failed) ve açıklama
Header Parametreleri
İmza: t=<unix zamanı>,v1=<imza>. Her denemede zaman damgası yenilenir.
Olay türü (gövdedeki type ile aynı).
Olay kimliği (gövdedeki id ile aynı). Tekilleştirme için kullanın.
application/json ve EafaturaAPI-Webhook/2.0.
İmza Doğrulama
Webhook Secret, panelinizde (API Bilgileri) gösterilir. İmza şöyle hesaplanır:
X-Eafatura-Signaturebaşlığındant(zaman) vev1(imza) değerlerini ayırın. Birden fazlav1olabilir.- Ham istek gövdesini (JSON'a çevirmeden, olduğu gibi) alın ve
t + "." + gövdemetnini oluşturun. - Bu metnin HMAC-SHA256 değerini Webhook Secret ile hesaplayın (onaltılık/hex).
- Sonucu başlıktaki
v1değerlerinden biriyle sabit zamanlı karşılaştırın. tdeğeri şu andan 5 dakikadan fazla farklıysa isteği reddedin (yakalanmış bir isteğin tekrar oynatılmasını önler).
Secret yenileme: Panelden secret'ı yenilediğinizde eski secret 24 saat boyunca da imzaya eklenir; başlıkta iki v1 bulunur. Yeni secret'ı kendi sisteminize bu sürede kesintisiz alabilirsiniz. Secret'ı kimseyle paylaşmayın ve kodunuza ya da günlüklerinize yazmayın.
Teslimat ve Yeniden Deneme
- • Başarı: 2xx yanıt. Yanıtınız 10 saniye içinde gelmelidir; ağır işleri kuyruğa alıp hemen 2xx dönün. Yönlendirmeler (3xx) izlenmez ve başarısız sayılır.
- • Yeniden deneme: Başarısız teslimat 1 dk, 5 dk, 30 dk, 2 saat ve 12 saat sonra yeniden denenir (toplam 6 deneme). Hepsi başarısız olursa teslimat “Başarısız” kalır; panelden Tekrar gönder diyebilirsiniz.
- • Tekilleştirme: Ağ sorunları nedeniyle aynı olay birden fazla kez gelebilir. İşlediğiniz
iddeğerlerini saklayın; tekrar gelirse yine 2xx dönüp yok sayın. - • Sıra: Olayların gönderim sırası garanti edilmez. Sıraya ihtiyacınız varsa
created_atdeğerini kullanın. - • Devre kesici: Art arda 30 başarısız denemeden sonra adresiniz devre dışı bırakılır ve mobil uygulamanıza bildirim gider. Olaylar kaybolmaz; sorunu giderip panelden yeniden etkinleştirdiğinizde gönderilir.
- • Adres kuralları: Adres
httpsolmalı, herkese açık bir alan adına çözülmeli (IP adresi, yerel ağ ve iç adresler kabul edilmez) ve en fazla 500 karakter olmalıdır. - • Teslimat geçmişi: Panelde son teslimatları, gönderilen içeriği, her denemenin sonucunu ve yanıtınızın ilk kısmını görebilirsiniz.