denizgolbas/laravel-tcmb-evds
Composer 安装命令:
composer require denizgolbas/laravel-tcmb-evds
包简介
TCMB EVDS2 API'si için Laravel paketi - Günlük döviz kurları
README 文档
README
🇹🇷 Türkçe | 🇬🇧 English
TCMB EVDS2 API'sinin "Günlük Döviz Kurları (Daily FX Rates)" servisine özel geliştirilmiş, modern bir Laravel paketi.
Paket, chainable bir URL/Query Builder, esnek bir API istemcisi, publish edilebilir migration + model yapısı ve isteğe bağlı olarak gelen verilerin veritabanına kaydedilmesini destekler.
Bu paket; proje içinde kolayca günlük döviz kurlarını çekmek, işlemek, saklamak ve otomatikleştirmek isteyen Laravel geliştiricileri için tasarlanmıştır.
⚠️ ÖNEMLİ UYARI
Bu paket resmi TCMB EVDS2 API'sine bağlanmak ve kurları kolayca işleyebilmek için oluşturulmuş bir araçtır. Resmi bir dağıtım değildir.
Kullanımda doğacak finansal hatalar ve kayıplar sizin sorumluluğunuzdadır.
- Bu paket TCMB tarafından resmi olarak desteklenmemektedir
- Finansal işlemlerde kullanmadan önce mutlaka doğrulama yapın
- Kritik finansal kararlar için resmi TCMB kaynaklarını kullanın
- Paket kullanımından kaynaklanan herhangi bir zarardan paket geliştiricileri sorumlu değildir
🚀 Özellikler
- 🔗 Fluent URL Builder - TCMB EVDS2 endpoint'ini zincir fonksiyonlar ile kolayca oluşturun
- 📅 Hazır Tarih Kısayolları -
today(),yesterday(),lastDays(7),thisMonth()gibi fonksiyonlarla hızlı tarih aralıkları - 💾 Opsiyonel Database Kaydı - API'den gelen döviz kurlarını model ile veritabanına kaydedebilirsiniz
- ⚙️ Publish Edilebilir Model ve Migration - İsterseniz kendi projenizde model/migration dosyalarını özelleştirin
- 🧩 Config Tabanlı Esneklik - Varsayılan dövizler, tarih ayarları ve API key config üzerinden yönetilir
- 🎯 Alış/Satış ve Forex/Banknote Ayrımı - Döviz alış, döviz satış, efektif alış, efektif satış kurlarını ayrı ayrı çekebilirsiniz
- 🔄 Null Değer Yönetimi - Hafta sonları ve tatil günleri için esnek null değer işleme stratejileri
- 🧪 Unit, Feature ve Matrix Testleri - Laravel 10/11 + PHP 8.2/8.3 kombinasyonları için GitHub Actions test workflow'u
- 📡 Laravel Http Client ile API İletişimi - Temiz, güvenli ve performanslı bir API client
📦 Kurulum
Paketi Composer ile yükleyin:
composer require denizgolbas/laravel-tcmb-evds
Config Dosyasını Publish Etme
Config dosyasını publish etmek için:
php artisan vendor:publish --tag=evds-config
Bu işlem config/evds.php dosyasını oluşturur. .env dosyanıza API anahtarınızı ekleyin:
TCMB_EVDS_API_KEY=your-api-key-here TCMB_EVDS_BASE_ENDPOINT=https://evds2.tcmb.gov.tr/service/evds/ TCMB_EVDS_NULL_HANDLING=previous_day
Önemli: API anahtarınızı TCMB EVDS2 Kullanıcı Dokümanları sayfasından alabilirsiniz.
Migration'ları Publish Etme
Migration dosyalarını publish etmek için:
php artisan vendor:publish --tag=evds-migrations
Ardından migration'ları çalıştırın:
php artisan migrate
Model'i Publish Etme
Model dosyasını publish etmek için:
php artisan vendor:publish --tag=evds-model
Bu işlem app/Models/EvdsCurrencyRate.php dosyasını oluşturur. İsterseniz bu modeli extend ederek özelleştirebilirsiniz.
🛠️ Kullanım Örnekleri
Temel Kullanım
use Denizgolbas\LaravelTcmbEvds\Facades\Evds; // Tek döviz kuru çekme (otomatik olarak hem alış hem satış, hem forex hem banknote) $data = Evds::currency('USD') ->today() ->get(); // Çoklu döviz kuru çekme $data = Evds::currency(['USD', 'EUR']) ->startDate('2024-01-01') ->endDate('2024-01-10') ->get();
Alış/Satış Seçimi
// Sadece satış kurları (Forex Selling - Döviz Satış) $data = Evds::currency('USD') ->startDate('2024-01-01') ->endDate('2024-01-10') ->type('sell') ->get(); // Sadece alış kurları (Forex Buying - Döviz Alış) $data = Evds::currency('USD') ->startDate('2024-01-01') ->endDate('2024-01-10') ->type('buy') ->get(); // Hem alış hem satış (varsayılan) $data = Evds::currency('USD') ->startDate('2024-01-01') ->endDate('2024-01-10') ->get();
Forex/Banknote (Döviz/Efektif) Seçimi
// Sadece Forex kurları (Döviz) $data = Evds::currency('USD') ->startDate('2024-01-01') ->endDate('2024-01-10') ->marketType('forex') ->get(); // Sadece Banknote kurları (Efektif) $data = Evds::currency('USD') ->startDate('2024-01-01') ->endDate('2024-01-10') ->marketType('banknote') ->get(); // Hem forex hem banknote (varsayılan) $data = Evds::currency('USD') ->startDate('2024-01-01') ->endDate('2024-01-10') ->get();
Kombinasyon Örnekleri
// Forex Satış (Döviz Satış) $data = Evds::currency(['USD', 'EUR']) ->startDate('2024-01-01') ->endDate('2024-01-10') ->type('sell') ->marketType('forex') ->get(); // Banknote Alış (Efektif Alış) $data = Evds::currency('USD') ->startDate('2024-01-01') ->endDate('2024-01-10') ->type('buy') ->marketType('banknote') ->get(); // Banknote Satış (Efektif Satış) $data = Evds::currency('EUR') ->today() ->type('sell') ->marketType('banknote') ->get();
Tarih Kısayolları
// Bugün $data = Evds::currency('USD')->today()->get(); // Dün $data = Evds::currency('USD')->yesterday()->get(); // Son 7 gün $data = Evds::currency('USD')->lastDays(7)->get(); // Bu hafta $data = Evds::currency('USD')->thisWeek()->get(); // Geçen hafta $data = Evds::currency('USD')->lastWeek()->get(); // Bu ay $data = Evds::currency('USD')->thisMonth()->get(); // Geçen ay $data = Evds::currency('USD')->lastMonth()->get();
Null Değer Yönetimi (Hafta Sonları ve Tatil Günleri)
// Bir önceki günün değerini kullan (varsayılan) $data = Evds::currency('USD') ->startDate('2024-01-01') ->endDate('2024-01-10') ->nullValueHandling('previous_day') ->get(); // Geçen haftanın ortalamasını kullan $data = Evds::currency('USD') ->startDate('2024-01-01') ->endDate('2024-01-10') ->nullValueHandling('last_week_avg') ->get(); // Null değerleri atla (kaydetme) $data = Evds::currency('USD') ->startDate('2024-01-01') ->endDate('2024-01-10') ->nullValueHandling('skip') ->get();
Veritabanına Kaydetme
// Basit kaydetme $saved = Evds::currency('USD') ->today() ->save(); // Kombinasyonlu kaydetme $saved = Evds::currency(['USD', 'EUR']) ->startDate('2024-01-01') ->endDate('2024-01-10') ->type('sell') ->marketType('forex') ->nullValueHandling('previous_day') ->roundDecimals(2) // 2 ondalık basamağa yuvarla ->save(); // Kaydedilen verileri kullanma foreach ($saved as $rate) { echo "{$rate->code}: {$rate->rate} ({$rate->date->format('Y-m-d')})\n"; echo "Tip: {$rate->type}, Market: {$rate->marketType}\n"; }
URL Oluşturma
// URL'i görmek için $url = Evds::currency(['USD', 'EUR']) ->startDate('2024-01-01') ->endDate('2024-01-10') ->type('sell') ->marketType('forex') ->build(); echo $url; // Çıktı: https://evds2.tcmb.gov.tr/service/evds/series=TP.DK.USD.S.YTL-TP.DK.EUR.S.YTL&startDate=01-01-2024&endDate=10-01-2024&type=json
Model ile Veritabanından Veri Çekme
use Denizgolbas\LaravelTcmbEvds\Models\EvdsCurrencyRate; use Carbon\Carbon; // Bugünün USD kuru $rate = EvdsCurrencyRate::where('code', 'USD') ->where('date', Carbon::today()) ->first(); // Belirli bir tarih aralığındaki kurlar $rates = EvdsCurrencyRate::where('code', 'USD') ->whereBetween('date', ['2024-01-01', '2024-01-10']) ->get(); // Sadece satış kurları $sellRates = EvdsCurrencyRate::where('code', 'USD') ->sell() ->get(); // Sadece forex kurları $forexRates = EvdsCurrencyRate::where('code', 'USD') ->forex() ->get(); // Kombinasyon: USD Forex Satış $usdForexSell = EvdsCurrencyRate::where('code', 'USD') ->sell() ->forex() ->whereBetween('date', ['2024-01-01', '2024-01-10']) ->orderBy('date', 'asc') ->get(); // En son kaydedilen USD kuru $latestUsd = EvdsCurrencyRate::where('code', 'USD') ->latest('date') ->first(); // Her döviz için en son kurlar $latestRates = EvdsCurrencyRate::whereIn('code', ['USD', 'EUR']) ->latest('date') ->get() ->groupBy('code');
Gerçek Dünya Örnekleri
Örnek 1: Günlük Döviz Kurlarını Çekip Kaydetme
use Denizgolbas\LaravelTcmbEvds\Facades\Evds; // Her gün çalışacak bir scheduled task public function handle() { // USD, EUR, GBP için bugünün kurlarını çek ve kaydet $saved = Evds::currency(['USD', 'EUR', 'GBP']) ->today() ->type('sell') ->marketType('forex') ->nullValueHandling('previous_day') ->save(); return "{$saved->count()} adet kur kaydedildi."; }
Örnek 2: Belirli Tarih Aralığındaki Kurları Raporlama
use Denizgolbas\LaravelTcmbEvds\Facades\Evds; $data = Evds::currency(['USD', 'EUR']) ->startDate('2024-01-01') ->endDate('2024-01-31') ->type('sell') ->marketType('forex') ->get(); $report = []; foreach ($data as $item) { $report[$item->code][$item->date->format('Y-m-d')] = $item->rate; } return view('exchange-rates', ['report' => $report]);
Örnek 3: Model ile Veri Analizi
use Denizgolbas\LaravelTcmbEvds\Models\EvdsCurrencyRate; // Son 30 günün ortalama USD kuru $avgRate = EvdsCurrencyRate::where('code', 'USD') ->sell() ->forex() ->where('date', '>=', Carbon::now()->subDays(30)) ->avg('rate'); // En yüksek ve en düşük kurlar $maxRate = EvdsCurrencyRate::where('code', 'USD') ->sell() ->forex() ->max('rate'); $minRate = EvdsCurrencyRate::where('code', 'USD') ->sell() ->forex() ->min('rate');
Örnek 4: Hata Yönetimi
use Denizgolbas\LaravelTcmbEvds\Facades\Evds; use Denizgolbas\LaravelTcmbEvds\Exceptions\InvalidConfigurationException; use Denizgolbas\LaravelTcmbEvds\Exceptions\ApiException; try { $data = Evds::currency('USD') ->today() ->get(); } catch (InvalidConfigurationException $e) { // API key eksik veya yanlış yapılandırılmış logger()->error('EVDS Config Error: ' . $e->getMessage()); return response()->json(['error' => 'API yapılandırma hatası'], 500); } catch (ApiException $e) { // API isteği başarısız logger()->error('EVDS API Error: ' . $e->getMessage()); return response()->json(['error' => 'API isteği başarısız'], 500); } catch (\Exception $e) { // Genel hata logger()->error('EVDS Error: ' . $e->getMessage()); return response()->json(['error' => 'Beklenmeyen bir hata oluştu'], 500); }
📚 Builder Metodları Referansı
currency(array|string $codes)
Döviz kodlarını ayarlar. Tek veya çoklu döviz kodu kabul eder.
Evds::currency('USD')->get(); Evds::currency(['USD', 'EUR', 'GBP'])->get();
startDate(Carbon|string $date)
Başlangıç tarihini ayarlar. Carbon instance veya string formatında tarih kabul eder.
Evds::currency('USD')->startDate('2024-01-01')->get(); Evds::currency('USD')->startDate(Carbon::parse('2024-01-01'))->get();
endDate(Carbon|string $date)
Bitiş tarihini ayarlar. Carbon instance veya string formatında tarih kabul eder.
Evds::currency('USD')->endDate('2024-01-10')->get();
type(array|string $types)
Alış/Satış tipini ayarlar. 'buy', 'sell' veya ['buy', 'sell'] kabul eder.
Evds::currency('USD')->type('sell')->get(); Evds::currency('USD')->type('buy')->get(); Evds::currency('USD')->type(['buy', 'sell'])->get();
marketType(array|string $marketTypes)
Market tipini ayarlar. 'forex', 'banknote' veya ['forex', 'banknote'] kabul eder.
Evds::currency('USD')->marketType('forex')->get(); Evds::currency('USD')->marketType('banknote')->get(); Evds::currency('USD')->marketType(['forex', 'banknote'])->get();
nullValueHandling(string $strategy)
Null değer işleme stratejisini ayarlar. 'previous_day', 'last_week_avg', 'skip' kabul eder.
Evds::currency('USD')->nullValueHandling('previous_day')->get(); Evds::currency('USD')->nullValueHandling('last_week_avg')->get(); Evds::currency('USD')->nullValueHandling('skip')->get();
build() veya toUrl()
URL'i oluşturur ve döndürür.
$url = Evds::currency('USD')->today()->build();
get()
API'den veri çeker ve Collection döndürür.
$data = Evds::currency('USD')->today()->get();
save()
API'den veri çeker ve veritabanına kaydeder. Collection döndürür.
// Basit kaydetme (API'den gelen değer olduğu gibi kaydedilir) $saved = Evds::currency('USD')->today()->save(); // Ondalık basamak sayısını yuvarlayarak kaydetme $saved = Evds::currency('USD') ->today() ->roundDecimals(2) // 2 ondalık basamağa yuvarla (örn: 45.67) ->save(); // Farklı yuvarlama modları $saved = Evds::currency('USD') ->today() ->roundDecimals(2, 'floor') // Aşağı yuvarla (örn: 45.67 -> 45.67, 45.678 -> 45.67) ->save(); $saved = Evds::currency('USD') ->today() ->roundDecimals(2, 'ceil') // Yukarı yuvarla (örn: 45.67 -> 45.67, 45.671 -> 45.68) ->save();
🧪 Testler
Testleri çalıştırmak için:
composer test
veya
vendor/bin/phpunit --testdox
Test Kapsamı
- ✅ Builder URL oluşturma testleri
- ✅ Tarih metodları testleri
- ✅ API client testleri (mock ile)
- ✅ Database kayıt testleri
- ✅ Facade testleri
- ✅ Null değer yönetimi testleri
Matrix Testler
GitHub Actions üzerinde şu kombinasyonlar test edilir:
- PHP 8.2 + Laravel 10.x
- PHP 8.2 + Laravel 11.x
- PHP 8.3 + Laravel 10.x
- PHP 8.3 + Laravel 11.x
GitHub Actions için API Key Kurulumu
GitHub Actions'da testlerin çalışması için (opsiyonel - testler mock kullanır):
- GitHub repository'nize gidin
- Settings → Secrets and variables → Actions seçeneğine gidin
- New repository secret butonuna tıklayın
- Şu bilgileri girin:
- Name:
TCMB_EVDS_API_KEY - Secret: API anahtarınızı yapıştırın
- Name:
- Add secret butonuna tıklayın
Not: Testler için gerçek API key'e ihtiyaç yoktur çünkü testler mock response kullanır. Ancak gerçek API testleri yapmak isterseniz secret'ı ekleyebilirsiniz.
⚙️ Konfigürasyon
Config dosyası (config/evds.php) aşağıdaki ayarları içerir:
return [ 'api_key' => env('TCMB_EVDS_API_KEY', ''), 'base_endpoint' => env('TCMB_EVDS_BASE_ENDPOINT', 'https://evds2.tcmb.gov.tr/service/evds/'), 'default_currencies' => ['USD', 'EUR', 'GBP'], 'default_start_date' => null, 'default_end_date' => null, 'default_frequency' => 'daily', 'null_value_handling' => env('TCMB_EVDS_NULL_HANDLING', 'previous_day'), 'model' => \Denizgolbas\LaravelTcmbEvds\Models\EvdsCurrencyRate::class, ];
Null Değer Yönetimi
Hafta sonları ve tatil günleri için null değerlerin nasıl işleneceğini ayarlayabilirsiniz:
'previous_day': Bir önceki günün değerini kullan (varsayılan)'last_week_avg': Geçen haftanın ortalamasını kullan'skip': Null değerleri atla, kaydetme
Model Özelleştirme
Kendi modelinizi kullanmak için config dosyasında model ayarını değiştirin:
'model' => \App\Models\CustomCurrencyRate::class,
Kendi modeliniz EvdsCurrencyRate modelini extend etmelidir:
namespace App\Models; use Denizgolbas\LaravelTcmbEvds\Models\EvdsCurrencyRate as BaseModel; class CustomCurrencyRate extends BaseModel { // Özelleştirmeleriniz }
🔧 Geliştirme
Gereksinimler
- PHP >= 8.2
- Laravel >= 10.0
- Composer
Geliştirme Ortamı Kurulumu
git clone https://github.com/denizgolbas/laravel-tcmb-evds.git
cd laravel-tcmb-evds
composer install
Kod Standartları
Paket PSR-12 kod standartlarına uygundur. Kodları kontrol etmek için:
composer lint
📄 Lisans
Bu paket MIT lisansı altında lisanslanmıştır. Detaylar için LICENSE dosyasına bakın.
🤝 Katkıda Bulunma
Katkılarınızı bekliyoruz! Lütfen:
- Fork edin
- Feature branch oluşturun (
git checkout -b feature/amazing-feature) - Değişikliklerinizi commit edin (
git commit -m 'Add some amazing feature') - Branch'inizi push edin (
git push origin feature/amazing-feature) - Pull Request oluşturun
📞 Destek
Sorularınız veya önerileriniz için:
- Issue açın: GitHub Issues
- Email: info@denizgolbas.com
🙏 Teşekkürler
- TCMB EVDS2 API ekibine teşekkürler
- Laravel topluluğuna teşekkürler
⭐ Bu paketi beğendiyseniz yıldız vermeyi unutmayın!
denizgolbas/laravel-tcmb-evds 适用场景与选型建议
denizgolbas/laravel-tcmb-evds 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 2 次下载、GitHub Stars 达 4, 最近一次更新时间为 2025 年 12 月 04 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「laravel」 「tcmb」 「doviz」 「exchange-rate」 「evds」 「tcmb-api」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 denizgolbas/laravel-tcmb-evds 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 denizgolbas/laravel-tcmb-evds 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 denizgolbas/laravel-tcmb-evds 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
T.C. Merkez Bankası üzerinden güncel döviz kurlarını çeker
Get currency rates from the Central Bank of the Republic of Turkey
TCMB Currenct Converter
Alfabank REST API integration
Handles TCMB currencies for Laravel 6
TCMB Currency api
统计信息
- 总下载量: 2
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 4
- 点击次数: 27
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-12-04