Başlangıç · Uçtan Uca Rehber

Sıfırdan ilk ödemeye

Bu rehber, bulutta yayınlanan FinevoConnect YÖS'e bağlanmaktan bir bankayı/kurumu bağlamaya, hesap/bakiye görmeye ve ödeme başlatmaya kadar tüm yolu adım adım gösterir. Kod bilmesen de akışı takip edebilirsin; bilirsen örnekleri doğrudan kopyalayıp deneyebilirsin.

Bulut APIJWT ile girişRıza → GKD → Belirteç?fresh=true canlı veri
Kimler okumalı? İlk kez FinevoConnect YÖS'e bakan bir geliştirici, sistemi test için kullanan biri ya da "kullanıcı bir bankayı/kurumu nasıl bağlıyor" akışını uçtan uca görmek isteyen herkes. Derinlik için Mimari, tüm uçlar için API Uçları.

1. API adresi

FinevoConnect YÖS bulutta hazır yayında; kurulum yapman gerekmez. Tüm uçlar tek bir baz adresin altında:

ServisAdresRol
FinevoConnect YÖShttps://yos.91.98.230.19.nip.ioPublic REST API — bankaya/kuruma hiç bağlanmaz
Dokümantasyonhttps://yos-docs.91.98.230.19.nip.ioBu site
Tüm uçlar /api/v1/... altında.

2. Sağlığı doğrula

curl https://yos.91.98.230.19.nip.io/api/v1/health/ready   # -> 200 OK
200 dönüyorsa sistem ayakta. ready "istek alabilirim" demek; live yalnız "süreç yaşıyor" der.

3. Kayıt ol ve token al

Sistem çok kullanıcılıdır: herkes yalnız kendi bankalarını/kurumlarını, hesaplarını, ödemelerini görür. Parola yoktur — kullanıcıyı, FinevoConnect YÖS'ü kullanan uygulama tanıtır: uygulama kendini X-App-Key başlığındaki uygulama anahtarıyla kanıtlar, kullanıcıyı da userKey + customerNo ikilisiyle bildirir. Karşılığında JWT (kimliği kanıtlayan imzalı erişim token'ı) alınır; sonraki her istekte gösterilir.

# kayıt + token (kullanıcı zaten varsa yenisi açılmaz, yine token döner)
curl -X POST https://yos.91.98.230.19.nip.io/api/v1/auth/register \
  -H "Content-Type: application/json" \
  -H "X-App-Key: aZ9BOJzxJLYDQ6LRTKgrnYRL0Mklru7P1T8RONZABz6brkRp" \
  -d '{ "userKey": "23456789138", "customerNo": "9570965931", "displayName": "Demo Kullanıcı" }'

# Yanıt:
# {
#   "accessToken":  "eyJhbGciOi...",  <- kısa ömürlü, her istekte kullan
#   "refreshToken": "d9f1c2...",      <- bitince /auth/refresh ile tazele
#   "expiresIn": 900
# }
Ayrı bir giriş ucu yok: aynı register çağrısı hem ilk kayıt hem sonraki girişlerdir — kullanıcı zaten kayıtlıysa yalnızca taze token üretilir. Uygulama anahtarları veritabanındaki Parameters tablosunda (auth.app.*.key) yönetilir; uygulamanın izinli yönlendirme host'ları da aynı yerde (auth.app.*.redirect_hosts) tutulur. Yukarıdaki anahtar bu bulut ortamında geçerlidir.
İki token neden var? Erişim belirteci kısa ömürlüdür (güvenlik); süresi dolunca yenileme belirteciyle /api/v1/auth/refresh çağrılır. Böylece her istekte kayıt ucuna dönmek gerekmez, sızan bir belirteç de uzun süre işe yaramaz.
Authorization: Bearer <accessToken>

4. Bir bankayı/kurumu bağla

İşin kalbi. Kullanıcı "şu bankadaki/kurumdaki hesaplarıma erişmene izin veriyorum" der; buna rıza (consent) denir. FinevoConnect YÖS bankaya/kuruma kendisi bağlanmaz — rızayı veritabanına yazar, banka/kurum konuşmasını batch'in iç ucunu senkron çağırarak (iç RPC) batch'e yaptırır:

Bankayı/Kurumu seç
GET /api/v1/hhs
Bağlanabilecek bankaların/kurumların listesini al; kullanıcı birini seçer.
Rıza başlat
POST /api/v1/hhs-connections
FinevoConnect YÖS rızayı veritabanına yazar ve batch'in iç ucunu senkron çağırır. Kullanıcıyı bankanın/kurumun onay ekranına götüren adres aynı yanıtta döner.
Batch rızayı bankada/kurumda açar
POST /internal/consent-create (iç RPC)
RPC çağrısını alır, bankaya/kuruma mTLS+JWS ile bağlanır, rıza kaydını banka/kurum tarafında oluşturur ve onay adresini API'ye döndürür.
Kullanıcı bankada/kurumda onaylar (GKD)
tarayıcı yönlendirmesi
Kimlik doğrulama bankanın/kurumun kendi ekranında olur; FinevoConnect YÖS bu ekranı görmez.
Banka/Kurum geri döner
GET /api/v1/hhs-connections/callback
Banka/Kurum kullanıcıyı yetki koduyla bu adrese geri yönlendirir. Callback işlenince kullanıcının tarayıcısı, bağlantı oluşturulurken istekle verilen consumerSuccessUrl/consumerErrorUrl adresine (verilmemişse ortam varsayılanına) gönderilir.
Belirteç alınır → Bağlandı
yetKod → erişim belirteci
Callback'i alan API, batch'in iç ucunu (/internal/authorization-complete) senkron çağırır; batch yetki kodunu erişim belirtecine çevirir, bağlantı "Connected" olur ve ilk hesap/bakiye/kart verisi aynı adımda çekilir. Belirteç ve kişisel bilgiler şifreli saklanır. Batch'e o an ulaşılamazsa iş niyet kutusuna yedeklenir, arka planda tamamlanır.
# bankaları/kurumları listele
curl https://yos.91.98.230.19.nip.io/api/v1/hhs -H "Authorization: Bearer $TOKEN"

# rıza / bağlantı başlat
curl -X POST https://yos.91.98.230.19.nip.io/api/v1/hhs-connections \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{ "hhsId": "<banka/kurum-id>" }'
# -> { "connectionId": "...", "redirectUrl": "https://banka/kurum/onay?..." }

# kullanıcı redirectUrl'de onayladıktan sonra:
curl https://yos.91.98.230.19.nip.io/api/v1/hhs-connections \
  -H "Authorization: Bearer $TOKEN"
# -> status: "Connected" görene kadar bekle (birkaç saniye)
Idempotency-Key nedir? Ağ kopması olur da aynı istek iki kez gönderilirse işlem bir kez uygulanır. Para işlemlerinde zorunludur; üstüne rezerve→tamamla iki fazlı koruma biner.

5. Veriyi gör

Bağlantı Connected olduğunda batch ilk hesap/bakiye/kart verisini çekip veritabanına yazar. Public API bu sorgularda bankaya/kuruma gitmez — veritabanından okur, bu yüzden hızlıdır. En güncel veri gerektiğinde isteğe ?fresh=true eklenir: API, batch üzerinden bankaya/kuruma canlı sorar ve taze veriyi aynı yanıtta döndürür.

# tüm bankalardaki/kurumlardaki hesaplar + bakiyeler tek listede
curl https://yos.91.98.230.19.nip.io/api/v1/accounts -H "Authorization: Bearer $TOKEN"

# bir hesabın işlem geçmişi (sayfa sayfa)
curl "https://yos.91.98.230.19.nip.io/api/v1/accounts/<hesapId>/transactions" \
  -H "Authorization: Bearer $TOKEN"

# kartlar
curl https://yos.91.98.230.19.nip.io/api/v1/cards -H "Authorization: Bearer $TOKEN"

# anlık taze veri: bankadan/kurumdan canlı çeker (biraz yavaş, en güncel)
curl "https://yos.91.98.230.19.nip.io/api/v1/hhs-connections/<id>?fresh=true" \
  -H "Authorization: Bearer $TOKEN"
?fresh=true nasıl çalışır? FinevoConnect YÖS batch'e senkron bir canlı-sorgu isteği yapar; batch bankadan/kurumdan anlık çeker, sonucu döndürür. Ayrıntı: Canlı Okuma & PSU.

6. Ödeme başlat

Ödeme, hesap bağlamayla aynı desendedir: emir oluştur → kullanıcı bankada/kurumda onaylar → banka/kurum geri döner → sonuç işlenir. Para hareketi olduğu için idempotency + iki fazlı tamamlanma devrededir.

curl -X POST https://yos.91.98.230.19.nip.io/api/v1/payment-orders \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "sourceAccountId": "<gönderen-hesapId>",
    "amount": 125.50,
    "currency": "TRY",
    "creditorIban": "TR000000000000000000000000",
    "creditorName": "Alıcı Adı",
    "description": "Test ödemesi"
  }'

# yanıt: onay adresi -> kullanıcı onaylar -> durumu izle:
curl https://yos.91.98.230.19.nip.io/api/v1/payment-orders/<id> \
  -H "Authorization: Bearer $TOKEN"

Sorun giderme

401 / 403 alıyorum

Belirteç eksik ya da süresi dolmuş. Authorization: Bearer … ekle; bittiyse /api/v1/auth/refresh ile tazele.

404 ama kaynak var sanıyorum

Muhtemelen başka kullanıcının kaynağı. Güvenlik gereği 404 döner — varlığı bile sızmaz (BOLA koruması).

Bağlantı "Connected" olmuyor

GKD onayı tamamlanmamış ya da banka/kurum callback'i API'ye ulaşmamış olabilir; batch'e o an ulaşılamadıysa iş niyet kutusuna yedeklenmiştir ve arka planda tamamlanır. Birkaç saniye bekleyip tekrar sorgula; batch loglarına Loglama sayfasından (code-agent Logs sekmesi) bak.

502 · hhs_unavailable

Bankaya/Kuruma ulaşılamıyor. Sertifika/mTLS ayarlarını ve OHVPS_DEFAULT_HHS_BASE_URL değerini kontrol et.

Her hata RFC 7807 + makine-okunur code + traceId taşır. Tüm kodların anlamı: Hata Kodları.