# Kapsam ve Amaç: ## HHS ve YÖS Uygulamalarının BKM Entegrasyonu HHS ve YÖS Uygulamalarının BKM Entegrasyonu Günümüzde dijitalleşmenin hızla ilerlediği bankacılık sektörü, müşterilere daha hızlı ve kolay hizmet sunabilme amacıyla açık bankacılık yaklaşımını benimsemektedir. Bu yaklaşım, farklı bankaların ve finansal hizmet sağlayıcılarının, kullanıcıların izniyle veri ve ödeme emirlerini paylaşmasını sağlamaktadır. Bu çerçevede, Hesap Hizmeti Sağlayıcıları (HHS) ve Yetkili Ödeme Hizmeti Sağlayıcıları (YÖS) olarak adlandırılan iki önemli bileşen, kullanıcıların hesap bilgilerine erişim ve ödeme işlemleri yapabilmesini mümkün kılmak için entegre bir yapı oluşturmuştur. ### Kapsam: Bu entegrasyon, HHS ve YÖS uygulamalarının, Bankalararası Kart Merkezi'nin (BKM) sağladığı API'lar aracılığıyla banka müşterilerine hesap bilgileri ve ödeme emirlerini güvenli bir şekilde paylaşmasını amaçlamaktadır. Bu entegrasyon kapsamında aşağıdaki işlem adımları bulunmaktadır: #### Hesap Bilgisi Hizmetleri: * Kullanıcıların hesap eklemek için rıza kaydı oluşturabilmesi. * Rıza kaydı üzerinden kullanıcı yetkilendirmeleri yapılabilmesi. * Kullanıcıların hesap bilgilerini alabilmek, bakiyelerini görüntüleyebilmek ve hesap hareketlerini takip edebilmek. #### Ödeme Emri Başlatma Hizmeti: * Kullanıcıların ödeme emri rızalarını hazırlayabilmesi. * Hazırlanan rızaların kullanıcı tarafından yetkilendirilmesi. * Yetkilendirilen ödeme emirlerinin oluşturulması ve gerçekleştirilmesi. ### Amaç: Bu entegrasyonun temel amacı, banka müşterilerinin günlük finansal işlemlerini daha hızlı ve kolay bir şekilde gerçekleştirebilmesini sağlamaktır. HHS ve YÖS uygulamaları, banka müşterilerinin hesap bilgilerini ve ödeme emirlerini tek bir merkezi platform üzerinden yönetebilmesini sağlayarak kullanıcı deneyimini artırırken, aynı zamanda güvenliği de sağlamaktadır. **Bu entegrasyon sayesinde:** * Kullanıcılar, farklı bankalardaki hesap bilgilerine tek bir arayüzden erişebilir ve finansal durumlarını daha iyi yönetebilir. * Kullanıcılar, ödeme emirlerini hızlıca hazırlayabilir, onaylayabilir ve gerçekleştirebilirler. * Finansal hizmet sağlayıcıları, müşteri tabanını genişletirken daha iyi hizmet sunabilirler. * Bankacılık sektörü, dijital dönüşümü hızlandırarak daha rekabetçi bir yapı oluşturabilir. Sonuç olarak, HHS ve YÖS uygulamalarının BKM entegrasyonu, hem müşterilerin hem de finansal hizmet sağlayıcılarının faydalandığı modern ve etkili bir yaklaşımı temsil eder. Bu entegrasyon sayesinde finansal işlemler daha erişilebilir ve güvenli hale gelirken, bankacılık sektörü de dijital dönüşümün avantajlarından en üst düzeyde yararlanma imkanı bulmaktadır. # HHS ve YÖS Süreçleri # HHS Herhangi bir YÖS uygulamasından gelen istekler ve akış süreci gösterilmektedir. ## HHS Healthcheck API ```plantuml @startuml entity BKM entity BBTGateway as "BBT.Apisix Gateway" entity Consent participant HesapHizmetleri as "HesapHizmetleri" participant OdemeHizmetleri as "ÖdemeHizmetleri" participant Amorphie.Token as "Amorphie Token" BKM -> BBTGateway : GET odeme-emri-rizasi/health isteği BKM -> BBTGateway : GET hesap-bilgisi-rizasi/health isteği BKM -> BBTGateway : GET erisim-belirteci/health isteği activate BBTGateway BBTGateway -> HesapHizmetleri : GET /health activate HesapHizmetleri HesapHizmetleri --> BBTGateway : Status deactivate HesapHizmetleri BBTGateway -> OdemeHizmetleri : GET /health activate OdemeHizmetleri OdemeHizmetleri --> BBTGateway : Status deactivate OdemeHizmetleri BBTGateway -> Consent : GET /health activate Consent Consent --> BBTGateway : Status deactivate Consent BBTGateway -> Amorphie.Token : GET /health activate Amorphie.Token Amorphie.Token --> BBTGateway : Status deactivate Amorphie.Token alt Tüm Servisler Ayakta BBTGateway --> BKM : status="UP" else Herhangi Bir Servis Ayakta Değil BBTGateway --> BKM : status="DOWN" end deactivate BBTGateway @enduml ``` #### BBT.Apisix Gateway Servis Kontrolü Süreci Bu iş akışı, BBT.Apisix Gateway'in (BBTGateway) dahili bileşenlerinin ve bağlı servislerinin ayakta olup olmadığının kontrol eden bir süreci tanımlar. 1. Başlangıç: BKM, BBT.Apisix Gateway'e (BBTGateway) "GET /health" isteği göndererek servis kontrol sürecini başlatır. 2. HesapHizmetleri Kontrolü: • BBTGateway, HesapHizmetleri servisine "GET /health" isteği gönderir. • HesapHizmetleri, bu isteği aldıktan sonra kendi servisinin ayakta olup olmadığını kontrol eder ve sonucu BBTGateway'e "Status" olarak geri döndürür. 3. ÖdemeHizmetleri Kontrolü: • BBTGateway, ÖdemeHizmetleri servisine "GET /health" isteği gönderir. • ÖdemeHizmetleri, kendi servisinin ayakta olup olmadığını kontrol eder ve sonucu BBTGateway'e "Status" olarak geri döndürür. 4. Consent Kontrolü: • BBTGateway, Consent servisine "GET /health" isteği gönderir. • Consent, kendi servisinin ayakta olup olmadığını kontrol eder ve sonucu BBTGateway'e "Status" olarak geri döndürür. 5. Genel Servis Kontrol Sonucunun Değerlendirilmesi: • Eğer HesapHizmetleri, ÖdemeHizmetleri ve Consent servislerinin hepsi ayakta ise, BBTGateway BKM'ye "status=UP" cevabını döndürür. • Eğer bu servislerden herhangi biri ayakta değilse, BBTGateway BKM'ye "status=DOWN" cevabını döndürür. Bu süreç, BBT.Apisix Gateway'in genel servis durumunu, dahili bileşenleri ve bağlı servisleriyle birlikte değerlendirmesini sağlar. Bu servis kontrolü, sistemler arası entegrasyon sırasında potansiyel sorunları erken teşhis etmek için kritik bir rol oynar. ## Hesap Bilgisi Hizmetleri ### Hesap ekleme süreci (Rıza kaydı): ```plantuml @startuml actor YOS as "YÖS" entity BKM entity BBTGateway as "BBT.Apisix Gateway" participant Amorphie.Login participant HHSAccount participant HesapHizmetleri entity Consent participant Amorphie.Token YOS -> BKM: Rıza isteği (Rıza modeli) BKM -> BBTGateway: POST/hesap-bilgisi-rizasi BBTGateway -> Consent: POST/CreateConsent Consent --> BBTGateway:Consent oluşturuldu (Rıza Durumu = "Yetki Bekleniyor") BBTGateway --> BKM: HTTP 201 {RizaNo,yetTmmZmm,hhsYonAdr} BKM --> YOS: HTTP 201 {RizaNo,yetTmmZmm,hhsYonAdr} note over Consent: İstek başarısız olursa Consent = "İptal"\n HTTP 204 geri döner YOS -> BBTGateway: Yönlendirme Adresi ile Login HTTP 302:hhsYonAdr adresine yönlendirme (RızaNo) BBTGateway -> Amorphie.Login: Güvenli Kimlik Doğrulama (GKD) Amorphie.Login -> HHSAccount: GKD başarılı (RizaNo,Kullanici) HHSAccount -> HesapHizmetleri: GET/hesaplar (Şebnemlerin Servisi) HHSAccount -> HHSAccount:Hesapların Seçimi HHSAccount -> Consent: POST/updateConsent Consent --> HHSAccount: Consent durumu = "Yetkilendirildi" HHSAccount -> Token: GET/Calback : consent ile post edilecek Token -> HHSAccount: HTTP 200 Consent -> BBTGateway : HTTP 302 (Yetkilendirme Kodu, RızaNo) BBTGateway --> YOS: HTTP 302 (Yetkilendirme Kodu, RızaNo) note over Consent: İstek başarısız olursa ya da 5 dk içinde\n işlem yapılmazsa Consent = "İptal"\n HTTP 204 geri döner YOS -> BKM:Erişim Belirteci (token) isteği BKM -> BBTGateway: POST/erişim-belirteci/{rizaNo,rizaTip=H,yetkiKodu/yenilemeBelirteci} BBTGateway -> Amorphie.Token: POST/createTokens Amorphie.Token -> BBTGateway: Tokenlar (erişimBelirteci, yenilemeBelirteci) BBTGateway -> Consent: POST/updateConsent Consent --> BBTGateway: Consent durumu = "Yetki kullanıldı" BBTGateway --> YOS: Tokenlar oluşturuldu (erişimBelirteci, yenilemeBelirteci) @enduml ``` <br> <br> **Hesap Ekleme Süreç adımları:** 1. Rıza İsteği Başlangıcı: YÖS, bir rıza oluşturmak için BKM'ye istekte bulunur. 2. Rıza Oluşturma: BKM, bu rıza talebini BBT.Apisix Gateway'e yönlendirir, Gateway de bu isteği Consent modülüne iletir. Consent modülü, yeni bir rıza kaydı oluşturarak bu rızanın durumunu "Yetki Bekleniyor" olarak ayarlar. 3. Rıza Bilgisi Dönüşü: Consent modülünden alınan rıza bilgileri BKM'ye ve sonrasında YÖS'e iletilir. İsteğin başarısız olması durumunda rıza "İptal" durumuna alınır. 4. Güvenli Kimlik Doğrulama: YÖS, rıza numarasıyla birlikte yönlendirme adresi üzerinden login işlemi için BBT.Apisix Gateway'e yönlendirilir. BBT.Apisix Gateway, bu işlemi Amorphie.Login modülüne aktarır. Kimlik doğrulama başarılı olursa, kullanıcının hesap bilgileri sorgulanır. 5. Hesap Bilgisi Sorgulama: Amorphie.Login, kimlik doğrulama başarılı olduğunda kullanıcı bilgileriyle HHSAccount modülüne başvurur. HHSAccount, HesapHizmetleri üzerinden kullanıcının hesap bilgilerini alır ve hesap seçimi gerçekleştirilir. 6. Rıza Güncelleme: Hesap seçimi sonrasında rıza bilgisi Consent modülünde "Yetkilendirildi" olarak güncellenir. 7. Yetkilendirme Kodu İletimi: Consent modülü, yetkilendirme kodunu BBT.Apisix Gateway'e iletir ve bu kod YÖS'e geri gönderilir. 8. Erişim Belirteci İsteği: YÖS, Consent modülü tarafından oluşturulan yetkilendirme koduyla BKM'ye erişim belirteci (token) talebinde bulunur. 9. Token Oluşturma: BKM, erişim belirteci talebini BBT.Apisix Gateway'e iletir. Gateway, bu talebi Amorphie.Token modülüne yönlendirir ve token oluşturma işlemi gerçekleştirilir. 10. Rıza Durumu Güncelleme: Oluşturulan token bilgileri Consent modülüne iletilir ve rıza durumu "Yetki Kullanıldı" olarak güncellenir. 11. Sonuç: Oluşturulan erişim belirteci ve yenileme belirteci, BBT.Apisix Gateway tarafından YÖS'e iletilir. Bu süreçte, YÖS tarafından başlatılan rıza oluşturma ve hesap ekleme işlemleri, BKM ve BBT.Apisix Gateway üzerinden çeşitli modüllerle (Consent, Amorphie.Login, HHSAccount, Amorphie.Token) koordineli bir şekilde gerçekleştirilir. Oluşturulan rıza ve token bilgileri, son adımda YÖS'e geri iletilir. ##### Örnek Json'lar : ```jsonld= Hesap Bilgisi Rızası Rıza Oluşturma ([POST] hesap-bilgisi-rizasi) [POST]https://gecit.api-preprod.bkm.com.tr/ohvps/hbh/s1.1/hesap-bilgisi-rizasi header { "content-type": "application/json", "X-Request-ID": "0fce65b6-d6d2-4f5a-82c2-335e76c7a2f0", "X-Group-ID": "73aeb89e-5c3d-4dd3-854d-c5de70465618", "X-ASPSP-Code": "2397", "X-TPP-Code": "0125", "PSU-Initiated": "H", "X-JWS-Signature": "[Şifrelenmiş Post Datası]", "Authorization": "Bearer [BKM AUTH TOKEN]” } request { "kmlk": { "ohkTur": "B", "kmlkTur": "K", "kmlkVrs": "93552884082" }, "katilimciBlg": { "hhsKod": "2397", "yosKod": "0125" }, "gkd": { "yetYntm": "Y", "yonAdr": "openbanking://garanti.com.tr" }, "hspBlg": { "iznBlg": { "iznTur": [ "01", "05", "04", "03", "02" ], "erisimIzniSonTrh": "2024-02-29T00:00:00.000+03:00", "hesapIslemBslZmn": "2022-08-29T00:00:00.000+03:00", "hesapIslemBtsZmn": "2024-08-27T12:36:41.724298+03:00" }, "ayrBlg": null }, "xGroupId": "73aeb89e-5c3d-4dd3-854d-c5de70465618" } response { "rzBlg": { "rizaNo": "bc596d616c994f12803c10216e228215", "olusZmn": "2023-08-29T12:36:42+03:00", "gnclZmn": "2023-08-29T12:36:42+03:00", "rizaDrm": "B" }, "kmlk": { "kmlkTur": "K", "kmlkVrs": "93552884082", "ohkTur": "B" }, "katilimciBlg": { "hhsKod": "2397", "yosKod": "0125" }, "gkd": { "yetYntm": "Y", "yonAdr": "openbanking://garanti.com.tr", "yetTmmZmn": "2023-08-29T12:41:42+03:00", "hhsYonAdr": "https://testopenbanking.com.tr/boss/ab/hhs-simulator-ui-v11/2397/hesap-bilgisi-rizasi/bc596d616c994f12803c10216e228215/goruntule" }, "hspBlg": { "iznBlg": { "iznTur": [ "01", "05", "04", "03", "02" ], "erisimIzniSonTrh": "2024-02-29T00:00:00+03:00", "hesapIslemBslZmn": "2022-08-29T00:00:00+03:00", "hesapIslemBtsZmn": "2024-08-27T12:36:41+03:00" }, "ayrBlg": { "ohkMsj": "ÖHK Mesajı" } } } ``` ```jsonld= Rıza Tesisi ( [POST] erisim-belirteci ) [POST]https://gecit.api-preprod.bkm.com.tr/ohvps/gkd/s1.1/erisim-belirteci header { "content-type": "application/json", "X-Request-ID": "9e76914b-c11e-4208-b533-0d6708dafea6", "X-Group-ID": "73aeb89e-5c3d-4dd3-854d-c5de70465618", "X-ASPSP-Code": "2397", "X-TPP-Code": "0125", "PSU-Initiated": "H", "X-JWS-Signature": "[Şifrelenmiş Post Datası]", "Authorization": "Bearer [BKM AUTH TOKEN]” } request { "rizaNo": "bc596d616c994f12803c10216e228215", "rizaTip": "H", "yetTip": "yet_kod", "yetKod": "ba3b191d98f247598eaf2a527209a88f" } response { "erisimBelirteci": "[ACCESS TOKEN]", "gecerlilikSuresi": 3600, "yenilemeBelirteci": "[REFRESH TOKEN]” "yenilemeBelirteciGecerlilikSuresi": 15852112 } ``` ```jsonld= Hesap seçimi için hesapların çekilmesi Headers: user:EBT\INTERNETUSER CHANNEL:INTERNET branch:2000 Content-Type:application/json 1- HasAccountsForOpenBanking: Bu servis, müşterinin hesabı olup olmadığını kontrol eder. true/false döner. URI Template: GET /hesaplar?customerId={customerId} Ek Header Bilgisi: - Örnek API Request: GET http://svtstr3app01.ebt.bank/fora/DigitalServices/AccountService.svc/hesaplar?customerId=29876191452 2- GetAccountsForOpenBanking: Bu servis, müşterinin hesap bilgilerini getirir. URI Template: GET /hesaplar/{customerId}?hspRef={hspRef}&syfKytSayi={syfKytSayi}&syfNo={syfNo}&srlmKrtr={srlmKrtr}&srlmYon={srlmYon} Ek Header Bilgisi: izinTur: D / T Örnek API Request: GET http://svtstr3app01.ebt.bank/fora/DigitalServices/AccountService.svc/hesaplar/29876191452?syfKytSayi=5&syfNo=1&srlmKrtr=hspRef&srlmYon=A Header da izinTur göndermezsem T gibi davranıyor. izinTur : T ya da D gönderdiğimde hspDty null geliyor. { "hspDty": null, "hspTml": { "hspDrm": "AKTIF", "hspNo": "2000-172534-362", (Dokümanda bu alan için IBAN isteniyor) "hspRef": "TR970012502000017253400362", (Dökümanda bu alan "uuid" isteniyor) "hspShb": "Test", "hspTip": "VADELI", "hspTur": "B", "hspUrunAdi": null, "kisaAd": "VADELİ MEVDUAT", "prBrm": "TRY", "subeAdi": "BURGAN DİJİTAL" }, "rizaNo": "000" } 3- GetAccountsForOpenBankingWithHspRef: Bu servis, belirli bir hesap referansına göre müşterinin hesap bilgilerini getirir. URI Template: GET /hesaplar/{customerId}/{hspRef} Ek Header Bilgisi: izinTur: D / T Örnek API Request: GET http://svtstr3app01.ebt.bank/fora/DigitalServices/AccountService.svc/hesaplar/29876191452/TR490012502000017253400353 (Dökümanda bu alan "uuid" isteniyor) Header da izinTur göndermezsem T gibi davranıyor. izinTur : T ya da D gönderdiğimde hspDty null geliyor. ``` #### Ayrık GKD ile Hesap ekleme süreci ```plantuml @startuml actor YOS as "YÖS" entity BKM participant BurganMobilArayuz entity BBTGateway as "BBT.Apisix Gateway" participant Amorphie.Login participant HHSAccount participant HesapHizmetleri entity Consent participant Amorphie.Token YOS -> BKM: Rıza isteği (Rıza modeli) BKM -> BBTGateway: POST/hesap-bilgisi-rizasi "yetYntm":"A" "yonAdr":"https://yosAdr?drmKod" "OHKTanimTip":"TCKN" "OHKTanimDeger":"19175356696" BBTGateway -> Consent: POST/CreateConsent Consent -> Consent: YÖS Ayrık GKD abonelik konrtolü Consent --> BBTGateway:Consent oluşturuldu (Rıza Durumu = "Yetki Bekleniyor") BBTGateway --> BKM: HTTP 201 {RizaNo,yetTmmZmm} BKM --> YOS: HTTP 201 {RizaNo,yetTmmZmm} note over Consent: İstek başarısız olursa Consent = "İptal"\n HTTP 204 geri döner Consent->BurganMobilArayuz : Push ya da SMS bildirimi BurganMobilArayuz --> YOS: ÖHK, Anlık bildirim ya da SMS ile HHS login'e yönelendirilir. YOS -> BurganMobilArayuz: ÖHK, HHS uygulamasına login olur ve işleme rıza verir BurganMobilArayuz -> BBTGateway: ÖHK, HHS uygulamasına login olur ve işleme rıza verir BBTGateway -> Amorphie.Login: Güvenli Kimlik Doğrulama (GKD) Amorphie.Login -> HHSAccount: GKD başarılı (RizaNo,Kullanici) HHSAccount -> HesapHizmetleri: GET/hesaplar (Şebnemlerin Servisi) HHSAccount -> HHSAccount:Hesapların Seçimi HHSAccount -> Consent: POST/updateConsent Consent --> HHSAccount: Consent durumu = "Yetkilendirildi" HHSAccount -> Amorphie.Token: GET/Calback : consent ile post edilecek Amorphie.Token -> HHSAccount: HTTP 200 Consent -> BBTGateway : POST /olay-dinleme "Olay tipi":"AYRIK_GKD_BAŞARILI" BBTGateway --> YOS: POST /olay-dinleme "Olay tipi":"AYRIK_GKD_BAŞARILI" YOS -> BBTGateway:GET /yetkilendirme-kodu?rizaNo=123&rizaTip=H BBTGateway -> Amorphie.Token:GET /yetkilendirme-kodu?rizaNo=123&rizaTip=H Amorphie.Token -> BBTGateway: HTTP 201 {RizaNo,yetKod} BBTGateway -> YOS: HTTP 201 {RizaNo,yetKod} YOS -> BKM:Erişim Belirteci (token) isteği BKM -> BBTGateway: POST/erişim-belirteci/{rizaNo,rizaTip=H,yetkiKodu/yenilemeBelirteci} BBTGateway -> Amorphie.Token: POST/createTokens Amorphie.Token -> BBTGateway: Tokenlar (erişimBelirteci, yenilemeBelirteci) BBTGateway -> Consent: POST/updateConsent Consent --> BBTGateway: Consent durumu = "Yetki kullanıldı" BBTGateway --> YOS: Tokenlar oluşturuldu (erişimBelirteci, yenilemeBelirteci) @enduml ``` <br> <br> ### Hesap silme süreci (Rıza iptali) ```plantuml @startuml actor YOS as "YÖS" entity BKM entity BBTGateway as "BBT.Apisix Gateway" entity Consent YOS -> BKM: Rıza iptal isteği BKM -> BBTGateway: DELETE/hesap-bilgisi-rizasi/{RizaNo} BBTGateway -> Consent: POST/uptadeConsent/{RizaNo} Consent --> BBTGateway:Consent iptal (Rıza Durumu = "İptal") BBTGateway --> BKM: HTTP 204 {} BKM --> YOS: HTTP 204 {} @enduml ``` <br> **Rıza iptal süreci adımları:** 1. Rıza İptal Talebi: • Yetkili Ödeme Hizmeti Sağlayıcısı (YÖS), Bankalararası Kart Merkezi'ne (BKM) bir rıza iptal talebinde bulunur. • BKM, bu iptal talebini "BBT.Apisix Gateway" üzerinden ilgili servise yönlendirir. • Gateway, bu talebi "Consent" (Rıza) servisine iletir ve belirtilen RızaNo için rızanın iptalini ister. 2. Rızanın İptali: • "Consent" (Rıza) servisi, belirtilen rızayı başarılı bir şekilde iptal eder ve rıza durumunu "İptal" olarak günceller. 3. İptal Bildirimi: • Gateway, rızanın başarıyla iptal edildiğini BKM'ye bildirir. • BKM de bu bilgiyi YÖS'ye iletir. Sonuç olarak, bu süreç, Yetkili Ödeme Hizmeti Sağlayıcısı'nın (YÖS) bir rızanın iptal edilmesi talebinde bulunması ve bu talebin ilgili sistemler aracılığıyla işlenerek rızanın başarılı bir şekilde iptal edilmesini temsil etmektedir. ##### Örnek Json: ```jsonld= Delete : /hesap-bilgisi-rizasi/{rizaNo} "responses": { "204": { "description": "No Content", "headers": { "X-Request-ID": { "type": "string", "description": "Çağrıya özgü talep kimliği, ilgili istek başlığındaki bilgi geri dönülür.", "minLength": 1, "maxLength": 36 }, "X-Group-ID": { "type": "string", "description": "İsteği başlatan YÖS tarafından belirlenen işlem akışına özgü talep kimliği. ilgili istek başlığındaki bilgi geri dönülür.", "minLength": 1, "maxLength": 36 }, "X-ASPSP-Code": { "type": "string", "description": "İsteğin iletildiği Hesap Hizmeti Sağlayıcısının kodudur.", "minLength": 4, "maxLength": 4, "pattern": "[0-9][0-9][0-9][0-9]" }, "X-TPP-Code": { "type": "string", "description": "İsteği gönderen Yetkili Ödeme Hizmeti Sağlayıcısı (YÖS) kodudur", "minLength": 4, "maxLength": 4, "pattern": "[0-9][0-9][0-9][0-9]" } } } ``` ### Hesap bilgisi rızasının sorgulanması: ```plantuml @startuml actor YOS as "YÖS" entity BKM entity BBTGateway as "BBT.Apisix Gateway" entity Consent YOS -> BKM: Rıza sorgulama isteği BKM -> BBTGateway: GET /hesap-bilgisi-rizasi/{RizaNo} BBTGateway -> Consent: GET/CheckConsent Consent --> BBTGateway:İstek başarılı (RizaNo,HesapBilgisiRizasi) BBTGateway --> BKM: HTTP 200 {RizaNo,HesapBilgisiRizasi} BKM --> YOS: HTTP 200 {RizaNo,HesapBilgisiRizasi} note over Consent: İstek başarısız olursa HTTP 204 geri döner @enduml ``` <br><br> **Rıza sorgulama süreç adımları:** 1. Rıza Sorgulama Talebi: • Yetkili Ödeme Hizmeti Sağlayıcısı (YÖS), belirli bir rızanın durumunu öğrenmek için Bankalararası Kart Merkezi'ne (BKM) sorgulama talebinde bulunur. • BKM, bu sorgulama isteğini "BBT.Apisix Gateway" üzerinden ilgili servise yönlendirir. 2. Rıza Durumunun Kontrolü: • Gateway, rıza durumunun kontrolü için "Consent" (Rıza) servisine başvurur. • "Consent" (Rıza) servisi, belirtilen RızaNo'ya karşılık gelen rıza bilgisini başarılı bir şekilde sorgular ve sonucu Gateway'e iletir. 3. Sorgulama Sonucunun İletilmesi: • Gateway, sorgulama sonucunu BKM'ye bildirir. • BKM de bu sonucu YÖS'ye ileterek rıza durumunu belirtir. Eğer "Consent" (Rıza) servisi sorgulama sırasında bir problemle karşılaşırsa ya da belirtilen RızaNo'ya karşılık gelen bir rıza bulamazsa, bir hata mesajı olarak HTTP 204 durum kodu ile geri dönüş yapılır. ##### Örnek Json: ```jsonld= GET /hesap-bilgisi-rizasi/{rizaNo} Response: { "rzBlg": { "rizaNo": "e785e48e345f4e91a1d611f4b65c521a", "olusZmn": "2021-07-09T15:27:53+03:00", "gnclZmn": "2021-07-09T15:27:53+03:00", "rizaDrm": "B" }, "kmlk": { "kmlkTur": "K", "kmlkVrs": "77121323400", "ohkTur": "B" }, "katilimciBlg": { "hhsKod": "8000", "yosKod": "8000" }, "gkd": { "yetYntm": "Y", "yonAdr": "https://example.com", "yetTmmZmn": "2021-07-09T15:32:53+03:00", "hhsYonAdr": "https://boss-test.bkm.com.tr/boss/ab/hhsSimulator/8000/hesap-bilgisi-rizasi/e785e48e345f4e91a1d611f4b65c521a/goruntule" }, "hspBlg": { "iznBlg": { "iznTur": [ "01", "03" ], "erisimIzniSonTrh": "2022-01-09T15:21:56+03:00+03:00" }, "ayrBlg": { "ohkMsj": "ÖHK Mesajı" } } } ``` ### Hesap bilgilerinin alınması süreci (Hesap listesi, Bakiye ve hesap hareketleri) ```plantuml @startuml actor YOS as "YÖS" entity BKM entity BBTGateway as "BBT.Apisix Gateway" entity Consent participant HesapHizmetleri ||30|| == Hesap Listesinin alınması == ||30|| YOS -> BKM: GET/hesaplar/{hspRef} veya GET/hesaplar BKM -> BBTGateway: GET/hesaplar/{hspRef} veya GET/hesaplar (Header da x-Access-Token) BBTGateway -> Consent: POST/Check (x-Access-Token kontrolü) note over Consent: Gelen token gerçerliliği kontrol edilir. \n Token'a bağlı rıza kontrolü yapılır.\n Rıza'da tanımlı olan hesaplar kontrol edilir. Consent --> BBTGateway:Rızaya ait hesaplar BBTGateway -> HesapHizmetleri: GET/hesaplar (Şebnemlerin servisi) HesapHizmetleri --> BBTGateway: HTTP 200 {hesapNo,HesapListesi} BBTGateway --> BKM: HTTP 200 {hesapNo,HesapListesi} BKM --> YOS: HTTP 200 {hesapNo,HesapListesi} ||30|| == Bakiyelerin alınması == ||30|| YOS -> BKM: GET/hesaplar{hspRef}/bakiye ya da GET/bakiye BKM -> BBTGateway: GET/hesaplar{hspRef}/bakiye ya da GET/bakiye (Header da x-Access-Token) BBTGateway -> Consent: POST/Check (x-Access-Token kontrolü) note over Consent: Gelen token gerçerliliği kontrol edilir. \n Token'a bağlı rıza kontrolü yapılır.\n Rıza'da tanımlı olan hesaplar kontrol edilir. Consent --> BBTGateway:Rızaya ait hesaplar BBTGateway -> HesapHizmetleri: GET/hesaplar/{customerId}/bakiye (Şebnemlerin servisi) HesapHizmetleri --> BBTGateway: HTTP 200 {hesapNo,BakiyeBilgisi} BBTGateway --> BKM: HTTP 200 {hesapNo,BakiyeBilgisi} BKM --> YOS: HTTP 200 {hesapNo,BakiyeBilgisi} ||30|| == Hesap Hareketleri == ||30|| YOS -> BKM: GET/hesaplar/{hspRef}/islemler BKM -> BBTGateway: GET/hesaplar/{hspRef}/islemler (Header da x-Access-Token) BBTGateway -> Consent: POST/Check (x-Access-Token kontrolü) note over Consent: Gelen token gerçerliliği kontrol edilir. \n Token'a bağlı rıza kontrolü yapılır.\n Rıza'da tanımlı olan hesaplar kontrol edilir. Consent --> BBTGateway:Rızaya ait hesaplar BBTGateway -> HesapHizmetleri: GET/hesaplar/{hspRef}/islemler (Şebnemlerin servisi) HesapHizmetleri --> BBTGateway: HTTP 200 {hesapNo,İslemBilgisi} BBTGateway --> BKM: HTTP 200 {hesapNo,İslemBilgisi} BKM --> YOS: HTTP 200 {hesapNo,İslemBilgisi} ||30|| @enduml ``` <br><br> **Hesap Bilgilerinin Alınması Süreç adımları :** 1. Hesap Listesinin Alınması: • YÖS, belirli bir hesap referansı için veya tüm hesaplar için BKM'ye bir hesap listesi sorgulama isteğinde bulunur. • BKM bu sorgulamayı x-Access-Token içeren bir header ile BBT.Apisix Gateway'e iletir. • BBT.Apisix Gateway, tokenın geçerliliğini ve bu tokena bağlı rıza bilgisini Consent modülünden sorgular. • Consent, rızaya tanımlı olan hesap bilgilerini döndürür. • Ardından, BBT.Apisix Gateway, bu hesap bilgilerini HesapHizmetleri'nden sorgular. • HesapHizmetleri, sorgulanan hesap listesini BBT.Apisix Gateway'e geri gönderir. • Bu bilgiler BKM aracılığıyla YÖS'e iletilir. 2. Bakiyelerin Alınması: • YÖS, belirli bir hesap referansı için veya genel bakiye bilgisi için BKM'ye sorgulama isteğinde bulunur. • BKM, bu isteği x-Access-Token içeren bir header ile BBT.Apisix Gateway'e yönlendirir. • Token geçerlilik ve rıza kontrolü yine Consent modülü tarafından gerçekleştirilir. • Consent, rızaya tanımlı olan hesap bilgilerini döndürür. • BBT.Apisix Gateway, bu hesaplara ait bakiye bilgisini HesapHizmetleri'nden sorgular. • Aldığı bakiye bilgisini BKM üzerinden YÖS'e geri gönderir. 3. Hesap Hareketleri: • YÖS, belirli bir hesap referansı için hesap hareketleri bilgisini BKM'den talep eder. • BKM, bu talebi x-Access-Token içeren bir header ile BBT.Apisix Gateway'e iletir. • Token ve rıza kontrol süreçleri Consent modülü tarafından gerçekleştirilir. • BBT.Apisix Gateway, rızada tanımlı hesaplara ait hareket bilgisini HesapHizmetleri'nden sorgular. • Bu hareket bilgisi, BKM üzerinden YÖS'e iletilir. Bu süreçte, YÖS tarafından başlatılan hesap bilgisi sorgulamaları (hesap listesi, bakiye ve hesap hareketleri), BKM ve BBT.Apisix Gateway üzerinden çeşitli modüllerle (Consent, HesapHizmetleri) koordineli bir şekilde gerçekleştirilir. Sorgulanan bilgiler, son adımlarda YÖS'e geri döndürülür. ##### Örnek Json'lar: ```jsonld= Hesap Listesi ( [GET] hesaplar ) [GET]https://gecit.api-preprod.bkm.com.tr/ohvps/hbh/s1.1/hesaplar header { "X-Request-ID": "af77102f-cea5-4e86-8276-e12070ab8ec8", "X-Group-ID": "73aeb89e-5c3d-4dd3-854d-c5de70465618", "X-ASPSP-Code": "2397", "X-TPP-Code": "0125", "PSU-Initiated": "E", "PSU-Fraud-Check": [Şifrelenmiş Post Datası]", "X-Access-Token": "[ACCESS TOKEN]”, "Content-Type": "application/json", "Authorization": "Bearer [BKM AUTH TOKEN]” } data {} response [ { "rizaNo": "bc596d616c994f12803c10216e228215", "hspTml": { "hspRef": "a296137f-a5e2-453e-8c99-20e4ad19b885", "subeAdi": "Gondor", "hspNo": "TR190239704079712385975321", "kisaAd": "Gondorlu", "prBrm": "TRY", "hspTur": "B", "hspTip": "VADESIZ", "hspUrunAdi": "Gondorlu", "hspDrm": "AKTIF", "hspShb": "Gimli" }, "hspDty": { "hspAclsTrh": "2021-05-13T00:00:00+03:00" } }, { "rizaNo": "bc596d616c994f12803c10216e228215", "hspTml": { "hspRef": "1b1d5e8e-53f8-4040-b5f7-09d48a2e441e", "subeAdi": "Erebor", "hspNo": "TR140239702649972718881931", "kisaAd": "Maaş", "prBrm": "TRY", "hspTur": "B", "hspTip": "VADESIZ", "hspUrunAdi": "Vadesiz", "hspDrm": "AKTIF", "hspShb": "Gimli" }, "hspDty": { "hspAclsTrh": "2023-03-03T00:00:00+03:00" } } ] Bakiye Bilgisi (TOPLU) ( [GET] bakiye ) [GET]https://gecit.api-preprod.bkm.com.tr/ohvps/hbh/s1.1/bakiye header { "X-Request-ID": "7923b083-3c2b-44a0-b4af-509f92505e5f", "X-Group-ID": "73aeb89e-5c3d-4dd3-854d-c5de70465618", "X-ASPSP-Code": "2397", "X-TPP-Code": "0125", "PSU-Initiated": "E", "PSU-Fraud-Check": [Şifrelenmiş Post Datası]", "X-Access-Token": "[ACCESS TOKEN]”, "Content-Type": "application/json", "Authorization": "Bearer [BKM AUTH TOKEN]” } data {} response [ { "hspRef": "a296137f-a5e2-453e-8c99-20e4ad19b885", "bky": { "bkyTtr": "66313.00", "blkTtr": "0.00", "prBrm": "TRY", "bkyZmn": "2023-08-29T12:38:08+03:00", "krdHsp": { "kulKrdTtr": "0.00", "krdDhlGstr": "0" } } }, { "hspRef": "1b1d5e8e-53f8-4040-b5f7-09d48a2e441e", "bky": { "bkyTtr": "2345453.00", "blkTtr": "0.00", "prBrm": "TRY", "bkyZmn": "2023-08-29T12:38:08+03:00", "krdHsp": { "kulKrdTtr": "0.00", "krdDhlGstr": "0" } } } ] Bakiye Bilgisi (TEKLİ) ( [GET] hesaplar/{hspRef}/bakiye) [GET]https://gecit.api-preprod.bkm.com.tr/ohvps/hbh/s1.1/hesaplar/ca6cb563-66b6-4425-a7d4-04d7ce8643e8/bakiye header { "X-Request-ID": "5141b2c6-de4a-459b-b39e-c31116e79939", "X-Group-ID": "0f3c43a7-97ff-4d0b-a42a-3ef98ddd968f", "X-ASPSP-Code": "2397", "X-TPP-Code": "0125", "PSU-Initiated": "E", "PSU-Fraud-Check": [Şifrelenmiş Post Datası]", "X-Access-Token": "[ACCESS TOKEN]”, "Content-Type": "application/json", "Authorization": "Bearer [BKM AUTH TOKEN]” } data {} response { "hspRef": "ca6cb563-66b6-4425-a7d4-04d7ce8643e8", "bky": { "bkyTtr": "5545451.00", "blkTtr": "0.00", "prBrm": "TRY", "bkyZmn": "2023-05-15T13:20:04+03:00", "krdHsp": { "kulKrdTtr": "0.00", "krdDhlGstr": "0" } } } Hesap Hareketleri ( [GET] hesaplar/{hspRef}/islemler ) [GET]https://gecit.api-preprod.bkm.com.tr/ohvps/hbh/s1.1/hesaplar/d8032512-3ae3-4d4c-8c42-8d3cddd7d667/islemler?syfKytSayi=100&syfNo=1&hesapIslemBslTrh=2023-06-28T20:59:59.999998Z&hesapIslemBtsTrh=2023-07-28T20:59:59.999998Z header { "X-Request-ID": "03c91f4d-9255-4ab0-96c5-50f283e4c318", "X-Group-ID": "c48df5c3-6f28-45d4-9440-9caaa90ecb13", "X-ASPSP-Code": "2338", "X-TPP-Code": "0125", "PSU-Initiated": "E", "PSU-Fraud-Check": [Şifrelenmiş Post Datası]", "X-Access-Token": "[ACCESS TOKEN]”, "Content-Type": "application/json", "Authorization": "Bearer [BKM AUTH TOKEN]” } data {} response { "hspRef": "d8032512-3ae3-4d4c-8c42-8d3cddd7d667", "isller": [ { "islTml": { "islNo": "2cc19faf213e43999e0f5dea92535c79", "refNo": "91b03bbea100402180d15ae88f95935f", "islTtr": "7000.00", "prBrm": "TRY", "islGrckZaman": "2023-07-20T12:20:02+03:00", "brcAlc": "B", "kanal": "O", "islTur": "FAST", "islAmc": "07", "odmStmNo": "20230720|2338|21265348" }, "islDty": { "islAcklm": "c72a6b6b82614f298407f8866f144a58", "krsTrf": { "krsMskIBAN": "TR96******************1561", "krsMskUnvan": "Gi****" } } } ] } ``` ```jsonld= Hesap hizmeti servisi 1- HasAccountsForOpenBanking: Bu servis, müşterinin hesabı olup olmadığını kontrol eder. true/false döner. URI Template: GET /hesaplar?customerId={customerId} Ek Header Bilgisi: - Örnek API Request: GET http://svtstr3app01.ebt.bank/fora/DigitalServices/AccountService.svc/hesaplar?customerId=29876191452 2- GetAccountsForOpenBanking: Bu servis, müşterinin hesap bilgilerini getirir. URI Template: GET /hesaplar/{customerId}?hspRef={hspRef}&syfKytSayi={syfKytSayi}&syfNo={syfNo}&srlmKrtr={srlmKrtr}&srlmYon={srlmYon} Ek Header Bilgisi: izinTur: D / T Örnek API Request: GET http://svtstr3app01.ebt.bank/fora/DigitalServices/AccountService.svc/hesaplar/29876191452?syfKytSayi=5&syfNo=1&srlmKrtr=hspRef&srlmYon=A Header da izinTur göndermezsem T gibi davranıyor. izinTur : T ya da D gönderdiğimde hspDty null geliyor. { "hspDty": null, "hspTml": { "hspDrm": "AKTIF", "hspNo": "2000-172534-362", (Dokümanda bu alan için IBAN isteniyor) "hspRef": "TR970012502000017253400362", (Dökümanda bu alan "uuid" isteniyor) "hspShb": "Test", "hspTip": "VADELI", "hspTur": "B", "hspUrunAdi": null, "kisaAd": "VADELİ MEVDUAT", "prBrm": "TRY", "subeAdi": "BURGAN DİJİTAL" }, "rizaNo": "000" } 3- GetAccountsForOpenBankingWithHspRef: Bu servis, belirli bir hesap referansına göre müşterinin hesap bilgilerini getirir. URI Template: GET /hesaplar/{customerId}/{hspRef} Ek Header Bilgisi: izinTur: D / T Örnek API Request: GET http://svtstr3app01.ebt.bank/fora/DigitalServices/AccountService.svc/hesaplar/29876191452/TR490012502000017253400353 (Dökümanda bu alan "uuid" isteniyor) Header da izinTur göndermezsem T gibi davranıyor. izinTur : T ya da D gönderdiğimde hspDty null geliyor. 4- GetAccountBalancesForOpenBanking: Bu servis, müşterinin hesap bakiyelerini getirir. URI Template: GET /hesaplar/{customerId}/bakiye?hspRef={hspRef}&syfKytSayi={syfKytSayi}&syfNo={syfNo}&srlmKrtr={srlmKrtr}&srlmYon={srlmYon} Ek Header Bilgisi: - Örnek API Request: GET http://svtstr3app01.ebt.bank/fora/DigitalServices/AccountService.svc/hesaplar/29876191452/bakiye?syfKytSayi=5&syfNo=3&srlmKrtr=hspRef&srlmYon=A { "bky": { "bkyTtr": 0, (dokümanda AN isteniyor) "bkyZmn": "2023-07-06T14:33:13.158422", "blkTtr": null, "prBrm": "TRY" }, "hspRef": "TR900012501050017253400361", (Dökümanda bu alan "uuid" isteniyor) "krdHsp": { "krdDhlGstr": "0", "kulKrdTtr": 0 (dokümanda AN isteniyor) } } 5- GetAccountBalancesForOpenBankingWithHspRef: Bu servis, belirli bir hesap referansına göre müşterinin hesap bakiyelerini getirir. URI Template: GET /hesaplar/{customerId}/bakiye/{hspRef} Ek Header Bilgisi: - Örnek API Request: GET http://svtstr3app01.ebt.bank/fora/DigitalServices/AccountService.svc/hesaplar/29876191452/bakiye/TR490012502000017253400353 (Dökümanda bu alan "uuid" isteniyor) 6- GetAccountTransactionsForOpenBanking: Bu servis, belirli bir hesap için işlem bilgilerini getirir. URI Template: GET hesaplar/{hspRef}/islemler?hesapIslemBslTrh={hesapIslemBslTrh}&hesapIslemBtsTrh={hesapIslemBtsTrh}&minIslTtr={minIslTtr}&mksIslTtr={mksIslTtr}&brcAlc={brcAlc}&syfKytSayi={syfKytSayi}&syfNo={syfNo}&srlmKrtr={srlmKrtr}&srlmYon={srlmYon} Ek Header Bilgileri: PSU-Initiated: E/H ohkTur: B/K Örnek API Request: GET http://svtstr3app01.ebt.bank/fora/DigitalServices/AccountService.svc/hesaplar/TR490012502000017253400353/islemler?hesapIslemBslTrh=2019-04-20&hesapIslemBtsTrh=2019-05-17&minIslTtr=100&mksIslTtr=500000&brcAlc=B&syfKytSayi=50&syfNo=1&srlmKrtr=islGrckZaman&srlmYon=Y PSU-Initiated : H için sonuç dönmüyor. Header da izinTur bulunmuyor. islDetay her durumda listeleniyor. islTml içerisinde "odmStmNo" yok. { "hspRef": "TR490012502000017253400353", (Dökümanda bu alan "uuid" isteniyor) "isller": [ { "islDetay": { "islAcklm": "18.09 TRY 6.0291000 Kur Döviz Alış 385 hesaba", "krsTrf": { "krsMskIBAN": "T*************************", "krsMskUnvan": "e**" } }, "islTml": { "brcAlc": "B", "islAmc": "18.09 TRY 6.0291000 Kur Döviz Alış 385 hesaba", "islGrckZaman": "2019-04-25T15:25:57.120000", "islNo": "684232983", "islTtr": 300, "islTur": "DOVIZ_ALIM", "kanal": "I", "prBrm": "EUR", "refNo": "678" } }, { "islDetay": { "islAcklm": "9171.62 TRY 6.0941000 Kur Döviz Alış 357 hesaba", "krsTrf": { "krsMskIBAN": "T*************************", "krsMskUnvan": "a******" } }, "islTml": { "brcAlc": "B", "islAmc": "9171.62 TRY 6.0941000 Kur Döviz Alış 357 hesaba", "islGrckZaman": "2019-05-15T16:14:27.773000", "islNo": "684256211", "islTtr": 150500, "islTur": "DOVIZ_ALIM", "kanal": "I", "prBrm": "EUR", "refNo": "127" } } ] } ``` ## Ödeme Emri Başlatma Hizmeti ### Ödeme Emri Rızasının Hazırlanması ```plantuml @startuml actor YOS as "YÖS" entity BKM entity BBTGateway as "BBT.Apisix Gateway" entity Consent participant OdemeHizmetleri YOS -> BKM: Rıza isteği (Rıza modeli) BKM -> BBTGateway: POST/odeme-emri-rizasi BBTGateway -> Consent: POST/odeme-emri-rizasi Consent -> OdemeHizmetleri: POST/odeme-emri-rizasi (Sedaların servisi) OdemeHizmetleri -> Consent: HTTP 200 (Ödeme bilgileri RızaModeli) Consent -> Consent: POST/CreateConsent (Ödeme bilgileri ile birlikte consent oluşur) Consent --> BBTGateway:HTTP 201 Consent oluşturuldu (Rıza Durumu = "Yetki Bekleniyor") BBTGateway --> BKM: HTTP 201 {RizaNo,yetTmmZmm,hhsYonAdr} BKM --> YOS: HTTP 201 {RizaNo,yetTmmZmm,hhsYonAdr} note over Consent: İstek başarısız olursa Consent = "İptal"\n HTTP 204 geri döner @enduml ``` <br><br> **Ödeme Emri Rızasının Hazırlanması Süreç adımları :** 1. Rıza Talebi: • YÖS, bir ödeme emri rızası için BKM'ye talepte bulunur. Bu talep, özel bir "Rıza modeli" içerir. 2. Ödeme Emri Rızası İsteği: • BKM, alınan talebi BBT.Apisix Gateway'e ileterek "POST/odeme-emri-rizasi" endpointi üzerinden bir sorgulama başlatır. 3. Ödeme Bilgilerinin Hazırlanması: • BBT.Apisix Gateway, bu sorgulamayı "OdemeHizmetleri" modülüne yönlendirir. • OdemeHizmetleri, gelen sorgulamaya karşılık olarak ödeme bilgilerini içeren bir "RızaModeli" oluşturur ve BBT.Apisix Gateway'e döndürür. 4. Rıza Oluşturma: • BBT.Apisix Gateway, alınan ödeme bilgileri ile birlikte Consent modülüne bir rıza oluşturma isteğinde bulunur. • Consent modülü, bu bilgilere dayanarak yeni bir rıza kaydı oluşturur. Bu yeni rızanın durumu "Yetki Bekleniyor" olarak atanır. 5. Sonuç Bildirimi: • Consent modülünden alınan başarılı cevap sonucunda, BBT.Apisix Gateway rıza ile ilgili bilgileri (RizaNo, yetTmmZmm, hhsYonAdr gibi) BKM'ye iletilir. • BKM, bu bilgileri son kullanıcı olan YÖS'e geri gönderir. 6. Hata Yönetimi: • Eğer süreçte bir aksaklık oluşursa, Consent modülü rızayı "İptal" durumuna alır ve HTTP 204 koduyla isteğin başarısız olduğunu bildirir. Bu süreçte YÖS'ten başlatılan ödeme emri rızası talebi, BKM ve BBT.Apisix Gateway üzerinden çeşitli modüllerle (OdemeHizmetleri, Consent) koordineli bir şekilde işlenir ve sonuç YÖS'e geri bildirilir. ##### Örnek Json: ```jsonld= Hesaptan Hesaba Rıza Oluşturma ([POST] odeme-emri-rizasi) [POST][201]https://gecit.api-preprod.bkm.com.tr/ohvps/obh/s1.1/odeme-emri-rizasi header { "content-type": "application/json", "X-Request-ID": "7257b7cb-ba9d-4357-93a7-baaa0b822f8e", "X-Group-ID": "ea431fb5-9a56-481a-9a77-a0026596fe4f", "X-ASPSP-Code": "2400", "X-TPP-Code": "0125", "PSU-Initiated": "H", "X-JWS-Signature": "[Şifrelenmiş Post Datası]", "Authorization": "Bearer [BKM AUTH TOKEN]” } data { "katilimciBlg": { "hhsKod": "2400", "yosKod": "0125" }, "gkd": { "yetYntm": "Y", "yonAdr": "openbanking://burgan.com.tr" }, "odmBsltm": { "kmlk": { "ohkTur": "B", "kmlkTur": "K", "kmlkVrs": "93552884082" }, "islTtr": { "prBrm": "TRY", "ttr": "123" }, "alc": { "unv": "sadasdaasd", "hspNo": "TR300000203632522659198346" }, "odmAyr": { "odmKynk": "O", "odmAmc": "07", "refBlg": null, "odmAcklm": null, "ohkMsj": null, "odmStm": null, "bekOdmZmn": null }, "gon": { "unv": "Gimli", "hspNo": "TR420240003917458206511847", "hspRef": "c2c94873-85b0-4d97-8f22-9344e95bf27d" } } } response { "rzBlg": { "rizaNo": "c71ec95cbbd141b1ac08da7da81e7e3b", "olusZmn": "2023-09-04T15:26:15+03:00", "gnclZmn": "2023-09-04T15:26:15+03:00", "rizaDrm": "B" }, "katilimciBlg": { "hhsKod": "2400", "yosKod": "0125" }, "gkd": { "yetYntm": "Y", "yonAdr": "openbanking://burgan.com.tr", "yetTmmZmn": "2023-09-04T15:31:15+03:00", "hhsYonAdr": "https://tripsit.bkm.com.tr/boss/ab/hhs-simulator-ui-v11/2400/odeme-emri-rizasi/c71ec95cbbd141b1ac08da7da81e7e3b/goruntule" }, "odmBsltm": { "kmlk": { "kmlkTur": "K", "kmlkVrs": "93552884082", "ohkTur": "B" }, "islTtr": { "prBrm": "TRY", "ttr": "123.00" }, "gon": { "unv": "Gimli", "hspNo": "TR420240003917458206511847", "hspRef": "c2c94873-85b0-4d97-8f22-9344e95bf27d" }, "alc": { "unv": "sadasdaasd", "hspNo": "TR300000203632522659198346" }, "odmAyr": { "odmKynk": "O", "odmAmc": "07", "ohkMsj": "ÖHK Mesajı", "odmStm": "F", "bekOdmZmn": "2023-09-04T15:36:15+03:00" } } } ``` ### Ödeme Emri Rızasının Yetkilendirilmesi ```plantuml @startuml actor YOS as "YÖS" entity BKM entity BBTGateway as "BBT.Apisix Gateway" participant Amorphie.Login participant HHSPayment participant HesapHizmetleri entity Consent participant Amorphie.Token YOS -> BBTGateway: Yönlendirme Adresi ile Login HTTP 302:hhsYonAdr adresine yönlendirme (RızaNo) BBTGateway -> Amorphie.Login: Güvenli Kimlik Doğrulama (GKD) Amorphie.Login -> HHSPayment: GKD başarılı (RizaNo,Kullanici,Yetkilendirme kodu) HHSPayment -> HesapHizmetleri: GET/hesaplar (Şebnemlerin Servisi) HHSPayment -> HHSPayment: Hesap Seçimi (Eğer hesap bilgisi boş gelirse) HHSPayment -> HHSPayment: Ödeme Simulate (Ödeme bilgilerinin gösterilmesi) HHSPayment -> Consent: POST/updateConsent Consent --> HHSPayment: Consent durumu = "Yetkilendirildi" HHSPayment -> Token: GET/Calback : consent ile post edilecek Token -> HHSPayment: HTTP 200 Consent -> BBTGateway : Consent durumu = "Yetkilendirildi" & Yetkilendirme kodu BBTGateway --> YOS: HTTP 302 (Yetkilendirme Kodu, RızaNo) note over Consent: İstek başarısız olursa ya da 5 dk içinde\n işlem yapılmazsa Consent = "İptal"\n HTTP 204 geri döner YOS -> BKM:Erişim Belirteci (token) isteği BKM -> BBTGateway: POST/erişim-belirteci/{rizaNo,rizaTip=H,yetkiKodu/yenilemeBelirteci} BBTGateway -> Amorphie.Token: POST/createTokens Amorphie.Token -> BBTGateway: Tokenlar (erişimBelirteci, yenilemeBelirteci) BBTGateway -> Consent: POST/updateConsent Consent --> BBTGateway: Consent durumu = "Yetki kullanıldı" BBTGateway --> YOS: Tokenlar oluşturuldu (erişimBelirteci, yenilemeBelirteci) @enduml ``` <br><br> **Ödeme Emri Rızasının Yetkilendirilmesi Süreç adımları:** 1. Güvenli Giriş: • YÖS, kullanıcıyı belirli bir yönlendirme adresi ("hhsYonAdr") ile BBT.Apisix Gateway üzerinden güvenli bir şekilde giriş yapması için yönlendirir. • BBT.Apisix Gateway, kullanıcının güvenli kimlik doğrulamasını (GKD) Amorphie.Login üzerinden gerçekleştirir. 2. Ödeme Bilgilerinin Gösterimi: • Güvenli giriş başarılı olduğunda, HHSPayment modülü kullanıcıya ait hesap bilgilerini HesapHizmetleri modülünden alır. • Kullanıcıya, hangi hesaptan ödemenin yapılacağını seçtirilir. Eğer kullanıcının hesap bilgisi gönderilirse bu adım atlanır. • Seçim sonrası ödeme bilgileri kullanıcıya gösterilir. 3. Rızanın Güncellenmesi: • Ödeme onaylandığında, HHSPayment modülü rızayı "Yetkilendirildi" olarak güncellemek için Consent modülüne bir istekte bulunur. • Consent modülü, bu rızanın durumunu "Yetkilendirildi" olarak günceller ve bir yetkilendirme kodu oluşturarak BBT.Apisix Gateway'e gönderir. 4. Yetkilendirme Kodunun Dönülmesi: • BBT.Apisix Gateway, bu yetkilendirme kodunu YÖS'ye geri gönderir. Eğer süreçte bir hata oluşursa veya belirli bir süre içerisinde (örneğin 5 dakika) işlem tamamlanmazsa rıza "İptal" durumuna alınır. 5. Erişim Belirteci (Token) İsteği: • YÖS, işlemi tamamlamak için BKM'den bir erişim belirteci talebinde bulunur. • BKM, bu talebi BBT.Apisix Gateway'e ileterek belirli bir yetkilendirme kodu veya yenileme belirteci ile birlikte bir token oluşturma isteği başlatır. 6. Tokenların Oluşturulması: • BBT.Apisix Gateway, Amorphie.Token modülüne bir token oluşturma isteğinde bulunur. • Amorphie.Token, bu talebe karşılık olarak erişim belirteci ve yenileme belirteci oluşturarak BBT.Apisix Gateway'e döndürür. 7. Rızanın Son Güncellenmesi ve Tokenların Dönülmesi: • BBT.Apisix Gateway, oluşturulan tokenlarla birlikte rızanın durumunu "Yetki kullanıldı" olarak güncellemek için Consent modülüne bir istekte bulunur. • Güncelleme başarılı olduktan sonra BBT.Apisix Gateway, tokenları YÖS'ye gönderir. Bu süreçte, YÖS'ten başlatılan ödeme emri rızasının yetkilendirilmesi talebi, BKM ve BBT.Apisix Gateway üzerinden çeşitli modüllerle (Amorphie.Login, HHSPayment, HesapHizmetleri, Consent, Amorphie.Token) koordineli bir şekilde işlenir ve sonuç YÖS'e geri bildirilir. ##### Örnek Json: ```jsonld= Rıza Tesisi ([POST] erişim-belirteci) [POST][200]https://gecit.api-preprod.bkm.com.tr/ohvps/gkd/s1.1/erisim-belirteci header { "content-type": "application/json", "X-Request-ID": "4379257b-2b35-41f0-9f51-bd636a2db844", "X-Group-ID": "ea431fb5-9a56-481a-9a77-a0026596fe4f", "X-ASPSP-Code": "2400", "X-TPP-Code": "0125", "PSU-Initiated": "H", "X-JWS-Signature": "[Şifrelenmiş Post Datası]", "Authorization": "Bearer [BKM AUTH TOKEN]” } data { "rizaNo": "c71ec95cbbd141b1ac08da7da81e7e3b", "rizaTip": "O", "yetTip": "yet_kod", "yetKod": "115d23b2c8bd46bba7ee2cce04bc6d25" } response { "erisimBelirteci": "[ACCESS TOKEN]", "gecerlilikSuresi": 300, "yenilemeBelirteci": "[REFRESH TOKEN]” "yenilemeBelirteciGecerlilikSuresi": 1296000 } ``` #### Ayrık GKD ile Ödeme Emri Rızası ```plantuml @startuml actor YOS as "YÖS" entity BKM participant BurganMobilArayuz entity BBTGateway as "BBT.Apisix Gateway" participant Amorphie.Login participant HHSPayment participant HesapHizmetleri participant OdemeServisi entity Consent participant Amorphie.Token YOS -> BKM: Rıza isteği (Rıza modeli) BKM -> BBTGateway: POST/odeme-emri-rizasi "yetYntm":"A" "yonAdr":"https://yosAdr?drmKod" "OHKTanimTip":"TCKN" "OHKTanimDeger":"19175356696" BBTGateway -> Consent : POST/odeme-emri-rizasi "yetYntm":"A" "yonAdr":"https://yosAdr?drmKod" "OHKTanimTip":"TCKN" "OHKTanimDeger":"19175356696" Consent -> OdemeServisi : POST/odeme-emri-rizasi "yetYntm":"A" "yonAdr":"https://yosAdr?drmKod" "OHKTanimTip":"TCKN" "OHKTanimDeger":"19175356696" Consent -> Consent: POST/CreateConsent Consent -> Consent: YÖS Ayrık GKD abonelik konrtolü Consent --> BBTGateway:Consent oluşturuldu (Rıza Durumu = "Yetki Bekleniyor") BBTGateway --> BKM: HTTP 201 {RizaNo,yetTmmZmm} BKM --> YOS: HTTP 201 {RizaNo,yetTmmZmm} note over Consent: İstek başarısız olursa Consent = "İptal"\n HTTP 204 geri döner Consent->BurganMobilArayuz : Push ya da SMS bildirimi BurganMobilArayuz --> YOS: ÖHK, Anlık bildirim ya da SMS ile HHS login'e yönelendirilir. YOS -> BurganMobilArayuz: ÖHK, HHS uygulamasına login olur ve işleme rıza verir BurganMobilArayuz -> BBTGateway: ÖHK, HHS uygulamasına login olur ve işleme rıza verir BBTGateway -> Amorphie.Login: Güvenli Kimlik Doğrulama (GKD) Amorphie.Login -> HHSPayment: GKD başarılı (RizaNo,Kullanici) HHSPayment -> HesapHizmetleri: GET/hesaplar (Şebnemlerin Servisi) HHSPayment -> HHSPayment: Hesap Seçimi (Eğer hesap bilgisi boş gelirse) HHSPayment -> HHSPayment: Ödeme Simulate (Ödeme bilgilerinin gösterilmesi) HHSPayment -> Consent: POST/updateConsent Consent --> HHSPayment: Consent durumu = "Yetkilendirildi" HHSPayment -> Amorphie.Token: GET/Calback : consent ile post edilecek Amorphie.Token -> HHSPayment: HTTP 200 Consent -> BBTGateway : POST /olay-dinleme "Olay tipi":"AYRIK_GKD_BAŞARILI" BBTGateway --> YOS: POST /olay-dinleme "Olay tipi":"AYRIK_GKD_BAŞARILI" YOS -> BBTGateway:GET /yetkilendirme-kodu?rizaNo=123&rizaTip=H BBTGateway -> Amorphie.Token:GET /yetkilendirme-kodu?rizaNo=123&rizaTip=H Amorphie.Token -> BBTGateway: HTTP 201 {RizaNo,yetKod} BBTGateway -> YOS: HTTP 201 {RizaNo,yetKod} YOS -> BKM:Erişim Belirteci (token) isteği BKM -> BBTGateway: POST/erişim-belirteci/{rizaNo,rizaTip=H,yetkiKodu/yenilemeBelirteci} BBTGateway -> Amorphie.Token: POST/createTokens Amorphie.Token -> BBTGateway: Tokenlar (erişimBelirteci, yenilemeBelirteci) BBTGateway -> Consent: POST/updateConsent Consent --> BBTGateway: Consent durumu = "Yetki kullanıldı" BBTGateway --> YOS: Tokenlar oluşturuldu (erişimBelirteci, yenilemeBelirteci) @enduml ``` <br> <br> ### Ödeme Emrinin Oluşturulması ```plantuml @startuml actor YOS as "YÖS" entity BKM entity BBTGateway as "BBT.Apisix Gateway" entity Consent participant OdemeHizmetleri YOS -> BKM : POST/odeme-emri{Erişim belirteci, RizaNo} BKM -> BBTGateway: POST/odeme-emri{Erişim belirteci, RizaNo} BBTGateway -> BBTGateway: Erişim belirteci kontrolleri (introspection) BBTGateway -> Consent: POST/CheckConsent (Rıza durumu kontrol edilir) note over Consent: Rıza Durumu "Yetki kullanıldı" ise ve tokenlar geçerli ise işleme başlanır. BBTGateway -> OdemeHizmetleri: POST/odeme-emri (Seda'ların servisi) note right of BBTGateway: POST Ödeme servisleri tarafında işlenir (Seda'lar)\n \nPOST verisindeki Gönderen Hesap Numarası ve \n Alıcı Hesap Numarasının Burgan Bank'a aitse Havale \n değilse FAST/PÖS iş akışına geçilir.\n\n Post verisinin mantıksal kontrolleri yapılır (IBAN kontrolü v.b) \n\n HAVALE/FAST/PÖS işlemi başlatılır. \n * ÖdemeEmriDurumu: Gerçekleşti \n * ÖdemeEmriDurumu: Gerçekleşmedi \n * ÖdemeEmriDurumu: Gönderildi OdemeHizmetleri --> BBTGateway: HTTP 201 (OdemeEmriNo, OdemeEmri) BBTGateway -> Consent: POST/updateConsent Consent --> BBTGateway: Consent durumu = "Yetki Ödeme Emrine Dönüştü" BBTGateway --> YOS: HTTP 201 (OdemeEmriNo, OdemeEmri) @enduml ``` <br><br> **Ödeme Emrinin Oluşturulması Süreç adımları:** 1. Başlangıç: • YÖS, ödeme emri oluşturma talebini erişim belirteci ve RizaNo ile birlikte BKM'ye iletmektedir. • BKM bu talebi ilgili verilerle BBT.Apisix Gateway'e yönlendirir. 2. Rıza Kontrolü: • BBT.Apisix Gateway, rızanın durumunu kontrol etmek için Consent modülüne bir istekte bulunur. • Consent modülü rızanın "Yetki kullanıldı" olup olmadığını ve erişim belirtecinin geçerli olup olmadığını kontrol eder. Eğer bu şartlar sağlanıyorsa, ödeme işlemi için hazırlık yapılır. 3. Ödeme Emri İşlenmesi: • BBT.Apisix Gateway, ödeme emri oluşturma isteğini OdemeHizmetleri modülüne (Seda'ların servisi) ileterek, ödemenin işlenmesini talep eder. • Bu süreçte, gönderen ve alıcının hesap numaraları kontrol edilir. Eğer her iki hesap da Burgan Bank'a aitse bu bir havale işlemi olarak kabul edilir, aksi takdirde FAST/PÖS işlemi başlatılır. • İstekte bulunulan ödeme verisinin mantıksal kontrolleri gerçekleştirilir (Örneğin IBAN kontrolü). • Ödeme işlemi başlatılır ve sonuç olarak üç farklı durumla karşılaşılabilir: • ÖdemeEmriDurumu: Gerçekleşti • ÖdemeEmriDurumu: Gerçekleşmedi • ÖdemeEmriDurumu: Gönderildi 4. Rızanın Güncellenmesi ve Sonuç Bildirimi: • Ödeme işlemi tamamlandığında, BBT.Apisix Gateway rızanın durumunu "Yetki Ödeme Emrine Dönüştü" olarak güncellemek için Consent modülüne bir istekte bulunur. • Consent modülü bu güncellemeyi gerçekleştirdikten sonra BBT.Apisix Gateway, ödeme emri sonucunu YÖS'e ileterek süreci tamamlar. Bu süreçte, YÖS'ten başlatılan ödeme emri talebi, BKM ve BBT.Apisix Gateway üzerinden çeşitli modüllerle (Consent, OdemeHizmetleri) koordineli bir şekilde işlenir ve sonuç YÖS'e geri bildirilir. #### Örnek Json: ```jsonld= Ödeme Emri ([POST] odeme-emri) [POST][201]https://gecit.api-preprod.bkm.com.tr/ohvps/obh/s1.1/odeme-emri header { "content-type": "application/json", "X-Request-ID": "e90e91d6-b4fb-452e-8532-b489d35fd252", "X-Group-ID": "ea431fb5-9a56-481a-9a77-a0026596fe4f", "X-ASPSP-Code": "2400", "X-TPP-Code": "0125", "PSU-Initiated": "H", "X-JWS-Signature": [Şifrelenmiş Post Datası]", "X-Access-Token": "[ACCESS TOKEN]”, "Authorization": "Bearer [BKM AUTH TOKEN]” } data { "katilimciBlg": { "hhsKod": "2400", "yosKod": "0125" }, "gkd": { "yetYntm": "Y", "yonAdr": "openbanking://burgan.com.tr", "hhsYonAdr": "https://tripsit.bkm.com.tr/boss/ab/hhs-simulator-ui-v11/2400/odeme-emri-rizasi/c71ec95cbbd141b1ac08da7da81e7e3b/goruntule", "yetTmmZmn": "2023-09-04T12:31:15.000Z" }, "odmBsltm": { "kmlk": { "ohkTur": "B", "kmlkTur": "K", "kmlkVrs": "93552884082" }, "islTtr": { "prBrm": "TRY", "ttr": "123.00" }, "alc": { "unv": "sadasdaasd", "hspNo": "TR300000203632522659198346" }, "odmAyr": { "odmKynk": "O", "odmAmc": "07", "refBlg": null, "odmAcklm": null, "ohkMsj": "ÖHK Mesajı", "odmStm": "F", "bekOdmZmn": "2023-09-04T15:36:15+03:00" }, "gon": { "unv": "Gimli", "hspNo": "TR420240003917458206511847", "hspRef": "c2c94873-85b0-4d97-8f22-9344e95bf27d" } }, "rzBlg": { "rizaNo": "c71ec95cbbd141b1ac08da7da81e7e3b", "olusZmn": "2023-09-04T12:26:15.000+00:00", "gnclZmn": "2023-09-04T12:26:56.000+00:00", "rizaDrm": "K", "rizaIptDtyKod": null } } response { "emrBlg": { "odmEmriNo": "418f2dbeff9244b6aa9e9af508b933ef", "odmEmriZmn": "2023-09-04T15:26:58+03:00" }, "rzBlg": { "rizaNo": "c71ec95cbbd141b1ac08da7da81e7e3b", "olusZmn": "2023-09-04T12:26:15Z", "gnclZmn": "2023-09-04T15:26:58+03:00", "rizaDrm": "E" }, "katilimciBlg": { "hhsKod": "2400", "yosKod": "0125" }, "gkd": { "yetYntm": "Y", "yonAdr": "openbanking://burgan.com.tr", "yetTmmZmn": "2023-09-04T12:31:15Z", "hhsYonAdr": "https://tripsit.bkm.com.tr/boss/ab/hhs-simulator-ui-v11/2400/odeme-emri-rizasi/c71ec95cbbd141b1ac08da7da81e7e3b/goruntule" }, "odmBsltm": { "kmlk": { "kmlkTur": "K", "kmlkVrs": "93552884082", "ohkTur": "B" }, "islTtr": { "prBrm": "TRY", "ttr": "123.00" }, "gon": { "unv": "Gimli", "hspNo": "TR420240003917458206511847", "hspRef": "c2c94873-85b0-4d97-8f22-9344e95bf27d" }, "alc": { "unv": "sadasdaasd", "hspNo": "TR300000203632522659198346" }, "odmAyr": { "odmKynk": "O", "odmDrm": "02", "odmAmc": "07", "ohkMsj": "ÖHK Mesajı", "odmStm": "F", "odmStmNo": "20230904|2400|54072536", "bekOdmZmn": "2023-09-04T15:36:15+03:00" } } } ``` ### Ödeme Emri Rızasının Sorgulanması ```plantuml @startuml actor YOS as "YÖS" entity BKM entity BBTGateway as "BBT.Apisix Gateway" entity Consent YOS -> BKM: Rıza sorgulama isteği BKM -> BBTGateway: GET /odeme-rizasi/{RizaNo} BBTGateway -> Consent: GET/CheckConsent Consent --> BBTGateway:İstek başarılı (RizaNo,OdemeEmriRizasi) BBTGateway --> BKM: HTTP 200 {RizaNo,OdemeEmriRizasi} BKM --> YOS: HTTP 200 {RizaNo,OdemeEmriRizasi} note over Consent: İstek başarısız olursa HTTP 204 geri döner @enduml ``` <br><br> **Ödeme Emri Rızasının Sorgulanması Süreç adımları:** 1. Başlangıç: YÖS, ödeme emri rızasının durumunu sorgulamak amacıyla BKM'ye bir sorgulama isteği gönderir. 2. Rıza Bilgisi İsteği: BKM, bu sorgulama talebini BBT.Apisix Gateway'e iletir. BBT.Apisix Gateway, rıza numarası (RizaNo) temel alınarak Consent servisinden ilgili rıza bilgisi sorgulaması için "GET/CheckConsent" isteğinde bulunur. 3. Rıza Bilgisi Dönüşü: Consent servisi, istek başarılı olduğunda rıza numarası ve ödeme emri rızasının detaylarıyla yanıt verir. Eğer rıza bilgisi sorgulaması başarısız olursa, Consent servisinden bir HTTP 204 yanıtı dönüleceğine dikkat çekilmiştir. 4. Sonuç: BBT.Apisix Gateway, aldığı rıza bilgilerini BKM'ye iletir. BKM de bu bilgileri YÖS'e yönlendirir. Sonuç olarak, YÖS tarafından başlatılan ödeme emri rızası sorgulama işlemi, BKM ve BBT.Apisix Gateway üzerinden Consent servisine ulaşır. Consent servisinden alınan yanıt, YÖS'e geri döner. Bu süreçte, rıza bilgisi başarılı bir şekilde sorgulanırsa ilgili detaylar YÖS'e iletilecekken, sorgulama başarısız olursa bu durum da YÖS'e bildirilecektir. #### Örnek Json: ```jsonld= Rıza Bilgisi ( [GET] odeme-emri-rizasi/{rizaNo} ) [GET][200]https://gecit.api-preprod.bkm.com.tr/ohvps/obh/s1.1/odeme-emri-rizasi/c71ec95cbbd141b1ac08da7da81e7e3b header { "X-Request-ID": "b7d6a3f7-6aec-44ee-84f0-0a9e0f0aaffc", "X-Group-ID": "ea431fb5-9a56-481a-9a77-a0026596fe4f", "X-ASPSP-Code": "2400", "X-TPP-Code": "0125", "PSU-Initiated": "E", "PSU-Fraud-Check": [Şifrelenmiş Post Datası]", "Content-Type": "application/json", "Authorization": "Bearer [BKM AUTH TOKEN]” } data {} response { "rzBlg": { "rizaNo": "c71ec95cbbd141b1ac08da7da81e7e3b", "olusZmn": "2023-09-04T15:26:15+03:00", "gnclZmn": "2023-09-04T15:26:56+03:00", "rizaDrm": "K" }, "katilimciBlg": { "hhsKod": "2400", "yosKod": "0125" }, "gkd": { "yetYntm": "Y", "yonAdr": "openbanking://burgan.com.tr", "yetTmmZmn": "2023-09-04T15:31:15+03:00", "hhsYonAdr": "https://tripsit.bkm.com.tr/boss/ab/hhs-simulator-ui-v11/2400/odeme-emri-rizasi/c71ec95cbbd141b1ac08da7da81e7e3b/goruntule" }, "odmBsltm": { "kmlk": { "kmlkTur": "K", "kmlkVrs": "93552884082", "ohkTur": "B" }, "islTtr": { "prBrm": "TRY", "ttr": "123.00" }, "gon": { "unv": "Gimli", "hspNo": "TR420240003917458206511847", "hspRef": "c2c94873-85b0-4d97-8f22-9344e95bf27d" }, "alc": { "unv": "sadasdaasd", "hspNo": "TR300000203632522659198346" }, "odmAyr": { "odmKynk": "O", "odmAmc": "07", "ohkMsj": "ÖHK Mesajı", "odmStm": "F", "bekOdmZmn": "2023-09-04T15:36:15+03:00" } } } ``` ### Ödeme Emrinin Sorgulanması ```plantuml @startuml actor YOS as "YÖS" entity BKM entity BBTGateway as "BBT.Apisix Gateway" participant OdemeHizmetleri YOS -> BKM: Ödeme sorgulama isteği BKM -> BBTGateway: GET /odeme-emri/{OdemeEmriNo} BBTGateway -> OdemeHizmetleri: GET /odeme-emri/{OdemeEmriNo} OdemeHizmetleri --> BBTGateway:İstek başarılı (OdemeEmriNo,OdemeEmri) BBTGateway --> BKM: HTTP 200 {OdemeEmriNo,OdemeEmri} BKM --> YOS: HTTP 200 {OdemeEmriNo,OdemeEmri} note over OdemeHizmetleri: İstek başarısız olursa HTTP 204 geri döner @enduml ``` <br><br> **Ödeme Emrinin Sorgulanması Süreç adımları:** 1. Başlangıç: YÖS, bir ödeme emrinin durumunu sorgulamak için BKM'ye bir sorgulama isteği gönderir. 2. Ödeme Bilgisi İsteği: BKM, aldığı bu sorgulama talebini BBT.Apisix Gateway'e yönlendirir. Ardından BBT.Apisix Gateway, ödeme emri numarası (OdemeEmriNo) üzerinden OdemeHizmetleri'nden ilgili ödeme emrinin detaylarını sorgular. 3. Ödeme Bilgisi Dönüşü: OdemeHizmetleri, isteğin başarılı olması durumunda ödeme emri numarası ve ilgili ödeme emrinin detayları ile yanıt verir. Ancak, sorgulama başarısız olursa, OdemeHizmetleri'nden bir HTTP 204 yanıtı döneceğine dikkat edilmiştir. 4. Sonuç: BBT.Apisix Gateway, aldığı ödeme bilgilerini BKM'ye ileterek sonucu bildirir. BKM de bu bilgileri YÖS'e yönlendirir. Özetle, YÖS tarafından başlatılan ödeme emri sorgulama işlemi, BKM ve BBT.Apisix Gateway aracılığıyla OdemeHizmetleri'ne ulaşır. OdemeHizmetleri'nden alınan yanıt, aynı zincirle YÖS'e geri döner. Bu süreçte, ödeme emri başarılı bir şekilde sorgulanırsa ilgili detaylar YÖS'e iletilecekken, sorgulama başarısız ise bu durum YÖS'e bildirilecektir. #### Örnek Json: ```jsonld= GET /odeme-emri/{odmEmriNo} response { "rzBlg": { "rizaNo": "33ef1107003540faa4a8c917a711e6da", "olusZmn": "2021-07-09T14:11:55+03:00", "gnclZmn": "2021-07-09T14:13:55+03:00", "rizaDrm": "E" }, "katilimciBlg": { "hhsKod": "8000", "yosKod": "8000" }, "gkd": { "yetYntm": "Y", "yonAdr": "https://boss-test.bkm.com.tr/boss/ab/yosSimulator/8000/odeme-emri-rizasi/onay", "hhsYonAdr": "https://boss-test.bkm.com.tr/boss/ab/hhsSimulator/8000/odeme-emri-rizasi/33ef1107003540faa4a8c917a711e6da/goruntule", "yetTmmZmn": "2021-07-09T14:16:55+03:00" }, "emrBlg": { "odmEmriNo": "3234dfge235235werwe43543534ef", "odmEmriZmn": "2021-07-09T14:16:55+03:00" }, "odmBsltm": { "kmlk": { "kmlkTur": "K", "kmlkVrs": "77121323400", "ohkTur": "B" }, "islTtr": { "prBrm": "TRY", "ttr": "13.21" }, "gon": { "unv": "AHMET YILMAZ", "hspNo": "TR1000010XP9UDWM4Z6LVJKS45" }, "alc": { "unv": "AHMET YILMAZ", "hspNo": "TR1000010XP9UDWM4Z6LVJKS45" }, "odmAyr": { "odmKynk": "A", "odmDrm": "01", "odmAmc": "01", "refBlg": "Y-2701852-202011", "odmAcklm": "Kira bedeli", "odmStm": "F" }, "obhsMsrfTtr": { "prBrm": "TRY", "ttr": "1.00" } } } ``` # YÖS Burgan Bank YÖS uygulamalarının BKM servis tüketimi ve akış süreci ## Hesap bilgisi hizmetleri ### YÖS Hesap ekleme süreci (Rıza kaydı): ```plantuml @startuml actor YOS as "YÖS" entity Consent entity BBTGateway as "BBT.Apisix Gateway" entity BKM ||30|| entity HHS YOS -> BBTGateway: GET/hhs (banka listesi) BBTGateway -> BKM: GET/hhs BKM --> BBTGateway: HTTP 200 {hhs listesi} BBTGateway --> YOS: HTTP 200 {hhs listesi} YOS -> BBTGateway: POST/hesap-bilgisi-rizasi BBTGateway -> BKM: POST/hesap-bilgisi-rizasi BKM --> BBTGateway: HTTP 201 {RizaNo,yetTmmZmm,hhsYonAdr} BBTGateway --> YOS: HTTP 201 {RizaNo,yetTmmZmm,hhsYonAdr} note over BKM: İstek başarısız olursa RızaDurumu = "İptal"\n HTTP 204 geri döner YOS -> Consent: POST/CreateConsent (Dönen rıza kaydı) Consent --> YOS:HTTP 201 note over Consent: İstek başarısız olursa Consent = "İptal"\n HTTP 204 geri döner YOS -> HHS: Yönlendirme Adresi ile Login HTTP 302:hhsYonAdr adresine yönlendirme (RızaNo) HHS -> HHS: Güvenli Kimlik Doğrulama (GKD) HHS -> HHS:Hesapların Seçimi HHS --> YOS: HTTP 302 (Yetkilendirme Kodu, RızaNo) note over HHS: İstek başarısız olursa ya da 5 dk içinde\n işlem yapılmazsa HTTP 204 geri döner YOS -> BBTGateway:POST/erişim-belirteci/{rizaNo,rizaTip=H,yetkiKodu/yenilemeBelirteci} BBTGateway -> BKM: POST/erişim-belirteci/{rizaNo,rizaTip=H,yetkiKodu/yenilemeBelirteci} BKM --> BBTGateway: Erişim Belirteci ve Yenileme Belirteci BBTGateway --> YOS: Tokenlar oluşturuldu YOS --> Consent : Tokenlar'ın rıza altına eklenmesi ve RızaDurum güncellemesi @enduml ``` <br><br> **YÖS Hesap Ekleme Süreç adımları (Rıza Kaydı) :** 1. Banka Listesi Alımı: • YÖS, mevcut banka listesini alabilmek için BBT.Apisix Gateway'e bir GET isteği gönderir. • BBT.Apisix Gateway bu isteği BKM'ye yönlendirir. • BKM, banka listesini BBT.Apisix Gateway'e geri gönderir. • BBT.Apisix Gateway, banka listesini YÖS'e iletir. 2. Hesap Bilgisi Rızası Oluşturma: • YÖS, hesap bilgisi rızasını oluşturmak için BBT.Apisix Gateway'e bir POST isteği gönderir. • Bu istek BKM'ye yönlendirilir ve BKM, rıza numarası, yetkilendirme zamanı ve yönlendirme adresi ile yanıt verir. • BBT.Apisix Gateway bu bilgileri YÖS'e iletir. • Eğer bu süreçte bir hata meydana gelirse, RızaDurumu "İptal" olarak güncellenir. 3. Rıza Kaydının Consent Modülüne Eklenmesi: • YÖS, BKM'den aldığı rıza bilgileriyle Consent modülüne bir POST isteği gönderir. • Consent, rıza kaydını oluşturduktan sonra başarılı bir yanıt döner. • Herhangi bir hata meydana gelirse, Consent durumu "İptal" olarak güncellenir. 4. Güvenli Kimlik Doğrulama ve Hesap Seçimi: • YÖS, HHS modülüne yönlendirme adresi ile birlikte bir HTTP 302 isteği gönderir. • HHS modülü, güvenli kimlik doğrulama işlemini gerçekleştirir. • Kullanıcı, hangi hesapları eklemek istediğini seçer. • İşlem başarılı olarak tamamlanırsa, HHS YÖS'e yetkilendirme kodu ve rıza numarasıyla yanıt verir. 5. Erişim Belirteci Alımı: • YÖS, erişim belirteci almak için BBT.Apisix Gateway'e bir POST isteği gönderir. • Bu istek BKM'ye yönlendirilir. • BKM, erişim belirteci ve yenileme belirteci bilgilerini BBT.Apisix Gateway'e gönderir. • BBT.Apisix Gateway bu bilgileri YÖS'e iletir. 6. Rıza Durumunun Güncellenmesi: • YÖS, alınan token bilgilerini Consent modülüne göndererek rıza kaydını günceller. Bu süreçte, YÖS kullanıcının hesap bilgilerine erişim izni almak için bir rıza süreci başlatır. Bu süreçte YÖS, BBT.Apisix Gateway, BKM ve HHS modülleri arasında koordineli bir iş akışı gerçekleşir. ### YÖS ile Hesap bilgilerinin alınması süreci (Hesap listesi, Bakiye ve hesap hareketleri) ```plantuml @startuml actor YOS as "YÖS" entity Consent entity BBTGateway as "BBT.Apisix Gateway" entity BKM ||30|| == Hesap Listesinin alınması == ||30|| YOS -> Consent: GET/RizaBilgileri (rıza ve token bilgileri alınır) Consent -> YOS: HTTP 200 {RizaBilgileri} YOS -> BBTGateway: GET/hesaplar/{hspRef} veya GET/hesaplar (Header da x-Access-Token) BBTGateway -> BKM: GET/hesaplar/{hspRef} veya GET/hesaplar (Header da x-Access-Token) BKM --> BBTGateway: HTTP 200 {hesapNo,HesapListesi} BBTGateway --> YOS: HTTP 200 {hesapNo,HesapListesi} ||30|| == Bakiyelerin alınması == ||30|| YOS -> Consent: GET/RizaBilgileri (rıza ve token bilgileri alınır) Consent -> YOS: HTTP 200 {RizaBilgileri} YOS -> BBTGateway: GET/hesaplar{hspRef}/bakiye ya da GET/bakiye (Header da x-Access-Token) BBTGateway -> BKM: GET/hesaplar{hspRef}/bakiye ya da GET/bakiye (Header da x-Access-Token) BKM --> BBTGateway: HTTP 200 {hesapNo,BakiyeBilgisi} BBTGateway --> YOS: HTTP 200 {hesapNo,BakiyeBilgisi} ||30|| == Hesap Hareketleri == ||30|| YOS -> Consent: GET/RizaBilgileri (rıza ve token bilgileri alınır) Consent -> YOS: HTTP 200 {RizaBilgileri} YOS -> BBTGateway: GET/hesaplar/{hspRef}/islemler (Header da x-Access-Token) BBTGateway -> BKM: GET/hesaplar/{hspRef}/islemler (Header da x-Access-Token) BKM --> BBTGateway: HTTP 200 {hesapNo,İslemBilgisi} BBTGateway --> YOS: HTTP 200 {hesapNo,İslemBilgisi} ||40|| @enduml ``` <br><br> **YÖS ile Hesap Bilgilerinin Alınması Süreç adımları:** 1. Hesap Listesinin Alınması: • YÖS, kullanıcının rızasına ve token bilgilerine erişmek için Consent modülüne GET isteği gönderir. • Consent modülü rıza bilgilerini YÖS'e döndürür. • YÖS, kullanıcının hesap listesini alabilmek için BBT.Apisix Gateway'e bir GET isteği gönderir. • Bu istek, BBT.Apisix Gateway tarafından BKM'ye yönlendirilir. • BKM, YÖS'e ait hesap numarası ve ilgili hesap listesi bilgileriyle yanıt verir. 2. Bakiyelerin Alınması: • YÖS, rıza ve token bilgilerini almak için Consent modülüne tekrar bir GET isteği gönderir. • Rıza bilgileri alındıktan sonra, YÖS bakiye bilgilerini almak için BBT.Apisix Gateway'e GET isteği gönderir. • BBT.Apisix Gateway, bu isteği BKM'ye yönlendirir. • BKM, belirtilen hesap numarasına ilişkin bakiye bilgisini döndürür. 3. Hesap Hareketlerinin Alınması: • YÖS, rıza ve token bilgilerini almak üzere Consent modülüne bir GET isteği gönderir. • Alınan rıza bilgileri doğrultusunda, YÖS hesap hareketlerini almak için BBT.Apisix Gateway'e GET isteği gönderir. • BBT.Apisix Gateway, bu isteği BKM'ye yönlendirir. • BKM, belirtilen hesap numarasına ait işlem bilgilerini YÖS'e geri gönderir. ### YÖS ile Hesap silme süreci (Rıza iptali) ```plantuml @startuml actor YOS as "YÖS" entity Consent entity BBTGateway as "BBT.Apisix Gateway" entity BKM YOS -> Consent: GET/RizaBilgileri (rıza ve hesap bilgileri alınır) Consent -> YOS: HTTP 200 {RizaBilgileri} YOS -> BBTGateway: DELETE/hesap-bilgisi-rizasi/{RizaNo} BBTGateway -> BKM: DELETE/hesap-bilgisi-rizasi/{RizaNo} BKM --> BBTGateway: HTTP 204 {} BBTGateway --> YOS: HTTP 204 {} YOS -> Consent: POST/uptadeConsent/{RizaNo} Consent --> YOS:Consent iptal (Rıza Durumu = "İptal") @enduml ``` <br><br> **YÖS ile Hesap Silme Süreç adımları (Rıza İptali):** 1. YÖS, kullanıcının mevcut rızasına ve hesap bilgilerine erişim sağlamak için Consent modülüne bir GET isteği gönderir. Bu istek sonucunda rıza bilgileri alınır. 2. YÖS, kullanıcının rızasını iptal etmek için BBT.Apisix Gateway'e bir DELETE isteği gönderir. Bu istek, belirli bir "RizaNo" üzerinden gerçekleşir. 3. BBT.Apisix Gateway, YÖS'ten aldığı rıza iptali isteğini BKM'ye yönlendirir. 4. BKM, rıza iptali işlemini gerçekleştirir ve bu işlem başarılı olarak tamamlandığında bir HTTP 204 yanıtı gönderir. Bu, işlemin başarıyla tamamlandığı anlamına gelir. 5. YÖS, bu işlem sonucunu alır ve kullanıcı rızasını sistemden iptal eder. Bu işlem için Consent modülüne bir POST isteği gönderilir. Rıza durumu "İptal" olarak güncellenir. Bu süreçte, YÖS'un temel amacı kullanıcının rızasını sistemden kaldırmaktır. Bu işlem, YÖS, BBT.Apisix Gateway ve BKM arasında koordineli bir şekilde gerçekleştirilir. İşlemin sonunda kullanıcının rızası sistemden başarıyla kaldırılır ve bu durum "İptal" olarak güncellenir. ### YÖS ile Hesap bilgisi rızasının sorgulanması: ```plantuml @startuml actor YOS as "YÖS" entity Consent entity BBTGateway as "BBT.Apisix Gateway" entity BKM YOS -> Consent: GET/CheckConsent Consent --> YOS:HTTP 200 İstek başarılı (HesapBilgisiRizasi) YOS -> BBTGateway: GET /hesap-bilgisi-rizasi/{RizaNo} BBTGateway -> BKM: GET /hesap-bilgisi-rizasi/{RizaNo} BKM --> BBTGateway: HTTP 200 {HesapBilgisiRizasi} BBTGateway --> YOS: HTTP 200 {HesapBilgisiRizasi} note over BKM: İstek başarısız olursa HTTP 204 geri döner @enduml ``` <br><br> **YÖS ile Hesap Bilgisi Rızasının Sorgulanması:** 1. Süreç, YÖS'ün kullanıcının hesap bilgisi rızasının var olup olmadığını sorgulamak için Consent modülüne bir GET isteği göndermesiyle başlar. 2. Consent modülü, sorgulama sonucunda var olan hesap bilgisi rızasını YÖS'e geri döndürür. 3. YÖS, BBT.Apisix Gateway üzerinden belirli bir "RizaNo" ile kullanıcının hesap bilgisi rızasını detaylı olarak sorgulamak için bir GET isteği gönderir. 4. BBT.Apisix Gateway, bu sorgulama isteğini BKM'ye yönlendirir. 5. BKM, belirtilen "RizaNo" için hesap bilgisi rızasını sorgular ve sonucu BBT.Apisix Gateway'e geri gönderir. 6. BBT.Apisix Gateway, BKM'den aldığı sorgulama sonucunu YÖS'e iletir. 7. Eğer BKM'den bir sonuç alınamazsa veya sorgulama başarısız olursa, BKM HTTP 204 yanıtı ile bu durumu belirtir. Bu süreçte, YÖS'ün amacı kullanıcının hesap bilgisi rızasının mevcut olup olmadığını ve varsa detaylarını sorgulamaktır. Bu işlem, YÖS, Consent, BBT.Apisix Gateway ve BKM modülleri arasındaki koordineli işbirliği ile gerçekleştirilir. ## Ödeme Emri Başlatma Hizmeti ### YÖS ile Ödeme Emri Rızasının Hazırlanması ```plantuml @startuml actor YOS as "YÖS" entity Consent entity BBTGateway as "BBT.Apisix Gateway" entity BKM YOS -> BBTGateway: POST/odeme-emri-rizasi BBTGateway -> BKM: POST/odeme-emri-rizasi BKM --> BBTGateway: HTTP 201 {RizaNo,yetTmmZmm,hhsYonAdr} BBTGateway --> YOS: HTTP 201 {RizaNo,yetTmmZmm,hhsYonAdr} note over BKM: İstek başarısız olursa RızaDurumu = "İptal"\n HTTP 204 geri döner YOS -> Consent: POST/CreateConsent Consent --> YOS:Consent oluşturuldu (Rıza Durumu = "Yetki Bekleniyor") @enduml ``` <br><br> **YÖS ile Ödeme Emri Rızasının Hazırlanması Süreç adımları:** 1. Süreç, Yetkili Ödeme Hizmeti Sağlayıcısı (YÖS) tarafından BBT.Apisix Gateway'e ödeme emri rızası oluşturma talebi gönderilmesiyle başlar. 2. BBT.Apisix Gateway, bu ödeme emri rızası oluşturma talebini Bankalararası Kart Merkezi'ne (BKM) yönlendirir. 3. BKM, talebi başarıyla işler ve oluşturulan rıza için bir "RizaNo", "yetTmmZmm" (yetkilendirme zamanı) ve "hhsYonAdr" (hesap yönlendirme adresi) bilgisi ile HTTP 201 yanıtı döndürür. 4. BBT.Apisix Gateway, BKM'den aldığı bu bilgileri YÖS'e iletir. 5. Eğer BKM'de herhangi bir sorun oluşursa, rıza durumu "İptal" olarak işaretlenir ve bir HTTP 204 yanıtı geri döner. 6. YÖS, başarıyla alınan rıza bilgisi ile Consent modülüne bir POST isteği göndererek yeni bir consent (rıza) kaydı oluşturulmasını talep eder. 7. Consent modülü, talebi başarıyla işler ve rıza durumu "Yetki Bekleniyor" olarak ayarlanarak YÖS'e bilgi döndürür. Bu süreçte, YÖS kullanıcının ödeme emirlerini onaylaması için gerekli olan rızayı oluşturmak üzere BBT.Apisix Gateway ve BKM ile koordineli bir şekilde çalışır. Oluşturulan rıza, Consent modülünde kaydedilir ve durumu "Yetki Bekleniyor" olarak işaretlenir. ### YÖS ile Ödeme Emri Rızasının Yetkilendirilmesi ```plantuml @startuml actor YOS as "YÖS" entity Consent entity BBTGateway as "BBT.Apisix Gateway" entity BKM entity HHS YOS -> HHS: Yönlendirme Adresi ile Login HTTP 302:hhsYonAdr adresine yönlendirme (RızaNo) HHS -> HHS: Güvenli Kimlik Doğrulama (GKD) HHS --> HHS: Consent durumu = "Yetkilendirildi" note over HHS: İstek başarısız olursa ya da 5 dk içinde\n işlem yapılmazsa Consent = "İptal"\n HTTP 204 geri döner HHS -> YOS: HTTP 302 (Yetkilendirme Kodu, RızaNo) YOS -> Consent:POST/updateConsent Consent durumu = "Yetkilendirildi" Consent -> YOS: HTTP 200 YOS -> BBTGateway:POST/erişim-belirteci/{rizaNo,rizaTip=H,yetkiKodu/yenilemeBelirteci} BBTGateway -> BKM: POST/erişim-belirteci/{rizaNo,rizaTip=H,yetkiKodu/yenilemeBelirteci} BKM --> BBTGateway: Tokenlar oluşturuldu (Erişim belirteci ve Yenileme belirteci) BBTGateway --> YOS: Tokenlar oluşturuldu (Erişim belirteci ve Yenileme belirteci) YOS -> Consent: POST/updateConsent Consent durumu = "Yetki kullanıldı" Consent --> YOS: HTTP 200 @enduml ``` <br><br> **YÖS ile Ödeme Emri Rızasının Yetkilendirilmesi Süreç adımları:** 1. Süreç, Yetkili Ödeme Hizmeti Sağlayıcısı (YÖS) tarafından "hhsYonAdr" yönlendirme adresi aracılığıyla HHS'e ödeme emri rızası yetkilendirme talebinde bulunmasıyla başlar. 2. HHS, kullanıcıdan Güvenli Kimlik Doğrulama (GKD) talep eder. 3. Kimlik doğrulama başarıyla gerçekleşirse, HHS rıza durumunu "Yetkilendirildi" olarak günceller. Eğer işlem 5 dakika içinde gerçekleşmezse ya da bir hata oluşursa, rıza durumu "İptal" olarak işaretlenir ve HTTP 204 yanıtı geri döner. 4. Kimlik doğrulama sonrası, HHS yetkilendirme kodunu ve rıza numarasını içeren bir HTTP 302 yanıtını YÖS'e iletir. 5. YÖS, alınan yetkilendirme bilgisiyle Consent modülüne POST isteği göndererek rıza durumunu "Yetkilendirildi" olarak günceller. 6. YÖS, rıza numarası, rıza tipi ve yetkilendirme kodu/yenileme belirteci bilgileriyle BBT.Apisix Gateway'e erişim belirteci talep eden bir POST isteği gönderir. 7. BBT.Apisix Gateway bu talebi Bankalararası Kart Merkezi'ne (BKM) yönlendirir. 8. BKM, talebi başarıyla işledikten sonra erişim belirteci ve yenileme belirteci oluşturarak BBT.Apisix Gateway'e iletir. 9. BBT.Apisix Gateway, BKM'den aldığı token bilgilerini YÖS'e iletir. 10. YÖS, bu token bilgisiyle Consent modülüne POST isteği göndererek rıza durumunu "Yetki kullanıldı" olarak günceller. Bu süreçte, YÖS, kullanıcının ödeme emri yetkilendirmesini almak için HHS ile etkileşime girer. Başarılı bir yetkilendirme sonrasında, YÖS gerekli tokenları almak için BKM ile etkileşime girer. Oluşturulan tokenlar ve rıza durumu Consent modülünde güncellenir. ### YÖS ile Ödeme Emrinin Oluşturulması ```plantuml @startuml actor YOS as "YÖS" entity Consent entity BBTGateway as "BBT.Apisix Gateway" entity BKM YOS -> BBTGateway : POST/odeme-emri{Erişim belirteci, RizaNo} BBTGateway -> BKM: POST/odeme-emri{Erişim belirteci, RizaNo} BKM --> BBTGateway: HTTP 201 (OdemeEmriNo, OdemeEmri) BBTGateway --> YOS: HTTP 201 (OdemeEmriNo, OdemeEmri) YOS -> Consent: POST/updateConsent Consent --> YOS: Consent durumu = "Yetki Ödeme Emrine Dönüştü" @enduml ``` <br><br> **YÖS ile Ödeme Emrinin Oluşturulması Süreç adımları:** 1. Süreç, Yetkili Ödeme Hizmeti Sağlayıcısı (YÖS) tarafından BBT.Apisix Gateway'e, elde edilmiş "Erişim Belirteci" ve "RizaNo" bilgileriyle ödeme emri talebinde bulunmasıyla başlar. 2. BBT.Apisix Gateway bu talebi Bankalararası Kart Merkezi'ne (BKM) yönlendirir. 3. BKM, talebi başarıyla işledikten sonra, ödeme emri numarası ("OdemeEmriNo") ve ödeme emri detaylarını ("OdemeEmri") oluşturarak BBT.Apisix Gateway'e iletir. 4. BBT.Apisix Gateway, BKM'den aldığı ödeme emri bilgilerini YÖS'e iletir. 5. YÖS, ödeme emri bilgisi alındıktan sonra Consent modülüne POST isteği göndererek rıza durumunu "Yetki Ödeme Emrine Dönüştü" olarak günceller. Bu süreçte, YÖS, kullanıcının ödeme yetkisi doğrultusunda bir ödeme emri oluşturmak için BKM ile etkileşime girer. Oluşturulan ödeme emri bilgisi YÖS tarafından alındıktan sonra, ilgili rıza durumu Consent modülünde güncellenir. ### YÖS ile Ödeme Emri Rızasının Sorgulanması ```plantuml @startuml actor YOS as "YÖS" entity Consent entity BBTGateway as "BBT.Apisix Gateway" entity BKM YOS -> Consent: GET/Consent (rıza bilgileri alınır) Consent -> YOS: HTTP 200 {RizaBilgileri} YOS -> BBTGateway: GET /odeme-rizasi/{RizaNo} BBTGateway -> BKM: GET /odeme-rizasi/{RizaNo} BKM --> BBTGateway: HTTP 200 {RizaNo,OdemeEmriRizasi} BBTGateway --> YOS: HTTP 200 {RizaNo,OdemeEmriRizasi} note over BKM: İstek başarısız olursa HTTP 204 geri döner @enduml ``` <br><br> **YÖS ile Ödeme Emri Rızasının Sorgulanması Süreç adımları:** 1. Süreç, Yetkili Ödeme Hizmeti Sağlayıcısı (YÖS) tarafından Consent modülüne, kullanıcının ödeme emri rıza bilgilerini sorgulama amacıyla GET isteği gönderilmesiyle başlar. 2. Consent modülü, rıza bilgilerini YÖS'e başarılı bir şekilde iletir. 3. YÖS, aldığı rıza bilgileri üzerinden, rızaya ait numara ("RizaNo") ile BBT.Apisix Gateway'e ödeme rızası sorgulama isteği gönderir. 4. BBT.Apisix Gateway bu sorgulama isteğini Bankalararası Kart Merkezi'ne (BKM) yönlendirir. 5. BKM, sorgulanan ödeme emri rıza bilgilerini ("RizaNo" ve "OdemeEmriRizasi") BBT.Apisix Gateway'e başarılı bir şekilde iletir. 6. BBT.Apisix Gateway, aldığı rıza bilgilerini YÖS'e iletir. 7. Eğer BKM, rıza bilgisi sorgulamasında bir hata veya eksik bilgi tespit ederse, BBT.Apisix Gateway'e bir HTTP 204 hatası döner. Bu süreç, YÖS'ün bir kullanıcının ödeme emri rızasının durumunu sorgulama amacıyla BKM ile etkileşime girdiği bir iş akışını temsil eder. Rıza bilgisi, BKM'den BBT.Apisix Gateway üzerinden YÖS'e ulaştırılır. ### YÖS ile Ödeme Emrinin Sorgulanması ```plantuml @startuml actor YOS as "YÖS" entity Consent entity BBTGateway as "BBT.Apisix Gateway" entity BKM YOS -> Consent: GET/Consent (rıza bilgileri alınır) Consent -> YOS: HTTP 200 {RizaBilgileri} YOS -> BBTGateway: GET /odeme-emri/{OdemeEmriNo} BBTGateway -> BKM: GET /odeme-emri/{OdemeEmriNo} BKM --> BBTGateway: HTTP 200 {OdemeEmriNo,OdemeEmri} BBTGateway --> YOS: HTTP 200 {OdemeEmriNo,OdemeEmri} note over BKM: İstek başarısız olursa HTTP 204 geri döner @enduml ``` <br><br> **YÖS ile Ödeme Emrinin Sorgulanması Süreç adımları:** 1. İş akışı, Yetkili Ödeme Hizmeti Sağlayıcısı'nın (YÖS) Consent modülüne bir GET isteği göndermesiyle başlar. Bu istek, kullanıcının ödeme emri ile ilgili rıza bilgilerini sorgular. 2. Consent modülü, ilgili rıza bilgilerini YÖS'e başarılı bir şekilde geri gönderir. 3. YÖS, elde ettiği rıza bilgilerinden "OdemeEmriNo"yu kullanarak BBT.Apisix Gateway'e ödeme emri sorgulama isteğinde bulunur. 4. BBT.Apisix Gateway, bu sorgulama talebini Bankalararası Kart Merkezi'ne (BKM) yönlendirir. 5. BKM, sorgulanan ödeme emri bilgilerini ("OdemeEmriNo" ve "OdemeEmri") BBT.Apisix Gateway'e başarılı bir şekilde döndürür. 6. BBT.Apisix Gateway, aldığı ödeme emri bilgilerini YÖS'e ileterek sorgulama sürecini tamamlar. 7. Eğer BKM, ödeme emri sorgulamasında bir hata veya eksik bilgi tespit ederse, BBT.Apisix Gateway'e bir HTTP 204 hatası ile yanıt verir. Bu süreç, YÖS'ün, bir kullanıcının ödeme emri durumunu ve detaylarını sorgulama amacıyla BKM ile etkileşime girdiği bir iş akışını temsil eder. Ödeme emri bilgisi, BKM'den BBT.Apisix Gateway üzerinden YÖS'e aktarılır. # Olay Bildirim ## Olay Abonelik Servisleri (OAS) ### Olay aboneliğinin gerçekleştirilmesi ```plantuml @startuml actor YOS as "YÖS" entity BKM entity Apisix.Gateway as "BBT.Apisix Gateway" entity Consent YOS -> BKM : POST /olay-abonelik {OlayAbonelikIstegi} BKM -> Apisix.Gateway : POST /olay-abonelik Apisix.Gateway-> Consent : POST /olay-abonelik Consent -> Apisix.Gateway : HTTP 201 {OlayAbonelik} Apisix.Gateway -> BKM : HTTP 201 BKM -> YOS : HTTP 201 {OlayAbonelik} @enduml ``` <br><br> Örnek Request: ```json= { "katilimciBlg": { "hhsKod": "8000", "yosKod": "8000" }, "abonelikTipleri": [ { "olayTipi": "KAYNAK_GUNCELLENDI", "kaynakTipi": "BAKIYE" }, { "olayTipi": "KAYNAK_GUNCELLENDI", "kaynakTipi": "ODEME_EMRI" }, { "olayTipi": "KAYNAK_GUNCELLENDI", "kaynakTipi": "COKLU_ISLEM_TALEBI" }, { "olayTipi": "KAYNAK_GUNCELLENDI", "kaynakTipi": "HESAP_BILGISI_RIZASI" }, { "olayTipi": "AYRIK_GKD_BASARILI", "kaynakTipi": "HESAP_BILGISI_RIZASI" }, { "olayTipi": "AYRIK_GKD_BASARILI", "kaynakTipi": "ODEME_EMRI_RIZASI" }, { "olayTipi": "AYRIK_GKD_BASARISIZ", "kaynakTipi": "HESAP_BILGISI_RIZASI" }, { "olayTipi": "AYRIK_GKD_BASARISIZ", "kaynakTipi": "ODEME_EMRI_RIZASI" } ] } ``` Örnek Response: ```json= { "katilimciBlg": { "hhsKod": "8000", "yosKod": "8000" }, "olayAbonelikNo": "8130000c-3bde-4765-ba66-9a0b2d58406a", "olusturmaZamani": "2023-12-15T14:09:12+03:00", "guncellemeZamani": "2023-12-15T14:09:12+03:00", "abonelikTipleri": [ { "olayTipi": "KAYNAK_GUNCELLENDI", "kaynakTipi": "HESAP_BILGISI_RIZASI" }, { "olayTipi": "KAYNAK_GUNCELLENDI", "kaynakTipi": "COKLU_ISLEM_TALEBI" }, { "olayTipi": "AYRIK_GKD_BASARILI", "kaynakTipi": "ODEME_EMRI_RIZASI" }, { "olayTipi": "AYRIK_GKD_BASARISIZ", "kaynakTipi": "ODEME_EMRI_RIZASI" }, { "olayTipi": "AYRIK_GKD_BASARISIZ", "kaynakTipi": "HESAP_BILGISI_RIZASI" }, { "olayTipi": "KAYNAK_GUNCELLENDI", "kaynakTipi": "BAKIYE" }, { "olayTipi": "AYRIK_GKD_BASARILI", "kaynakTipi": "HESAP_BILGISI_RIZASI" }, { "olayTipi": "KAYNAK_GUNCELLENDI", "kaynakTipi": "ODEME_EMRI" } ] } ``` #### Olay Tipleri ve Kaynak Tipleri İlişkisi "* Anlık" : Olay gerçekleştikten sonra maksimum 5 saniye içerisindeki zaman | Olay Tipleri | YÖS Rolü | Kaynak Tipleri | Olay Oluşturulma durumu | KaynakNo | Asıl verinin elde edileceği API | Olay Bildirimini Yapan | Olay Bildirim Zamanı | Retry Policy | | ------------------- | -------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------- | -------------------------------------------------- | ---------------------- | ----------------------------- | ---------------------------------------------------------------------------------------------------- | | KAYNAK_GUNCELLENDI | ÖBH | ODEME_EMRI | Tüm ödeme durum değişikliklerinde | odemeEmriNo | GET /odeme-emri/{odemeEmriNo} | HHS | Anlık | 30 Dakika - 3 Deneme | | | HBH | HESAP_BILGISI_RIZASI | Rıza iptal detay kodu ‘02’ : Kullanıcı İsteği ile HHS üzerinden İptal durumunda | RizaNo | GET /hesap-bilgisi-rizasi/{RizaNo} | HHS | \*Anlık | 30 Dakika - 3 Deneme | | | HBH | BAKIYE | Bakiye nesnesindeki tutarla ilgili bir bilgi değiştiğinde ve HBH rızası içerisinde "06-Anlık Bakiye Bildirimi" izin türü varsa oluşturulur.<br><br>Mevcutta alınmış rızalar için bakiye kaynak tipi özelinde 06 izin türü gerektiğinden; mevcut rızanın yenilenmesine dair müşteriye bilgilendirme yapılarak 06 izin türünü kapsayan yeni rıza alınması süreci YÖS tarafından gerçekleştirilebilir.<br><br>Bloke tutar değişikliği için olay oluşturma ve bildirimi HHS inisiyatifindedir.<br><br>KrdHsp içerisinde yer alan kulKrdTtr değerinin değiştiği durumda olay bildirim gönderilmesi gerekmektedir. | hspRef | GET /hesaplar/{hspRef}/bakiye | HHS | Maksimum 10 dakika içerisinde | Retry policy uygulanmamalıdır. İlk istek gönderilemediği durumda İletilemeyen Olaylara eklenmelidir. | | | HBH | COKLU_ISLEM_TALEBI ( bulk-data) | İlgili API İlke ve kurallarına eklendiğinde güncellenecektir. | | | HHS | | 30 Dakika - 3 Deneme | | AYRIK_GKD_BASARILI | ÖBH | ODEME_EMRI_RIZASI | HHS sisteminde ÖHK kendini doğruladığında rıza oluşturulur. YÖS'e rıza oluşturulduğuna dair bildirim yapılır. YÖS yetkod değerini sorgulama sonucunda elde eder. | RizaNo | GET /yetkilendirme-kodu?rizaNo={rizaNo}}&rizaTip=O | HHS | \*Anlık | 1 Dakika 3 kez | | | HBH | HESAP_BILGISI_RIZASI | HHS sisteminde ÖHK kendini doğruladığında rıza oluşturulur. YÖS'e rıza oluşturulduğuna dair bildirim yapılır. YÖS yetkod değerini sorgulama sonucunda elde eder. | RizaNo | GET /yetkilendirme-kodu?rizaNo={rizaNo}&rizaTip=H | HHS | \*Anlık | 1 Dakika 3 kez | | AYRIK_GKD_BASARISIZ | ÖBH | ODEME_EMRI_RIZASI | HHS sisteminde ÖHK kendini doğruladıktan sonra yaptığı kontroller neticesinde logine izin vermez ise YÖS'e bildirim yapılır. YÖS rıza durumunu sorgulayarak işlemin neden iletilmediğine dair bilgi edinebilir. | RizaNo | GET /odeme-emri-rizasi/{RizaNo} | HHS | \*Anlık | 1 Dakika 3 kez | | | HBH | HESAP_BILGISI_RIZASI | HHS sisteminde ÖHK kendini doğruladıktan sonra yaptığı kontroller neticesinde logine izin vermez ise YÖS'e bildirim yapılır. YÖS rıza durumunu sorgulayarak işlemin neden iletilmediğine dair bilgi edinebilir. | RizaNo | GET /hesap-bilgisi-rizasi/{RizaNo} | HHS | \*Anlık | 1 Dakika 3 kez | | HHS_YOS_GUNCELLENDI | | | BKM sistemi tarafından üretilecek olayları dinlemek için kullanılacak kaynak tipidir. YÖS ve HHS'lerin BKM'ye abonelik oluşturmasına gerek bulunmamaktadır. BKM HHS ve YÖS üretim ortamı tanımı yaparken aboneliklerini başlatacaktır.<br>(HHS yaygınlaştırma durumundayken de aboneliği başlatılacaktır.) | | | HHS | | | | | YÖS | HHS | HHS bilgilerinde değişiklik olduğunda, YÖS'ün hhsKod ile sorgulama yapması ve değişen bilgiyi güncellemesi beklenmektedir. | hhsKod | GET /hhs/{hhsKod} | BKM | \*Anlık | 5 Dakika - 3 Deneme | | | HHS | YOS | YÖS bilgilerinde değişiklik olduğunda, HHS'nin yosKod ile sorgulama yapması ve değişen bilgiyi güncellemesi beklenmektedir. | yosKod | GET /yos/{yosKod} | BKM | \*Anlık | 5 Dakika - 3 Deneme | ### Olay Aboneliğinin güncellenmesi ```plantuml @startuml actor YOS as "YÖS" entity BKM entity Apisix.Gateway as "BBT.Apisix Gateway" entity Consent YOS -> BKM : PUT /olay-abonelik/{olayAbonelikNo} {OlayAbonelik} BKM -> Apisix.Gateway : PUT /olay-abonelik/{olayAbonelikNo} Apisix.Gateway-> Consent : PUT /olay-abonelik/{olayAbonelikNo} Consent -> Apisix.Gateway : HTTP 200 {OlayAbonelik} Apisix.Gateway -> BKM : HTTP 200 BKM -> YOS : HTTP 200 {OlayAbonelik} @enduml ``` <br><br> Örnek Request: ```json= { "katilimciBlg": { "hhsKod": "8000", "yosKod": "8000" }, "olayAbonelikNo": "e486da8c-9896-427e-84e3-6118c8b193f7", "olusturmaZamani": "2023-04-13T09:55:23+03:00", "guncellemeZamani": "2023-04-13T09:55:23+03:00", "abonelikTipleri": [ { "olayTipi": "KAYNAK_GUNCELLENDI", "kaynakTipi": "BAKIYE" } ] } ``` Örnek Response: ```json= { "katilimciBlg": { "hhsKod": "8000", "yosKod": "8000" }, "olayAbonelikNo": "e486da8c-9896-427e-84e3-6118c8b193f7", "olusturmaZamani": "2023-04-13T09:55:23+03:00", "guncellemeZamani": "2023-04-13T09:55:23+03:00", "abonelikTipleri": [ { "olayTipi": "KAYNAK_GUNCELLENDI", "kaynakTipi": "BAKIYE" } ] } ``` ### Olay Aboneliğinin sorgulanması ```plantuml @startuml actor YOS as "YÖS" entity BKM entity Apisix.Gateway as "BBT.Apisix Gateway" entity Consent YOS -> BKM : GET /olay-abonelik BKM -> Apisix.Gateway : GET /olay-abonelik Apisix.Gateway-> Consent : GET /olay-abonelik Consent -> Apisix.Gateway : HTTP 200 {OlayAbonelik} Apisix.Gateway -> BKM : HTTP 200 BKM -> YOS : HTTP 200 {OlayAbonelik} @enduml ``` <br><br> Örnek Response: ```json= { "katilimciBlg": { "hhsKod": "8000", "yosKod": "8000" }, "olayAbonelikNo": "e486da8c-9896-427e-84e3-6118c8b193f7", "olusturmaZamani": "2023-04-13T09:55:23+03:00", "guncellemeZamani": "2023-04-13T09:55:23+03:00", "abonelikTipleri": [ { "olayTipi": "KAYNAK_GUNCELLENDI", "kaynakTipi": "BAKIYE" } ] } ``` ### Olay Aboneliğinin iptali ```plantuml @startuml actor YOS as "YÖS" entity BKM entity Apisix.Gateway as "BBT.Apisix Gateway" entity Consent YOS -> BKM : DELETE /olay-abonelik/{olayAbonelikNo} BKM -> Apisix.Gateway : DELETE /olay-abonelik/{olayAbonelikNo} Apisix.Gateway-> Consent : DELETE /olay-abonelik/{olayAbonelikNo} Consent -> Apisix.Gateway : HTTP 204 Apisix.Gateway -> BKM : HTTP 204 BKM -> YOS : HTTP 204 @enduml ``` <br><br> ### Olay Aboneliğinin İletilemeyen Olayları ```plantuml @startuml actor YOS as "YÖS" entity BKM entity Apisix.Gateway as "BBT.Apisix Gateway" entity Consent YOS -> BKM : GET /olay-abonelik/{olayAbonelikNo}/iletilemeyen-olaylar BKM -> Apisix.Gateway : GET /olay-abonelik/{olayAbonelikNo}/iletilemeyen-olaylar Apisix.Gateway-> Consent : GET /olay-abonelik/{olayAbonelikNo}/iletilemeyen-olaylar Consent -> Apisix.Gateway : HTTP 200 {Olaylar} Apisix.Gateway -> BKM : HTTP 200 {Olaylar} BKM -> YOS : HTTP 200 {Olaylar} @enduml ``` <br><br> Örnek Response: ```json= { "katilimciBlg": { "hhsKod": "8000", "yosKod": "8000" }, "olaylar": [ { "olayNo": "a9ca2110-23c2-4685-ad76-563f7f1cf75b", "olayZamani": "2023-04-13T09:55:23+03:00", "olayTipi": "KAYNAK_GUNCELLENDI", "kaynakTipi": "BAKIYE", "kaynakNo": "c7050930-f77f-4644-b546-964583aebdc3" } ] } ``` ### Sistem Olay dinleme POST /sistem-olay-dinleme HHS'lerin sistem olaylarını dinleme amacıyla açması gereken endpoint bilgisidir. YÖS API içerisinde yapılan değişikliklerde, BKM tarafından HHS'lere olay bildirimlerini yapılır. Olaylar yanıt nesnesi içerisinde 1 adet kayıt yer almalıdır. Başarılı POST isteği sonucu HTTP 202 Accepted kodu ile dönülmelidir. HHS'den başarılı yanıt alınamadığı durumda, 5 dakika aralıklarla 3 kez deneme yapılacaktır. Hata alınmaya devam edilmesi durumunda başka bir aksiyon alınmayacaktır. Örnek Request: ```json= { "katilimciBlg": { "hhsKod": "8000", "yosKod": "8000" }, "olaylar": [ { "olayNo": "a9ca2110-23c2-4685-ad76-563f7f1cf75b", "olayZamani": "2023-04-13T09:55:23+03:00", "olayTipi": "KAYNAK_GUNCELLENDI", "kaynakTipi": "BAKIYE", "kaynakNo": "c7050930-f77f-4644-b546-964583aebdc3" } ] } ``` Response Code : 202 Accepted ## Olay Dinleme Servisleri (ODS) YÖS sunacağı Olay Dinleme Servisi ile hem HHS'den hem de BKM'den gelen olayların bildirimini dinleyebilir. YÖS'ler HHS'de yer alan olay abonelik kayıtlarını iptal edebilir ancak BKM Sistem Olay Dinleme servisinin ileteceği bildirimlerin alınması zorunlu olduğundan ODS API her zaman aktif olmalıdır. HHS'den gelecek olay bildirimlerini olay-dinleme endpointi ile dinlerken, BKM'den gelecek olay bildirimlerini sistem-olay-dinleme endpointi ile dinlemelidir. Olay Dinleme Servislerinde Idempotency kurallarının işletilmesine gerek bulunmamaktadır. ### Olay Dinleme POST /olay-dinleme Olay abonelik servisi ile abone olunan olaylar, olay dinleme servisi ile YÖS'e iletilir. Olaylar yanıt nesnesi içerisinde en fazla 100 kayıt gönderilmelidir. Başarılı POST isteği sonucu HTTP 202 Accepted ile dönülmelidir. HHS'nin işlem hata aldığında, başarılı işlem olana kadar 3 kez deneme yapılması gerekmektedir. İlk istekle son istek arasında 30 dakika olacak şekilde, zamana yayarak bu denemelerin yapılması gerekmektedir. (Exponential backoff policy uygulanması beklenmektedir. ) HHS kendi sistemini yormayacak şekilde, belirleyeceği kurallar dahilinde bu geliştirmeyi yapmalıdır. Örnek Request: ```json= { "katilimciBlg": { "hhsKod": "8000", "yosKod": "8000" }, "olaylar": [ { "olayNo": "a9ca2110-23c2-4685-ad76-563f7f1cf75b", "olayZamani": "2023-04-13T09:55:23+03:00", "olayTipi": "KAYNAK_GUNCELLENDI", "kaynakTipi": "BAKIYE", "kaynakNo": "c7050930-f77f-4644-b546-964583aebdc3" } ] } ``` Response Code : 202 Accepted ### Sistem Olay Dinleme POST /sistem-olay-dinleme YÖS'lerin sistem olaylarını dinleme amacıyla açması gereken endpoint bilgisidir. HHS API içerisinde yapılan değişikliklerde, BKM tarafından YÖS'lere olay bildirimlerini yapılır. Olaylar yanıt nesnesi içerisinde 1 adet kayıt yer almalıdır. Başarılı POST isteği sonucu HTTP 202 Accepted kodu ile dönülmelidir. YÖS'ten başarılı yanıt alınamadığı durumda, 5 dakika aralıklarla 3 kez deneme yapılacaktır. Hata alınmaya devam edilmesi durumunda başka bir aksiyon alınmayacaktır. Örnek Request: ```json= { "katilimciBlg": { "hhsKod": "8000", "yosKod": "8000" }, "olaylar": [ { "olayNo": "a9ca2110-23c2-4685-ad76-563f7f1cf75b", "olayZamani": "2023-04-13T09:55:23+03:00", "olayTipi": "KAYNAK_GUNCELLENDI", "kaynakTipi": "BAKIYE", "kaynakNo": "c7050930-f77f-4644-b546-964583aebdc3" } ] } ``` Response Code : 202 Accepted