Authorization: Bearer <access_token> header’ı ile gönderilir.
Genel akış, kod örnekleri ve token süreleri için kanonik Kimlik Doğrulama sayfasına bakın. Bu sayfa Sanal POS’a özgü endpoint URL’lerini ve örneklerini içerir.
Endpoint URL’leri
| Ortam | Identity (token alma) | Sanal POS API |
|---|---|---|
| Production | https://identity.payven.com.tr | https://vpos.payven.com.tr |
| Sandbox | https://identity-sandbox.payven.com.tr | https://vpos-sandbox.payven.com.tr |
Realm seçimi
Payven Identity multi-tenant — token endpoint URL’sinde realm slug’ı kullanılır:POST /api/v1/auth/{slug}/token. Slug’ınız onboarding sırasında size atanır:
| Slug | Kullanım |
|---|---|
payven | Master realm — Payven platform admin’leri |
tenant-{your-slug} | Sizin tenant realm’iniz (örn. tenant-acme) |
iss claim’i realm’e işaret eder; SanalPos backend tüm kabul edilen realm’leri otomatik doğrular — composer’a tek tek tanıtım gerekmez.
Hızlı başlangıç
Önce Identity’den access token alın —$PAYVEN_TOKEN ortam değişkenine yazıp Sanal POS endpoint’lerine gönderin:
Merchant kimliği
Access token içinde merchant kimliği claim olarak taşınır — tek-merchant tenant’larda ek bir header göndermenize gerek yoktur. Backend bu claim’den okuyup işlemi doğru merchant adına kayıt eder. Multi-merchant senaryolar (bir tenant altında birden çok merchant’a işlem alıyorsanız) için override header’ları:X-Merchant-Id öncelikli olur.
| Header | Tip | Anlam | Kaynak |
|---|---|---|---|
X-Merchant-Id | UUID | Payven’in atadığı dahili kimlik | Konsoldan kopyalanır (Merchant.id) |
X-External-Merchant-Id | string | Sizin sisteminizdeki kimlik | Onboarding sırasında belirlenir (Merchant.external_id) |
Response header’ları
Her response’da Payven aşağıdakileri ekler:| Header | Açıklama |
|---|---|
X-Correlation-Id | Bu isteğin Payven log zincirindeki kimliği. Destek talebi açarken paylaşın. |
X-RateLimit-* | Mevcut kota. Detay. |
Retry-After | Yalnız 429 yanıtında — kaç saniye sonra tekrar denemeniz gerektiği. |
Idempotent-Replayed | Yalnız idempotent replay’lerde — yanıt cache’den geldiyse true. |
Hata response’ları (kimlik doğrulama)
| HTTP | code | Anlam | Çözüm |
|---|---|---|---|
401 | invalid_token | Authorization header’ı eksik / geçersiz | Token alın veya refresh edin |
401 | token_expired | Access token süresi doldu | Refresh akışı |
403 | merchant_inactive | Merchant pasif statüde | Konsol → Merchants |
403 | merchant_not_found | Belirtilen merchant bulunamadı | Header’ı doğrulayın |
403 | product_not_licensed | Sanal POS modülü planınızda etkin değil | Plan yükseltme |
429 | rate_limit_exceeded | Limit aşıldı | Retry-After header’ına uyun |
Güvenlik kuralları
Token cache — Her API çağrısında token alıp Identity’yi yormayın. Bellek-içi cache + 60sn margin ile auto-refresh kullanın.
Sadece sunucu tarafı —
client_secret’ı frontend, mobil veya public repo’ya asla koymayın.HTTPS zorunlu — HTTP istekleri reddedilir.
Production = ayrı client — Production ve sandbox için ayrı
client_id/client_secret kullanın.Loglarda maskele —
access_token, refresh_token, client_secret değerlerini log’lara yazmayın.