GMU Kurulum
- GMU'nun ihtiyaç duyduğu bileşenler: (tüm bileşenlerin konfigürasyonu gmu api pod'unda environment variable olarak verilir)
- HSM (prod ortamı için high available olarak kurulmuş en az 2 HSM önerilir, daha güvenlisi +1 backup HSM)
- Sql Server 2019+ (ortam prod ise "always on" ile high available). High available modda (always on) "Listener" adresini vermelisiniz, gmu ayreten replika adresini de ister ve bunu sadece raporlar için kullanır (erişim sorunu yaşarsa masterdan çeker). Veritabanında tutulan hassas veriler kriptolu olarak yer almaktadır.
- ELK (APM'li) bakınız: https://www.elastic.co/ . Production ortamında ELK'ya yazılan loglar'da hassas veriler temizlenmektedir.
- Redis. İçerdiği veri gmu açısından kıymetsiz keşleme verisidir, tüm veri kaybedilse de gmu ektilenmez. Redis üzerinde tutulan keşleme verilerinde hassas veriler kriptolu olarak redise yazılmaktadır.
- Opsiyonel Prometheus. GMU opsiyonel olarak bazı metrikleri prometheus'un kullanımı için apiurl/metrics adresinden dışarı açmaktadır.
- Opsiyonel GMU Pdf Servisi. Bu opsiyonel .net6.0 servis gmu'nun da pdf üretebilmesini sağlamaktadır, dışarı kapalı olmalı, sadece iç servislerin lokal networkden erişimine açık olarak kurulmalıdır. Fatura pdf'i entegratörden elde edilemezse veya bazı apilerdeki parametre ile entegratöre gitme opsiyonu verilmişse bu servis ile pdf elde edilir, servis yoksa api hata verir. Bilgi fişleri ise sadece bu servis var ise pdf formatında alınabilir.
- Api'ye kolay erişim için herhangi bir domain üzerinde subdomain açılması (dns kaydı girilerek) önerilir. Benzer şekilde gmu backoffice için de 2.bir subdomain açılması önerilir.
- Bir zaman damgası servisinden (kamusm veya e-güven gibi) zaman damgası hizmeti ve kontör alımı yapılmalıdır. Zaman damgası kontör tüketimi şu şekilde:
- sahadaki aktif pos cihazı adedi kadar günlük xades-A belge oluşturuluyor ve zaman damgası bu belgeler için gerekli.
- Her belge imzalamada sabit 3 kontör tüketiliyor
- örnek: 100 aktif cihaz, 1 yıl için gerekli miktar => 100 365 3 = 109500
GMU EAL4+ sertifikalı bir HSM'e ihtiyaç duymaktadır, gmu ortamna özel ayrı bir partisyon açılarak işletici kuruluş sertifikasının ve kriptolama için gerekli secret'in buraya kaydedilmesi önerilir. Müşteriler genellikle Luna 7 veya üstü hsm kullanmaktadır.
HSM üzerinde işletici firma sertifikası RSA 2048 veya EC (eeliptic curve) 384 olarak üretilir, dışarı çıkarılamayacak şekilde tanımlanmalıdır. GİB RSA sertifikalardan Elliptic Curve sertifikalara geçiş yapmaktadır, muhtemelen 2023'den itibaren sertifikalar elliptic curve verilecek.
HSM üzerinde ürettiğiniz secret KVKK ve 507 nolu tebliğ kapsamında hassas verileri kriptolamada ve açmada kullanılacağından bu secret'i kaybetmeniz demek kriptoladığınız tüm verinizin de kaybolması manasına gelir. Secret ve İşletici kuruluş sertifikanızın (private keyi dahil) yedekli olmasını öneririz.
HSM'de Secret key 256 bit AES olarak oluşturulacak;
Luna A7xx serisi HSM'lerde 256 bit AES secret oluşturma: HSM client dizinindeki "ckdemo" yu açıp 20 nolu fonksiyon ile (Create Object) yapılabilir. https://thalesdocs.com/gphsm/luna/7/docs/network/Content/Utilities/ckdemo/object_management_functions.htm
örnek secret key oluşturma parametreleri:
- CKA_ID = unique bir id
- CKA_LABEL = {secret'e verilecek etiket adı} gmu'ya burada belirlenen etiket konfigürasyon olarak verilecek
- CKA_CLASS = CKO_SECRET_KEY
- CKA_KEY_TYPE = CKK_AES
- CKA_ENCRYPT = true
- CKA_DECRYPT = true
- CKA_DERIVE = true
- CKA_EXTRACTABLE = true
- CKA_PRIVATE = true
- CKA_WRAP = true
- CKA_TOKEN = true
- CKA_VALUE_LEN = 256 / 8
--> 256-bit AES için 32 (byte) Mekanizma: CKM_AES_KEY_GEN
GMU api hsm clustera erişebilir olmalıdır. Bunun için openshift veya k8s kullanan müşterilerde uygulama bir ip havuzundan aldığı rastgele ip adreslerine sahip olabileceğinden hsm'de ipcheck'i kapatması veyahut k8s/openshift'den hsm'e erişirken çıkan ip NAT'lanarak tek bir ip üzerinden çıkılması gerekmektedir.
Müşteri luna hsm client erişimi için gerekli Chrystoki.conf'u hazırlayarak openshift/k8s'de bir secret'a yazmalı ugulamaya (gmu apiye) çalışma anında environment variable olarak pasgeçmelidir.
Kubernetes ve Openshift gibi farklı IP'lerden ayağa kalkan uygulamalarda HSM üzerinde "IP Check" in kaldırılması önerilir veya alternatif olarak k8s/openshift gmu api ip aralığı bir NAT tanımı ile hsm cluster'a tek bir ip olarak çıkacak şekilde ayarlanmalı ve o ip için bir HSM client sertifikası üretililerek (hsm commandline araçları ile) HSM'de de tanımlanabilir. Bu client sertifika ile hsm server sertifikaları Protel'e iletilerek müşteriye özel hazırlanacak gmu api imajı içerisinde yer alması Protel tarafından sağlşanacaktır. Luna hsm client gmu imajı içerisinde kurulu olarak gelmektedir.
Aşağıdaki adresler için intranet dışına erişim sağlanmalıdır:
- http://depo.kamusm.gov.tr --> Tübitak ESYA APi işletici kuruluş sertifikası validasyonu aşamasında çağrı yapıyor (kamusm root sertifikaları erişimi, Sertifika İptal Listesi erişimi,...gibi)
- http://testocsp.kamusm.gov.tr --> Tübitak ESYA APi işletici kuruluş sertifikası validasyonu aşamasında çağrı yapıyor
- http://kamusm.bilgem.tubitak.gov.tr --> Tübitak ESYA APi işletici kuruluş sertifikası validasyonu aşamasında çağrı yapıyor
- https://kamusm.bilgem.tubitak.gov.tr --> Tübitak ESYA APi işletici kuruluş sertifikası validasyonu aşamasında çağrı yapıyor
- http://cisdupmms2.kurumsal.kamusm.gov.tr --> Tübitak ESYA APi işletici kuruluş sertifikası validasyonu aşamasında çağrı yapıyor
- http://ec384ocsp.kamusm.gov.tr --> Tübitak ESYA APi işletici kuruluş sertifikası validasyonu aşamasında çağrı yapıyor
- http://zd.kamusm.gov.tr --> kamusm zaman damgası servisi
- https://www.gib.gov.tr/fileadmin/HTML/vergidairebaskanlik/vergidairelerilistesi.pdf --> GİB'in yayınladığı vergi daireleri listesi (asenkron job peryodik olarak bu listeyi çekerek lokal veritabanına yazıyor)
- http://checkip.amazonaws.com --> (HTTP-GET) sunucunun dışarı açıldığı dış ip adresini elde etmesi için
Zaman damgası servisi için e-güveni kullanan müşterilerimiz şu adreslere de erişimi açmalıdır:
- http://ocsp384.e-guven.com/status/ocsp 213.14.248.73
- http://ocsp2.e-guven.com/ocsp.xuda 213.14.248.11
- http://crl384.e-guven.com/ECCNESS7.crl 213.14.248.98
- http://sil.e-guven.com/ElektronikBilgiGuvenligiASGKNESIS2/LatestCRL.crl 213.14.248.58
- http://ts384.e-guven.com/ 213.14.248.106
Sistemdeki Entegratör Bilgileri
Protel Entegratör
Web servis Adresleri
Test Ortamı
AUTHURL -> https://authrestapitest.protel.com.tr
EARCHIVEURL -> https://earchiveinvoicerestapitest.protel.com.tr
EINVOICEURL -> https://einvoicerestapitest.protel.com.tr
Prod Ortamı
AUTHURL -> https://authrestapi.protel.com.tr
EARCHIVEURL -> https://earchiveinvoicerestapi.protel.com.tr
EINVOICEURL -> https://einvoicerestapi.protel.com.tr
E-Arşiv Doğrulama Adresleri
Test Ortamı
https://protelgib.protel.com.tr/EArsivFatura
Prod Ortamı
https://entegrator.protel.com.tr/EArsivFatura
E-Logo Entegratör
Web Servis Adresleri
Test Ortamı
APIURL -> https://pb-demo.elogo.com.tr/PostBoxService.svc?wsdl
E-Adisyon Service Url -> https://eadisyonapi-demo.elogo.com.tr
Prod Ortamı
APIURL -> https://pb.elogo.com.tr/PostboxService.svc?wsdl
E-Adisyon Service Url -> https://eadisyonapi.elogo.com.tr
E-Arşiv Doğrulama Adresleri
Test Ortamı
Prod Ortamı
https://faturasorgulama.elogo.com.tr
E-Finans Entegratör
Web Servis Adresleri
Test Ortamı
EARCHIVESVCURL -> https://earsivtest.efinans.com.tr/earsiv/ws/EarsivWebService?wsdl
EARCHIVEUSERSVCURL -> https://connectortest.efinans.com.tr/connector/ws/userService?wsdl
EINVOICESVCURL -> https://erpefaturatest1.qnbefinans.com/efatura/ws/connectorService?wsdl
EINVOICEUSERSVCURL -> https://erpefaturatest1.qnbefinans.com/efatura/ws/userService?wsdl
Prod Ortamı
EARCHIVESVCURL -> https://earsivconnector.efinans.com.tr/earsiv/ws/EarsivWebService?wsdl
EARCHIVEUSERSVCURL -> https://efinansconnector.efinans.com.tr/connector/ws/userService?wsdl
EINVOICESVCURL -> https://efaturaconnector.efinans.com.tr/connector/ws/connectorService?wsdl
EINVOICEUSERSVCURL -> https://efinansconnector.efinans.com.tr/connector/ws/userService?wsdl
E-Arşiv Doğrulama Adresleri
Test Ortamı
Prod Ortamı
https://earsiv.efinans.com.tr/earsiv/sorgula.jsp
SabancıDX Entegratör
Web Servis Adresleri
Test Ortamı
EARCHIVEURL -> https://efaturatest.edoksis.net/EArchiveService.asmx
EINVOICEUBLTRURL -> https://efaturatest.edoksis.net/FaturaUBLTRService.asmx
EINVOICEURL -> https://efaturatest.edoksis.net/FaturaService.asmx
Prod Ortamı
EARCHIVEURL ->
EINVOICEUBLTRURL ->
EINVOICEURL ->
Digital Planet Entegratör
Web Servis Adresleri
Test Ortamı
APIURL -> https://integrationservicewithoutmtomtest.eveelektronik.com.tr/IntegrationService.asmx?wsdl
Prod Ortamı
APIURL -> https://integrationservicewithoutmtom.digitalplanet.com.tr/IntegrationService.asmx?wsdl
E-Arşiv Doğrulama Adresleri
Test Ortamı
Prod Ortamı
https://earsivfatura.digitalplanet.com.tr
KocSistem Entegratör
Web Servis Adresleri
Test Ortamı
EARCHIVEURL -> http://erpconnector-edevlettest.kocsistem.com.tr/ArchiveInvoiceService.svc?singleWsdl
EINVOICEURL ->
Prod Ortamı
EARCHIVEURL ->
EINVOICEURL ->
Uyumsoft Entegratör
Web Servis Adresleri
Test Ortamı
APIURL -> https://efatura-test.uyumsoft.com.tr/services/integration?wsdl
Prod Ortamı
APIURL -> https://efatura.uyumsoft.com.tr/Services/Integration?wsdl
E-Arşiv Doğrulama Adresleri
Test Ortamı
Prod Ortamı
https://portal.uyumsoft.com.tr/faturasorgula
Minerva Entegratör
Web Servis Adresleri
Test Ortamı
AUTHURL -> https://efaturatest.doganedonusum.com/AuthenticationWS?wsdl
EARCHIVEURL -> https://efaturatest.doganedonusum.com/EIArchiveWS/EFaturaArchive?wsdl
EINVOICEURL -> https://efaturatest.doganedonusum.com/EFaturaOIB?wsdl
Prod Ortamı
AUTHURL -> https://connector.doganedonusum.com/AuthenticationWS?wsdl
EARCHIVEURL -> https://connector.doganedonusum.com/EIArchiveWS/EFaturaArchive?wsdl
EINVOICEURL -> https://connector.doganedonusum.com/EFaturaOIB?wsdl
Süper Entegratör
Web Servis Adresleri
Test Ortamı
AUTHURL -> https://authrestapitest.superentegrator.com
EARCHIVEURL -> https://earchiveinvoicerestapitest.superentegrator.com
EINVOICEURL -> https://einvoicerestapitest.superentegrator.com
Prod Ortamı
AUTHURL -> https://authrestapi.superentegrator.com/
EARCHIVEURL -> https://earchiveinvoicerestapi.superentegrator.com/
EINVOICEURL -> https://einvoicerestapi.superentegrator.com/
Fatura gönderiminde sorgulama için gerekli olan, Zip formundaki GİB mükellef listesinin indirileceği adresler:
GİB mükellef GB (gönderici birim) listesi adresi:
Test Ortamı
https://merkeztest.gib.gov.tr/EFaturaMerkez/newUserGbListxml.zip
Prod Ortamı
https://merkez.efatura.gov.tr/EFaturaMerkez/newUserGbListxml.zip
GİB mükellef PK (posta kutusu) listesi adresi:
Test Ortamı
https://merkeztest.gib.gov.tr/EFaturaMerkez/newUserPkListxml.zip
Prod Ortamı
https://merkez.efatura.gov.tr/EFaturaMerkez/newUserPkListxml.zip
Prod ortamı mükellef listeleri için IP kısıtlaması bulunuyor. GİB sadece Entegratörlere ve E-faturayı entegrasyon yontemi ile kullanan firmalara erişim veriyor. Bu adreslere erişim için GİB tarafından izin alınması gerekir.
Uygulamayı başlatmak için;
Öncelikle gerekli tüm veritabanları açılarak ilgili dbscriptleri çalıştırılır.
Uygulamaya temel veritabanı erişim bilgileri ortam değişkendleri vasıtasıyla verilmektedir, veritabanı şifreleri de aynı şekilde secret'lardan alınarak verilir. Detaylar için Protel DevOPS ekibi ile irtibata geçebilirsiniz.
Uygulama Kubernetes veya Openshift ile ayağa kaldırılır ve browser üzerinden API adresi çağırıldığında "Protel GMU API" metninin geldiği gözlemlenir.
/editconfig
adresi ile plugin konfigürasyon sayfasına girilir, şifreyi Protel'den temin etmelisiniz. Girilen ekranda key/value ikilisi olarak plugin konfigürasyonları düzenlenebilir halde gelecektir. Bu sayfa prod ve staging ortamlarında güvenlik sebebiyle kapalıdır. (Bu ortamlarda direkt Master veritabındaki Cfg tablosundan değiştirilebilir) Kurulumunuza uygun düzenlemeyi yaptıktan sonra en altta yer alan Kaydet düğmesi ile değişiklikleri kaydedin ve uygulamayı tekrar yeniden başlatın.Uygulama ayağa kalktığında
/status
sayfasına girerek bağlı tüm servislerin erişebilir olduğunu kontrol edin./healthz
adresi ile de status bilgilerini json olarak elde edebilirsiniz. "GMU Merkez Servisleri" başlığını açtığınızda GMU API'den her bir servisin erişim durumu görüntülenecektir. Kırmızı olanlar sorunludur ve details kolonundan ve ELK loglarından hata detayı elde edebilrsiniz.Status sayfası tümüyle yeşile döndüğünde,
/doc
(swagger/ndoc formatında) ve/doc2
(swagger/swashbuckle formatında) ile API dökümantasyonuna erişebilirsiniz. İlk testlerinizi/doc2
sayfasından API çağrıları ile de yapabilirsiniz.Son aşamada GMU Pos API kurulumu veya Client SDK testleri ile devam edebilirsiniz.
Uygulamanın çalışması için gerekli ortam değişkenleri(environment variable) aşağıdaki şekildedir;
GMU_DisableApiDoc
// Api dökümantasyonu (swagger, redoc) varsayılan olarak açıktır, true yapılarak kapatılabilir. (ör prod ortamı için)
GMU_ApiUrl
// GMU api adresi. Proxy ile dışa açılabileceğinden GMU dış adresini uygulama kendisi otomatik tespit edemez. Healthcheck sistemi için gerekli.
GMU_WebUrl
// GMU arayüz adresi. Şuan sadece şifremi unuttum epostasına şifre sıfırlama url'i eklemek için kullanılır
GMU_MasterDBPassword
// Master veritabanı şifresi
GMU_MasterDBConnectionString
// Master veritabanı bağlantı bilgileri.
// Format: Server=<server>;Database=<db>;User Id=<uid>;Password=
GMU_OperationDBPassword
// Operasyon veritabanı şifresi
GMU_OperationDBConnectionString
// Operasyon veritabanı bağlantı bilgileri.
//Format: Server=<server>;Database=<db>;User Id=<uid>;Password=
GMU_XadesBESDBPassword
// XadesBes veritabanı şifresi
GMU_XadesBESDBConnectionString
// XadesBes veritabanı bağlantı bilgileri.
// Format: Server=<server>;Database=<db>;User Id=<uid>;Password=
GMU_XadesADBPassword
// XadesA veritabanı şifresi
GMU_XadesADBConnectionString
// XadesA veritabanı bağlantı bilgileri.
// Format: Server=<server>;Database=<db>;User Id=<uid>;Password=
GMU_HealthCheckDBPassword
// Healthcheck sisteminin veritabanı şifresi
GMU_HealthCheckDBConnectionString
// HealthCheck sisteminin veritabanı bağlantı bilgileri.
// Format: Server=<server>;Database=<db>;User Id=<uid>;Password=
GMU_JobDBPassword
// Hangfire veritabanı şifresi
GMU_JobDBConnectionString
// Hangfire veritabanı bağlantı bilgileri.
// Format: Server=<server>;Database=<db>;User Id=<uid>;Password=
GMU_RedisPassword
// Redis şifresi
GMU_RedisConnectionString
// Redis bağlantı bilgileri.
// Format: addres:port,defaultDatabase=1,password= Birden fazla adres desteği vardır: addres1:port1,addres2:port2,defaultDatabase=1,password= gibi
GMU_RedisCertificateFullPath
// Redis Client'ın TLS desteği için kullanacağı sertifikanın dosya yolu.
// Eğer boş bırakılır ise TLS olmadan bir bağlantı kurulur.
GMU_ELKConnectionString
// ELK bağlantı bilgileri. Birden fazla adres girilebilir.
// Format: addres;addres;addres. Zorunlu değildir.
GMU_ConsoleLogLevel
// Console loglarının en düşük seviyesi. Değer girilmez ise default değer Warning'dir
GMU_ELKLogLevel
// ELK loglarının en düşük seviyesi. Değer girilmez ise default değer Information'dır
GMU_APMConnectionString
// APM bağlantı bilgileri, zorunlu değildir
GMU_GIB_USER_PKLIST_URL
// Zip formundaki GİB mükellef PK (posta kutusu) listesinin indirileceği adres (her gece indirilip yerel veritabanı mükellef listesi güncellenir). GİB IP kısıtlaması eklediğinden, buraya erişimi olan bir proxy adres de verilebilir
GMU_GIB_USER_GBLIST_URL
// Zip formundaki GİB mükellef GB (gönderici birim) listesinin indirileceği adres (her gece indirilip yerel veritabanı mükellef listesi güncellenir). GİB IP kısıtlaması eklediğinden, buraya erişimi olan bir proxy adres de verilebilir
GMU_HSM_DRIVER_LIBRARY_PATH
// HSM clientın kurulu olduğu yerdeki pkcs11 cryptoki kütüphanesi yolu. Windows'da bir dll dosyasını, linux'da ise so dosyasını gösteriyor olmalı. (örnek luna-linux için: /usr/safenet/lunaclient/libs/64/libCryptoki2_64.so)
GMU_HSM_TOKEN_LABEL
// HSM'deki GMU işletici kuruluş sertifika ve secret'inin olduğu partisyon tokenı Label'ı, zorunludur.
GMU_HSM_ROOTCERT_CERT_LABEL
// HSM'deki GMU işletici kuruluş sertifikasının sertifika nesnesi Label'ı.
GMU_HSM_ROOTCERT_PUBLICKEY_LABEL
// HSM'deki GMU işletici kuruluş sertifikasının public key Label'ı.
GMU_HSM_ROOTCERT_PRIVATEKEY_LABEL
// HSM'deki GMU işletici kuruluş sertifikasının private key Label'ı.
GMU_HSM_ENCRYPTION_KEY_LABEL
// HSM'de kriptolama için kullanılacak AES secret key'in Label'ı.
// DİKKAT!
// Bu anahtar yedekli olmalı, bir sebepten silinir/kaybedilirse tüm kriptolu veri kaybedilir, geri dönüşü olmaz.
GMU_HSM_CRYPTOOFFICER_PIN
// HSM CO (Crypto Officer) pin. HSM erişimi için zorunludur.
GMU_HSM_SECURITYOFFICER_PIN
// HSM SO (Security Officer) şifresi.
// Bu alan sadece test ortamında softhsm (hsm emülatör) kullanılıyor ise gerekli, fiziksel hsm kullanımında güvenlik sebebiyle girilmemeli boş bırakılmalıdır.
GMU_TIMESTAMPSERVER_HOST
// Xades-A belgelere zaman damgası basmak için gerekli zaman damgası sunucu adresi.
GMU_TIMESTAMPSERVER_USERID
// Xades-A belgelere zaman damgası basmak için gerekli zaman damgası sunucu erişim kullanıcı adı.
GMU_TIMESTAMPSERVER_PASSWORD
// Xades-A belgelere zaman damgası basmak için gerekli zaman damgası sunucu erişim şifresi.
GMU_TIMESTAMPSERVER_MINREMAININGCREDITLIMIT
// Zaman damgası kontörü belirtilen değerin altında ise uyarı maili atılır.
// Boş bırakılabilir varsayılan değeri 15.000'dir
GMU_EMAIL_ENABLED
// true/false, GMU API e-posta gönderimi yapacak mı (sistem uyarı e-postaları, fatura epostaları).
// GMU e-posta göndermeyecekse fatura gönderimini entegratör yapmalıdır.
GMU_SYSTEMEMAILPROVIDERKEY
// GMU_EMAIL_ENABLED true ise sistem maillerini gönderecek servisin key bilgisi
GMU_SYSTEMEMAILPROVIDERUSERNAME
// GMU_EMAIL_ENABLED true ise sistem maillerini gönderecek servisin username bilgisi
GMU_SYSTEMEMAILPROVIDERPASSWORD
// GMU_EMAIL_ENABLED true ise sistem maillerini gönderecek servisin password bilgisi
GMU_SYSTEMEMAILPROVIDERNAME
// GMU_EMAIL_ENABLED true ise sistem maillerini gönderecek servisin adı
GMU_SYSTEMEMAILSENDER
// GMU_EMAIL_ENABLED true ise sistem maillerini gönderecek adres
GMU_SUPPORTEMAILS_DBSUPPORT
// GMU_EMAIL_ENABLED=true ise; Veritabanı erişim hatası gibi durumlarda uyarı e-postalarının kimlere atılacağı.
// Noktalı virgül ile ayrılarak birden fazla adres girilebilir.
GMU_SUPPORTEMAILS_HSMSUPPORT
// GMU_EMAIL_ENABLED=true ise; HSM erişim hatası gibi durumlarda uyarı e-postalarının kimlere atılacağı.
// Noktalı virgül ile ayrılarak birden fazla adres girilebilir.
GMU_SUPPORTEMAILS_INTEGRATORSUPPORT
// GMU_EMAIL_ENABLED=true ise; Entegratör erişim hatası gibi durumlarda uyarı e-postalarının kimlere atılacağı.
// Noktalı virgül ile ayrılarak birden fazla adres girilebilir.
GMU_SUPPORTEMAILS_DEVOPSSUPPORT
// GMU_EMAIL_ENABLED=true ise; Redis, ELK erişim hatası gibi devops ile ilgili hata durumlarında uyarı e-postalarının kimlere atılacağı.
// Noktalı virgül ile ayrılarak birden fazla adres girilebilir.
GMU_SUPPORTEMAILS_XADESSUPPORT
// GMU_EMAIL_ENABLED=true ise; Gecelik Xades Arşiv oluşturma raporlarının hangi adreslere gönderileceği.
// Noktalı virgül ile ayrılarak birden fazla adres girilebilir.
GMU_SMS_ENABLED
// true/false. E-Belge'nin(E-Arşiv, E-Smm vb.) gösterim url'inin ve OTP kodunun SMS ile gönderilebilmesi için gereken ortam değişkenidir. false olduğunda herhangi bir SMS gönderimi yapılmaz.
GMU_OTP_ENABLED
// true/false. Tebliğ kapsamında sisteme bir cihaz ilk kez eklendiğinde SMS ile OTP doğrulama yapılır.Eğer GMU_SMS_ENABLED ortam değişkeni false ise OTP de false(inaktif) olur. Banka uygulaması üzerinde çalışan GMU SDK gibi zaten OTP doğrulama yapılmış platformlarda OTP kapatılmalıdır.
GMU_DEFAULTSMSPROVIDER
// Varsayılan SMS plugini Id'si (ExtensionProduct tablosundaki Id'yi göstermeli).
// İleride birden fazla SMS hizmet sağlayıcısı entegrasyonu yapılma olasılığına karşı eklendi.
GMU_PLUGIN_EMAIL_SendGrid_APIKEY
// SendGrid plugini api keyi.
GMU_PLUGIN_SMS_Codec_UID
// Codec FastApi erişim kullanıcı adı.
GMU_PLUGIN_SMS_Codec_PWD
// Codec FastApi erişim şifresi.
GMU_ExposeSensitiveLogs
// true/false. Değer girilmemiş ise veya false seçilmiş ise hassas veri içeren tüm api çağrılarının logları gizlenir.
GMU_ExposeErrorDetails
// true/false. Eğer true seçilir ise hatalı çağrılarda response kısmındaki details ve stacktrace açık gelir.
// Değer girilmez veya false yapılır ise bu alanlar response'da null gözükür.
GMU_ELKApiKey
// ELK tarafında Api Key ile authentication isteniyorsa, buraya istenilen değer yazılmalıdır. Aksi takdirde çağrılar 401 UnAuthorized olarak sonuçlanır.
GMU_ELKAuthUsername
// ELK tarafında Username/Password ile (Basic) authentication isteniyorsa, buraya ilgili username bilgisi yazılmalıdır.
// Eğer Password alanı da dolu değilse Basic Auth konfigürasyonu yapılmaz. ApiKey Authentication bilgileri de dolu ise, öncelik ApiKey Authentication'a verilir.
GMU_ELKAuthPassword
// ELK tarafında Username/Password ile (Basic) authentication isteniyorsa, buraya ilgili password bilgisi yazılmalıdır.
// Eğer Username alanı da dolu değilse Basic Auth konfigürasyonu yapılmaz. ApiKey Authentication bilgileri de dolu ise, öncelik ApiKey Authentication'a verilir.
GMU_ELKIndexName
// GMU Loglarının ELK tarafında hangi Index'e atılması gerektiğini belirtir.
// Örn: logstash-{0:yyyy.MM.dd}
// Eğer değer girilmezse GMU tarafında default değer verilir.
// Default değer: gmuapi-log-{0:yyyy.MM.dd}
GMU_ELKTemplateName
// GMU Loglarının ELK tarafında hangi Template'e atılması gerektiğini belirtir.
// Örn: serilog-events-template.
// Eğer değer girilmezse GMU tarafında default değer verilir.
// Default değer : serilog-gmuapi-template
GMU_ELKIndexAliases
// ELK için hangi index aliaslarının kullanılacağını belirtir.
// Aliaslar virgül ile ayrılmalıdır. Örn: alias1,alias2,alias3.
// Boş bırakılabilir, varsayılan değeri yoktur.
GMU_IntegratorSendInvoiceTimeoutSeconds
// Opsiyonel, değer verilmezse veya 0 verilirse varsayılan değer olarak 30 kullanılır.
// Entegratöre fatura gönderim çağrısının sonlanması burada saniye cinsinden verilen süre kadar beklenip, entegratör bu süre sonuna kadar yanıt dönmezse fatura daha sonra asenkron job tarafından gönderilmek üzere offline kaydedilir ve client'a hata verilmez / başarılı sonuç döner, akış başarılı devam eder.
GMU_TaxOfficeListUrl
// GİB'in vergi daireleri listesini yükleyeceği web adresi.
// Şuan için GİB listeyi şu adresten sadece PDF formatında yayınlıyor: https://www.gib.gov.tr/fileadmin/HTML/vergidairebaskanlik/vergidairelerilistesi.pdf
GMU_TokenExpirationForAdmin
// Admin kullanıcısının tokenının geçerlilik süresinin dakika cinsinden değeri.
// Boş bırakılabilir.
GMU_TokenExpirationForDevice
// Device kullanıcılarının tokenlarının geçerlilik süresinin dakika cinsinden değeri.
// Boş bırakılabilir.
GMU_TokenExpirationForCustomer
// Customer kullanıcılarının tokenlarının geçerlilik süresinin dakika cinsinden değeri.
// Boş bırakılabilir.
GMU_TokenExpirationForEmployee
// Employee kullanıcılarının tokenlarının geçerlilik süresinin dakika cinsinden değeri.
// Boş bırakılabilir.
GMU_TokenExpirationForIntegration
// Entegrasyon kullanıcısının tokenının geçerlilik süresinin dakika cinsinden değeri.
// Boş bırakılabilir.
GMU_DisableTimestampHealthcheck
// VarsaYılan değeri false, Zaman damgası servisi için healtcheck kontrolünü kapatmak için true yapınız.
// GMU Zaman Damgası healtcheck E-güven zaman damgası ile çalışmaz, e-güven kullanıyorsanız lütfen disable edin.
GMU_AddDeviceWithIntegrationIdCheckEnabled
// true/false.
// Eğer true seçilir ise cihaz eklenirken requestteki integrationId dolu ise ve aynı seri numarasına ait farklı integrationIdsi olan başka aktif cihaz var ise aktif cihaz pasif edilir yeni cihaz eklenir.
// Boş bırakılabilir.
GMU_EnableESYAApiLogging
// true/false
// Varsayılan: false
// Detaylı ESYA api loglaması yapar. Çok fazla log ürettiğinden problem çözme mecburiyeti dışında kapalı tutulması önerilir.
GMU_HMACSecret
// Android client GMU Rest Api ile mesajlaşma esnasında MITM (Man In The Middle) attack'a karşı HMAC (Keyed-Hash Message Authentication Code) kullanır.
// Buraya girilen secret ile Android SDK'ya init aşamasında pasgeçilen secret aynı olmalı.
// Secret herhangi bir random hex generator ile vb oluşturulabilir.
// Bir işletici kuruluş bazında her ortamda aynı değere sahip olmalıdır.
GMU_DocumentSlipHtmlTemplateFullPath
// GMU Api tarafından oluşturulan Bilgi Fişi Html Template'inin dışarıdaki bir dosya yolundan alınabilmesini sağlar.
// Full Path beklenir. Örn: /opt/template/Bilgifisi.html
// Boş bırakılırsa default html template kullanılır. Api dosya yoluna erişemez veya dosyayı okuyamaz ise hata fırlatır ve ayağa kalkmaz.
GMU_DaySpanToKeepHealthCheckDBHistory
// GMU HealthCheckDB'deki HealthCheckExecutionHistories ve Failures Tablolarındaki verileri kaç günlük tutacağını belirler.
// Örn: 30 verilirse, 30 günden eski olan kayıtları bu tablolarda tutmaz.
// Boş bırakılabilir, varsayılan 15 tir.
GMU_DaySpanToKeepXadesBesFileHistory
// GMU Xades-BES verilerini silen Hangfire Job'ında kaç günden eski verileri sileceğini belirler. Opsiyonel.
// Girilmez ise Hangfire job'ı sisteme register edilmez. Örn: 90 verilirse, 90 günden eski olan Xades-BES kayıtlarını siler.
GMU_HealthCheckPeriodSeconds
// GMU Api'de Sistemin (Veritabanları, Pluginler, Redis, ELK vs.) sağlık durumunu kontrol eden HealthCheck sisteminin kaç saniye aralıklarla çalışacağını belirler.
// Boş bırakılabilir, varsayılan 30 dur.
GMU_PdfServiceInternalNetworkUrl
// Opsiyonel - pdf servis adresi, değer verilmediği taktirde işleyişte bir aksama yaşanmaz.
// GMU'nun da pdf üretebilmesi istendiği durumlarda (örneğin bilgi fişi için veya entegratörden pdf alınamadığı senaryolarda) html -> pdf dönüşümü yapan servis bu parametre dolu ise kullanlır.
// PDF Servisi dışarı açılmamalı, buraya gmu api'nin iç networkden servise erişeceği adres verilir.
GMU_ApiInternalNetworkUrl
// Opsiyonel - GMU api'nin lokal network adresi, bu alan dolu ise ve pdf servisi de kullanılıyorsa pdf servisine fatura html urlleri lokal network adresi olarak verilir, performans ve güvenlik açısından bu yöntem önerilir.
GMU_PLUGIN_EMAIL_Smtp_SERVER
// SMTP plugini aktif edilmek isteniyorsa SMTP sunucu bilgisi.
// Boş bırakılabilir. Girilmez ise SMTP plugin servisi çalışmaz.
GMU_PLUGIN_EMAIL_Smtp_SERVERPORT
// SMTP sunucu port bilgisi.
// Smtp plugini aktif edilmek isteniyorsa zorunludur.
GMU_PLUGIN_EMAIL_Smtp_ENABLESSL
// true/false.
// SMTP mail gönderiminin SSL ile mi yapılacağını belirtir.
GMU_PLUGIN_EMAIL_Smtp_USERNAME
// SMTP bağlantısı için kullanıcı adı.
// SMTP sunucucu tarafında zorunlu değil ise boş bırakılabilir.
GMU_PLUGIN_EMAIL_Smtp_PASSWORD
// SMTP bağlantısı için kullanıcı şifresi.
// SMTP sunucucu tarafında zorunlu değil ise boş bırakılabilir.
GMU_DisableHmacAuth
// true/false.
// Varsayılan: false
// Değer girilmemiş ise veya false seçilmiş ise HmacAuth kontrolu var eğer true girilmiş işe HmacAuth kontrolune bakılmıyor.
GMU_RootCertExpireDateWarningDayLimit
// İşletici kuruluş sertifikasının bitmesine ne kadar zaman kaldıktan sonra sistem tarafından mail atılması gerektiğine karar veren değerdir.
// Gün bazında verilmelidir, varsayılan 90 gün.
// Örneğin : Sertifika 100 gün sonra zaman aşımına uğruyor ve değer olarak 100 girildiyse, her gün Xades-A oluşturulma esnasında sertifikanın zaman aşımına uğrayacağı tarih hakkında uyarı maili atılır.
GMU_DoNotSendFingerPrintToSdk
// true/false.
// Sertifika fingerprint'in AuthorizeDevice response'unda verilip verilmeyeceği bilgisi. true girilirse backend tarafından fingerprint için GMU_ApiUrl'e istek atılmaz ve response'da fingerprint bilgisi dönülmez.
GMU_JwtRSPrivateKeyPem
// Opsiyonel - JWT token imzalamada kullanılacak PEM formatında RSA-2048 sertifika private keyi.
// Şu veya benzeri bir araçla üretilebilir: https://travistidwell.com/jsencrypt/demo/ . JWT tokenlarda HMAC SHA256 yerine daha güvenli olan RS256 kullanılmak isteniyorsa bu konfigürasyon doldurulmalı.
GMU_DeactivateInactiveStoreAndDevicesJobEnabled
// true/false.
// Eğer true seçilir ise DeactivateInactiveDevicesAndStoresJob Hangifre Job'ı aktif edilir. Varsayılan false.
GMU_StorePassiveDayThreshold
// Şubenin pasif duruma alınması için belirlenen eşik değeri.
// Örneğin, 90 gün verilirse, şube son işlem tarihinden 90 gün geçtikten sonra pasif duruma alınır.
// Boş bırakılabilir, GMU_DeactivateInactiveStoreAndDevicesJobEnabled true ise varsayılan değer 90 gündür.
GMU_StoreNotificationDaysBeforePassiveDayThreshold
// Şubenin pasif duruma alınmadan önce şube sahibine kaç gün önce uyarı e-postası gönderileceğini belirler.
// Örneğin, 7 gün verilirse, şubenin pasif duruma alınmadan önce şube sahibine 7 gün öncesinden uyarı e-postası gönderir.
// Boş bırakılabilir, varsayılan değer 7 gündür.
GMU_DevicePassiveDayThreshold
// Cihazın pasif duruma alınması için belirlenen eşik değeri.
// Örneğin, 30 gün verilirse, cihaz son işlem tarihinden 30 gün geçtikten sonra pasif duruma alınır.
// Varsayılan: Boş bırakılabilir, GMU_DeactivateInactiveStoreAndDevicesJobEnabled true ise varsayılan değer 30 gündür.
GMU_DeviceNotificationDaysBeforePassiveDayThreshold
// Cihazın pasif duruma alınmadan önce cihaz sahibine kaç gün önce uyarı e-postası gönderileceğini belirler.
// Örneğin, 3 gün verilirse, cihazın pasif duruma alınmadan önce cihaz sahibine 3 gün öncesinden uyarı e-postası gönderir.
// Boş bırakılabilir, varsayılan değer 3 gündür.
GMU_PLUGIN_INTEGRATOR_ELogo_ADMINACCOUNTUSERNAME
// Elogo'dan alınan admin kullanıcı adı bilgisi.
// GMU_PLUGIN_INTEGRATOR_ELogo_ADMINACCOUNTPASSWORD değeri de girilmiş ise Elogo'yu kullanmak isteyen müşterilerden entegratör kullanıcı adı ve şifresi alınmaz, healthcheck sistemi sadece admin kullanıcısı için login olup servis durumunu kontrol eder.
GMU_PLUGIN_INTEGRATOR_ELogo_ADMINACCOUNTPASSWORD
// Elogo'dan alınan admin kullanıcı şifre bilgisi.
// GMU_PLUGIN_INTEGRATOR_ELogo_ADMINACCOUNTUSERNAME değeri de girilmiş ise Elogo'yu kullanmak isteyen müşterilerden entegratör kullanıcı adı ve şifresi alınmaz, healthcheck sistemi sadece admin kullanıcısı için login olup servis durumunu kontrol eder.
GMU_PLUGIN_INTEGRATOR_ELogo_PLATFORMID
// Elogo'dan alınan Platform bazlı ayrım için kullanılan PlatformId bilgisi.
// PLATFORMUUID ve PLATFORMVECTOR değeri de girilmiş ise bir anlam ifade eder aksi halde Elogo'ya platformlu gönderim yapılmaz. Eğer ki farklı bayilerin platformId bilgisi de eklenecek ise "GMU_PLUGIN_INTEGRATOR_ELogo_{bayi adı}_PLATFORMID" şeklinde eklenme yapılabilir.
GMU_PLUGIN_INTEGRATOR_ELogo_PLATFORMUUID
// Elogo'dan alınan Platform bazlı ayrım için kullanılan PlatformUuid bilgisi.
// PLATFORMID ve PLATFORMVECTOR değeri de girilmiş ise bir anlam ifade eder aksi halde Elogo'ya platformlu gönderim yapılmaz. Eğer ki farklı bayilerin platformUuid bilgisi de eklenecek ise "GMU_PLUGIN_INTEGRATOR_ELogo_{bayi adı}_PLATFORMUUID" şeklinde eklenme yapılabilir.
GMU_PLUGIN_INTEGRATOR_ELogo_PLATFORMVECTOR
// Elogo'dan alınan Platform bazlı ayrım için kullanılan PlatformVector bilgisi.
// PLATFORMID ve PLATFORMUUID değeri de girilmiş ise bir anlam ifade eder aksi halde Elogo'ya platformlu gönderim yapılmaz. Eğer ki farklı bayilerin platformVector bilgisi de eklenecek ise "GMU_PLUGIN_INTEGRATOR_ELogo_{bayi adı}_PLATFORMVECTOR" şeklinde eklenme yapılabilir.
GMU_PLUGIN_INTEGRATOR_Super_ADMINACCOUNTUSERNAME
// Super Entegratör'den alınan admin kullanıcı adı bilgisi.
// GMU_PLUGIN_INTEGRATOR_Super_ADMINACCOUNTPASSWORD değeri de girilmiş ise Super Entegratör'ü kullanmak isteyen müşterilerden entegratör kullanıcı adı ve şifresi alınmaz.
GMU_PLUGIN_INTEGRATOR_Super_ADMINACCOUNTPASSWORD
// Super Entegratör'den alınan admin kullanıcı şifre bilgisi.
// GMU_PLUGIN_INTEGRATOR_super_ADMINACCOUNTUSERNAME değeri de girilmiş ise Super Entegratör'ü kullanmak isteyen müşterilerden entegratör kullanıcı adı ve şifresi alınmaz.
GMU_RunMigrationOnStartup
// Veritabanı migration scriptlerinin otomatik çalıştırılmasını belirler.
// true/false
// Eğer true seçilir ise proje derlenirken db script otomatik çalıştırılır. Varsayılan değer false.
GMU_PLUGIN_INTEGRATOR_ELogo_{bayi adı}_ADMINACCOUNTUSERNAME
// Eğer ki farklı bayileri destekleyecek şekilde kullanılmak istenirse bayi adı belirtilen yere yazılmalıdır.
GMU_PLUGIN_INTEGRATOR_ELogo_{bayi adı}_ADMINACCOUNTPASSWORD
// Eğer ki farklı bayileri destekleyecek şekilde kullanılmak istenirse bayi adı belirtilen yere yazılmalıdır.
GMU_PLUGIN_INTEGRATOR_Protel_ADMINACCOUNTUSERNAME
// Protel Entegratör'den alınan admin kullanıcı adı bilgisi.
//GMU_PLUGIN_INTEGRATOR_Protel_ADMINACCOUNTPASSWORD değeri de girilmiş ise Protel Entegratör'ü kullanmak isteyen müşterilerden entegratör kullanıcı adı ve şifresi alınmaz.
GMU_PLUGIN_INTEGRATOR_Protel_ADMINACCOUNTPASSWORD
//Protel Entegratör'den alınan admin kullanıcı şifre bilgisi.
//GMU_PLUGIN_INTEGRATOR_Protel_ADMINACCOUNTUSERNAME değeri de girilmiş ise Protel Entegratör'ü kullanmak isteyen müşterilerden entegratör kullanıcı adı ve şifresi alınmaz.
GMU_EnableTokenBlacklisting
// Auth token'ların kara listeye alınmasını sağlar.
// true/false
// Eğer true seçilir ise redis bilgileride girilmelidir. Varsayılan değer false.
GMU_PLUGIN_SMS_WEBHOOK_WEBHOOK_URL
// SMS isteklerinin gönderileceği hedef HTTP endpoint adresini belirtir. Bu URL, SMS sağlayıcısının webhook hizmetini işaret etmelidir.
// Örneğin: GMU_PLUGIN_SMS_WEBHOOK_WEBHOOK_URL="https://example.com/sms/send"
GMU_PLUGIN_SMS_WEBHOOK_TOKEN_URL
// OAuth2 token endpoint adresini belirtir. Bu endpoint’e kullanıcı adı, şifre, client_id vb. bilgiler gönderilerek erişim token'ı elde edilir.
// Token alındıktan sonra SMS gönderimlerinde Authorization header’ı ile kullanılacaktır.
// Örneğin: GMU_PLUGIN_SMS_WEBHOOK_TOKEN_URL="https://example.com/oauth/token"
GMU_PLUGIN_SMS_WEBHOOK_USERNAME
// OAuth2 akışında kullanılacak olan kullanıcı adını belirtir.
// Örneğin: GMU_PLUGIN_SMS_WEBHOOK_USERNAME="myuser"
GMU_PLUGIN_SMS_WEBHOOK_PASSWORD
// OAuth2 akışı için gerekli olan kullanıcı şifresini belirtir.
// Örneğin: GMU_PLUGIN_SMS_WEBHOOK_PASSWORD="mypassword"
GMU_PLUGIN_SMS_WEBHOOK_CLIENT_ID
// OAuth2 istemci kimliğini belirtir. Bu kimlik, token alırken sunucuya hangi istemcinin istek yaptığını bildirir.
// Örneğin: GMU_PLUGIN_SMS_WEBHOOK_CLIENT_ID="myclientid"
GMU_PLUGIN_SMS_WEBHOOK_CLIENT_SECRET
// OAuth2 istemci sırrını (client_secret) belirtir. Token endpoint’te client_id ile birlikte kimlik doğrulaması için kullanılır.
// Örneğin: GMU_PLUGIN_SMS_WEBHOOK_CLIENT_SECRET="myclientsecret"
GMU_PLUGIN_SMS_WEBHOOK_CLIENT_TYPE
// OAuth2 token isteğinde eğer sunucu ek bir client_type alanı bekliyorsa bu değişkende belirtilmelidir.
// Opsiyonel bir parametredir, sunucu zorunlu kılmıyorsa tanımlanmayabilir.
// Örneğin: GMU_PLUGIN_SMS_WEBHOOK_CLIENT_TYPE="B2B"
GMU_PLUGIN_SMS_WEBHOOK_GRANT_TYPE
// OAuth2 akış tipini belirtir, genellikle "password" kullanılır.
// Örneğin: GMU_PLUGIN_SMS_WEBHOOK_GRANT_TYPE="password"
GMU_PLUGIN_SMS_WEBHOOK_EXTRA_HTTP_HEADERS
// SMS veya token isteklerine ek özel HTTP başlıkları eklemek için kullanılır. Virgülle ayrılmış key:value çiftleri şeklinde tanımlanır.
// Örneğin: GMU_PLUGIN_SMS_WEBHOOK_EXTRA_HTTP_HEADERS="Content-Type:application/json,guid:{guid},dialect:TR,ip:127.0.0.1,channel:ark,userId:userid"
// Buradaki {guid} placeholder'ı runtime'da özel bir GUID değeriyle değiştirilir.
GMU_PLUGIN_SMS_WEBHOOK_SENDSMS_EXTRA_HTTP_HEADERS
// OTP bilgileri gönderirken ekstra HTTP header bilgileri istekte gönderilecek ise bu environment variable tanımlanmalıdır.
// SMS veya token isteklerine ek özel HTTP başlıkları eklemek için kullanılır. Virgülle ayrılmış key:value çiftleri şeklinde tanımlanır.
// Örneğin: GMU_PLUGIN_SMS_WEBHOOK_SENDSMS_EXTRA_HTTP_HEADERS="guid:{guid},dialect:TR,ip:127.0.0.1,channel:ark,userId:userid"
// Buradaki {guid} placeholder'ı runtime'da özel bir GUID değeriyle değiştirilir.
GMU_UnregisterXadesAGenerationJob
// true/false
// Test ortamında Xades-A oluşturma jobının çalıştırılması istenmiyor ise bu envrionment "true" değeri girilmeli.
// Bir değer girilmez veya "false" girilir ise Xades-A job'ı çalışır.
// Production ortamına bir etkisi yoktur. Production ortamında her koşulda Xades-A oluşturma job'ı çalışır
GMU_GibServiceConfig_DataTransferJobEnabed
// true/false
// Eğer true seçilir ise GibDataTransferJobEnabed Hangifre Job'ı aktif edilir. Varsayılan false.
GMU_GibServiceConfig_Url
// GibDataTransfer Job'ının bağlantı kurduğu servis adresi.
GMU_GibServiceConfig_Username
// GibDataTransfer Job'ının bağlantı kurduğu servisin kullanıcı adı bilgisi.
GMU_GibServiceConfig_Password
// GibDataTransfer Job'ının bağlantı kurduğu servisin kullanıcı şifre bilgisi.
Database Kurulum
Tüm veritabanlarında collation: Latin1_General_CI_AS
GMU Master veritabanında gecelik GİB mükellef güncelleme job'ı tarafından aşağıdaki 2 tabloda truncate işlemi yapılmaktadır, truncate işlemi için gereken en az yetki db_owner'dır. truncate table GibUserTempPk; truncate table GibUserTempGb;
İlk kurulumda ve her versiyon geçişinde GMU API'nin kullandığı tüm veritabanları için güncel sb-scripttler paylaşılmaktadır. Paylaşım formatı: DBScript_{veritabanı tipi}.sql. Bir dbscript dosyası birden fazla kez çalıştırıldığında sorun çıkarmayacak şekilde hazırlanmıştır, her çalıştırmada veritabanının upgrade görmeyen kısmı varsa son versiyona yükseltir, son versiyonda ise işlem yapmaz.
Müşterilere kurulan veritabanlarında, isimlendirdeki sadece son kısım verecekleri isimde geçse bakım kolaylığı açısından yeterli. Örneğin Hangfire veritabanında Hangfire, Master veritabanında Master lafzı geçmesi yeterli, diğer kısımları müşteri istediği şekilde belirleyebilir.
GMU Operasyon (tenant) veritabanı önerilen isim formatı; production için: GMU_Prod_Operation , test için: GMU_Test_Operation, staging: GMU_Staging_Operation -> müşteriye özel verilerin tutulduğu veritabanı, bu veritabanı birden fazla sunucuya bölünerek çalışabilir.
GMU Master veritabanı önerilen isim formatı; production için: GMU_Prod_Master , test için: GMU_Test_Master, staging: GMU_Staging_Master -> user, tenant gibi global kayıtların tutulduğu veritabanı
GMU Hangfire veritabanı önerilen isim formatı; production için: GMU_Prod_Hangfire , test için: GMU_Test_Hangfire, staging: GMU_Staging_Hangfire -> distributed job scheduler veritabanı
HangFire isminde bir şema ihtiyacı vardır, Hangfire veritabanı için gönderdiğimiz dbscript bu şemayı kendisi açmaktadır.
GMU Healthcheck veritabanı önerilen isim formatı; production için: GMU_Prod_HealthCheck , test için: GMU_Test_HealthCheck, staging: GMU_Staging_HealthCheck -> healthcheck sonuçları saklanır, unhealty olma geçmişi tutulur.
GMU XadesA veritabanı önerilen isim formatı; production için: GMU_Prod_XadesA , test için: GMU_Test_XadesA, staging: GMU_Staging_XadesA -> 10 yıl saklanacak xades arşiv veritabanı, insert only (geceleri insert yapılır)
GMU XadesBES veritabanı önerilen isim formatı; production için: GMU_Prod_XadesBES , test için: GMU_Test_XadesBES, staging: GMU_Staging_XadesBES -> her transactionda bir insert yapılır, geceleri xadesA oluşurmak için okunup arşivleme sonrası silinir, yani günübirlik veri tutar
API tarafından sık sık;
Execution CountersAggregator is in the Failed state now due to an exception, execution will be retried no more than in 00:00:25
ve
Query processor could not produce a query plan because of the hints defined in this query. Resubmit the query without specifying any hints and without using SET FORCEPLAN.
error logları atılmaya başlandığında Hangfire veritabanında yer alan tüm tabloların kaldırılıp versiyon mailinde paylaşılan son DBScript_HangfireDB.sql scriptinin Hangfire veritabanında tekrar çalıştırılması gerekmektedir. Bu işlemin ardından API restart edilmeli ve GMU_ApiUrl/hfjobs sayfasından background jobların oluşup oluşmadığı gözlemlenmelidir.
Hangfire Jobları
Hangfire veritabanında çalışan jobları ve açıklamalarını aşağıda bulabilirsiniz;
SendSavedOfflineDocuments: GMU sisteminde fatura gönderimi sırasında eğer entegratörün sağlık durumu sağlıksız (Unhealthy) ise, faturalar entegratöre gönderilmeye çalışılmadan veritabanına offline olarak kaydedilir. Bu job ile de belirtilen süre aralıklarıyla veritabanına offline olarak kaydedilen faturaların entegratöre gönderimi (entegratörün sağlıklı olması durumunda) gerçekleştirilir. Varsayılan olarak saatte bir kere çalışır.
DeviceZNumberGeneration: GMU sisteminde oluşturulan cihazlar için bir Z numarası oluşturulur. Her aktif olduğu gün için (günde bir kere bile aktife çekilmesi yeterli) ise bu cihazın Z numarası bir arttırılır. Varsayılan olarak her gece 00:05'te çalışır.
GibTaxPayerUpdate: GİB mükellef listesinin güncellemesini yapar. Varsayılan olarak her gece 01:05'te çalışır.
XadesAGeneration: Bir önceki gün aktif durumda olan her cihaz için XadesA belgesi oluşturma işlemini yapar. Varsayılan olarak her gece 01:35'te çalışır.
FinalizeUncompletedTransactions: Faturası oluşmuş ama başarılı olarak kapatılmamış işlemler başarılı olarak tamamlanır. Varsayılan olarak her gece 01:50'de çalışır.
DeleteOldHealthCheckData: Healthcheck veritabanı HealthCheckExecutionHistories tablosundaki geçmiş kayıtları siler. Hangi aralıktan önceki verilerin silinmesini ayarlamak için GMU_DaySpanToKeepHealthCheckDBHistory envrionment variable'ını kontrol edebilirsiniz. Varsayılan olarak her gece 02:30'da çalışır.
GibStatusUpdate: E-Fatura belgelerinin GİB tarafındaki durumunu başarılı/başarısız olarak tamamlanana kadar kontrol edip tamamlandığında Invoice tablosunda GIBStatusCode ve GIBStatusText alanlarını günceller. Varsayılan olarak her sabah 06:05'te çalışır.
TaxOfficeUpdate: GMU sisteminde bir Store/Dükkan oluşturma sırasında girilen Vergi Dairesi (Tax Office) alanı GİB'in yayınladığı https://www.gib.gov.tr/fileadmin/HTML/vergidairebaskanlik/vergidairelerilistesi.pdf vergi daireleri listesi bu job aracılığıyla belirtilen periyotlarda çekilerek veritabanına yazımı sağlanır. Varsayılan olarak her pazartesi gece 03:00'da çalışır.
DeactivateInactiveStoreAndDevices: Sistemde "GMU_DeactivateInactiveStoreAndDevicesJobEnabled" ortam değişkeni "true" olarak girilmiş ise belirtilen tarihten itibaren Şube(Store) ve Cihaz'lar(Device) üzerinden herhangi bir işlem(transaction) yapılmadı takdirde o şube ve cihazı otomatik olarak pasife alır. Tarihler hakkında detaylı açıklama için GMU_StorePassiveDayThreshold, GMU_StoreNotificationDaysBeforePassiveDayThreshold, GMU_DevicePassiveDayThreshold ve GMU_DeviceNotificationDaysBeforePassiveDayThreshold ortam değişkenlerine bakılabilir.
GibDataTransfer: Sistemde "GMUGibServiceConfig_DataTransferJobEnabed" ortam değişkeni "true" olarak girilmiş ve "GMU_GibServiceConfig" ile başlayan ortam değişkenleri doldurulmuş ise bu job aktifleştirilir. Her yeni cihaz eklendiğinde, pasife çekildiğinde, silindiğinde cihazın son durumu bu job aracılığı ile Gib'e iletilir.
Joblar’ın varsayılan çalışma aralıkları değiştirilmek istenirse, GMU Master veritabanın Cfg tablosunda Key değeri JOB/... şeklinde aratarak ilgili Job'ın konfigürasyonu bulunup güncellenebilir.
Webhook Plugin Kurulumu
Aşağıda, Webhook tabanlı SMS gönderimi ve OTP doğrulama sürecini devreye almak için gereken tüm adımlar ve environment variable açıklamaları tek bir yerde özetlenmiştir. Bu rehber, sistemin SMS gönderimi yapabilmesi, OTP doğrulamasını devreye alabilmesi, gerekli OAuth2 ayarlarını yapabilmesi ve plugin’in aktif edilmesi için gerekenleri detaylı şekilde açıklar.
1. SMS ve OTP Genel Ayarları
GMU_SMS_ENABLED (true/false):
Bu değişken, sistemin SMS gönderimi yapıp yapmayacağını belirler.
- true ise SMS gönderimi aktiftir.
- false ise SMS gönderimi yapılmaz.
GMU_OTP_ENABLED (true/false):
Cihaz ilk kez eklendiğinde OTP (tek kullanımlık şifre) doğrulamasının SMS aracılığıyla yapılmasını belirler.
- true ise OTP doğrulaması aktiftir.
- false ise OTP doğrulaması yapılmaz.
Ayrıca, GMU_SMS_ENABLED=false
ise otomatik olarak OTP de devre dışı kalır; çünkü SMS gönderimi yoksa OTP gönderimi de mümkün değildir.
GMU_DEFAULTSMSPROVIDER:
Varsayılan SMS sağlayıcısını belirler. İleride birden fazla SMS sağlayıcısı kullanılabilir olması durumunda hangi sağlayıcının devrede olacağını bu değere bakarak karar verir.
Örneğin; GMU_DEFAULTSMSPROVIDER="Webhook"
şeklinde tanımlandığında, tüm SMS istekleri “Webhook” isimli plugin üzerinden yapılmaya çalışılır.
2. Webhook Tabanlı SMS Gönderimi İçin Gerekli Değişkenler
Eğer GMU_DEFAULTSMSPROVIDER
olarak Webhook seçildiyse ve GMU_SMS_ENABLED=true
ise aşağıdaki değişkenlerin doğru şekilde tanımlanması gerekir:
GMU_PLUGIN_SMS_WEBHOOK_WEBHOOK_URL:
SMS isteklerinin gönderileceği hedef HTTP endpoint adresidir. Bu URL, SMS sağlayıcısının webhook servisidir. Örneğin; GMU_PLUGIN_SMS_WEBHOOK_WEBHOOK_URL="https://example.com/sms/send"
. Eğer bu değer tanımlanmaz veya boş bırakılırsa SMS gönderim akışı devreye girmez, dolayısıyla token alma vb. süreçler de atlanır.
Webhook servisinin request modeli aşağıdaki şekildedir;
{
"Phone": "123...",
"MessageType": 5 // 5 = otp
"MessageTemplate": "Otp Kodunuz {{ OtpCode }}" // mesaj şablonunda verileri ifade etmek için kullanılmaktadır.
"Data": {"OtpCode":"12345"} // Mesajda geçen değişken veriyi belirtilen şekilde göndermek için kullanılmaktadır.
"GmuRefId": "abc..."
}
GMU_PLUGIN_SMS_WEBHOOK_TOKEN_URL:
OAuth2 token alma endpoint’idir. Bu endpoint’e kullanıcı adı, şifre, istemci kimlik bilgileri gibi parametreler gönderilerek erişim token’ı alınır.
Bu token, SMS gönderim isteğinde Authorization: Bearer {token} başlığı ile iletilir. Örneğin; GMU_PLUGIN_SMS_WEBHOOK_TOKEN_URL="https://example.com/oauth/token"
. Eğer bu değer tanımlanmazsa token alma işlemi yapılmaz, dolayısıyla SMS gönderimi direkt token olmadan yapılmaya çalışılır. Endpoint’in auth gereksinimleri buna göre değerlendirilmelidir.
GMU_PLUGIN_SMS_WEBHOOK_USERNAME:
OAuth2 ROPC akışında kullanılacak kullanıcı adıdır. Örneğin; GMU_PLUGIN_SMS_WEBHOOK_USERNAME="myuser"
GMU_PLUGIN_SMS_WEBHOOK_PASSWORD:
OAuth2 ROPC akışı için gerekli kullanıcı şifresidir. Örneğin; GMU_PLUGIN_SMS_WEBHOOK_PASSWORD="mypassword"
GMU_PLUGIN_SMS_WEBHOOK_CLIENT_ID:
OAuth2 istemci kimliği. Token istenirken sunucuya hangi istemcinin istek yaptığını belirtir. Örneğin;
GMU_PLUGIN_SMS_WEBHOOK_CLIENT_ID="myclientid"
GMU_PLUGIN_SMS_WEBHOOK_CLIENT_SECRET:
OAuth2 istemci sırrı. İstemci kimliğini doğrulamak için kullanılır. Örneğin; GMU_PLUGIN_SMS_WEBHOOK_CLIENT_SECRET="myclientsecret"
GMU_PLUGIN_SMS_WEBHOOK_CLIENT_TYPE
(Opsiyonel): OAuth2 sunucusu ek bir client_type parametresi bekliyorsa burada belirtilir. Örneğin; GMU_PLUGIN_SMS_WEBHOOK_CLIENT_TYPE="B2B"
. Bu parametre sunucuya bağlı olarak zorunlu veya opsiyonel olabilir. Gerekli değilse tanımlanmadan bırakılabilir.
GMU_PLUGIN_SMS_WEBHOOK_GRANT_TYPE:
OAuth2 akış tipidir. Genellikle password kullanılır. Örneğin; GMU_PLUGIN_SMS_WEBHOOK_GRANT_TYPE="password"
GMU_PLUGIN_SMS_WEBHOOK_EXTRA_HTTP_HEADERS:
SMS veya token isteklerine ek özel HTTP başlıkları eklemek için kullanılır. Değer virgülle ayrılmış key:value çiftlerinden oluşur. Örneğin; GMU_PLUGIN_SMS_WEBHOOK_EXTRA_HTTP_HEADERS="Content-Type:application/json,guid:{guid},dialect:TR,ip:127.0.0.1,channel:ark,userId:userid"
. Buradaki {guid} özel bir placeholder’dır. Runtime’da benzersiz bir GUID değeriyle değiştirilir. Diğer key:value çiftleri sabit değerlere sahiptir.
GMU_PLUGIN_SMS_WEBHOOK_SENDSMS_EXTRA_HTTP_HEADERS:
OTP bilgileri gönderirken ekstra HTTP header bilgileri istekte gönderilecek ise bu environment variable tanımlanmalıdır. SMS veya token isteklerine ek özel HTTP başlıkları eklemek için kullanılır. Virgülle ayrılmış key:value çiftleri şeklinde tanımlanır. Örneğin; GMU_PLUGIN_SMS_WEBHOOK_SENDSMS_EXTRA_HTTP_HEADERS="guid:{guid},dialect:TR,ip:127.0.0.1,channel:ark,userId:userid"
. Buradaki {guid} placeholder'ı runtime'da özel bir GUID değeriyle değiştirilir.
3. Plugin’in Cfg Tablosundan Aktifleştirilmesi
Yukarıdaki ayarların yanı sıra plugin’in veri tabanındaki Cfg tablosundan da aktif edilmesi gerekir. Aşağıdaki sorguyla plugin aktif hale getirilir. Böylece environment variable ayarları geçerli olduğunda SMS gönderim ve OTP akışı devreye girer.
UPDATE Cfg
SET [Value] = 'true'
WHERE [Key] = 'PLUGIN/SMS/Webhook/ENABLED';
4. Özet Akış
GMU_SMS_ENABLED=true
ve GMU_DEFAULTSMSPROVIDER="Webhook"
ayarlandığında sistem SMS gönderimini Webhook plugin üzerinden yapmaya hazırlanır. Gerekli OAuth2 parametreleri (TOKEN_URL, USERNAME, PASSWORD, CLIENT_ID, CLIENT_SECRET, GRANT_TYPE vb.)
ve WEBHOOK_URL
tanımlanırsa token alınıp SMS gönderimi başlar.
GMU_OTP_ENABLED=true
ise cihaz ekleme sırasında OTP doğrulama SMS ile yapılır. Eğer GMU_SMS_ENABLED=false
ise OTP otomatik kapanır.
Cfg tablosundan PLUGIN/SMS/Webhook/ENABLED
değeri true yapılarak plugin’in kullanılabilirliği onaylanır.
Aşağıdaki environment variable'ların tamamı dokümanda belirtildiği şekilde tanımlanmalıdır;
GMU_PLUGIN_SMS_WEBHOOK_WEBHOOK_URL
GMU_PLUGIN_SMS_WEBHOOK_TOKEN_URL
GMU_PLUGIN_SMS_WEBHOOK_USERNAME
GMU_PLUGIN_SMS_WEBHOOK_PASSWORD
GMU_PLUGIN_SMS_WEBHOOK_CLIENT_ID
GMU_PLUGIN_SMS_WEBHOOK_CLIENT_SECRET
GMU_PLUGIN_SMS_WEBHOOK_CLIENT_TYPE
GMU_PLUGIN_SMS_WEBHOOK_GRANT_TYPE
GMU_PLUGIN_SMS_WEBHOOK_EXTRA_HTTP_HEADERS
GMU_PLUGIN_SMS_WEBHOOK_SENDSMS_EXTRA_HTTP_HEADERS
Bu ayarlar tamamlandıktan sonra sistem SMS endpoint’ine istek atar, token gerekirse token alır ve SMS gönderimi gerçekleşir.
Bu şekilde tüm değişkenler, tablolar ve akış bir arada açıklanmış, yapılandırma yapan kişinin hangi ayarı neden ve nasıl yapacağı netleştirilmiştir.