hennest / exchange-rate
为 Laravel 应用提供的汇率服务提供商
1.0.0
2024-09-01 12:15 UTC
Requires
- php: ^8.2
- guzzlehttp/guzzle: ^7.8
Requires (Dev)
- laravel/pint: ^1.16
- orchestra/testbench: ^8.23
- pestphp/pest: ^2.34
- phpstan/phpstan: ^1.11
README
这个 PHP 库提供了一种灵活高效的方式来处理汇率,包括获取当前汇率、缓存和货币转换。它旨在无缝集成到 Laravel 应用中。
功能
- 从多个 API 源获取汇率
- 缓存汇率以提高性能
- 解析和过滤汇率数据
- 以可配置的精度执行货币转换
- 易于扩展和自定义
- 通过服务提供商集成 Laravel
安装
您可以通过 Composer 安装此库
composer require hennest/exchange-rate
Laravel 集成
此库附带 Laravel 服务提供商,便于集成。安装后,将服务提供商添加到您的 config/app.php
文件中
'providers' => [ // Other Service Providers Hennest\ExchangeRate\Providers\ExchangeRateServiceProvider::class, ],
配置
发布配置文件
php artisan vendor:publish --tag=exchange-rate-config
这将创建一个 config/exchange-rate.php
文件,您可以在其中自定义库设置。
使用方法
基本用法
use Hennest\ExchangeRate\Contracts\ExchangeRateInterface; class ExampleController { public function __construct( private ExchangeRateInterface $exchangeRate ) {} public function example() { // Get exchange rates for specific currencies $rates = $this->exchangeRate->rates(['EUR', 'GBP', 'JPY']); // Get a single exchange rate $rate = $this->exchangeRate->getRate('EUR'); // Convert currency $convertedAmount = $this->exchangeRate->convert(100, 'USD', 'EUR'); } public function anotherExample() { // Get exchange rates for specific currencies $rates = app(ExchangeRateInterface::class)->rates(['EUR', 'GBP', 'JPY']); // Get a single exchange rate $rate = app(ExchangeRateInterface::class)->getRate('EUR'); // Convert currency $convertedAmount = app(ExchangeRateInterface::class)->convert(100, 'USD', 'EUR'); } }
配置选项
config/exchange-rate.php
文件允许您自定义库的各个方面。以下是可用选项的概述
return [ // Base currency for the exchange rate 'base_currency' => env('EXCHANGE_RATE_BASE_CURRENCY', 'USD'), // API key for the exchange rate service 'api_key' => env('EXCHANGE_RATE_API_KEY', ''), // Arbitrary Precision Calculator settings 'math' => [ 'scale' => env('EXCHANGE_RATE_SCALE', 10), ], // Cache configuration 'cache' => [ 'prefix' => env('EXCHANGE_RATE_CACHE_PREFIX', 'exchange_rate'), 'driver' => env('EXCHANGE_RATE_CACHE_DRIVER', env('CACHE_STORE', 'file')), 'ttl' => env('EXCHANGE_RATE_CACHE_TTL', 6 * 3600), ], // Builder classes for creating DTOs 'assemblers' => [ 'response' => Hennest\ExchangeRate\Assembler\ResponseAssembler::class, ], // Customizable service classes 'services' => [ 'api' => Hennest\ExchangeRate\Drivers\CurrencyApiService::class, 'cache' => Hennest\ExchangeRate\Services\CacheService::class, 'parser' => Hennest\ExchangeRate\Services\ParserService::class, 'exchange_rate' => Hennest\ExchangeRate\Services\ExchangeRateService::class, ], // Default driver 'default_driver' => 'currency-api', // Available API drivers 'drivers' => [ 'currency-api' => [ 'api' => Hennest\ExchangeRate\Drivers\CurrencyApiService::class, ], 'currency-beacon' => [ 'api' => Hennest\ExchangeRate\Drivers\CurrencyBeaconApiService::class, ], ], ];
关键配置选项
base_currency
:设置您的首选基础货币(默认:USD)。api_key
:如果您选择的 API 需要密钥,请在此处或.env
文件中设置。math.scale
:设置十进制计算的精度。cache
:配置缓存选项,包括驱动程序、前缀和 TTL。services
:覆盖默认服务实现。default_driver
:选择默认 API 驱动程序。drivers
:配置多个 API 驱动程序以提高灵活性。
扩展库
您可以将 default_driver
设置为 null
并更新 services
数组以扩展库的功能。您可以创建以下接口的定制实现
ApiInterface
:用于自定义 API 集成CacheInterface
:用于自定义缓存机制ParserInterface
:用于自定义解析逻辑ExchangeRateInterface
:用于自定义汇率计算
在 config/exchange-rate.php
文件的 services
部分注册您的自定义实现
'services' => [ 'api' => \App\Services\MyCustomApiService::class, 'cache' => \App\Services\MyCustomCacheService::class, 'parser' => \App\Services\MyCustomParserService::class, 'exchange_rate' => \App\Services\MyCustomExchangeRateService::class, ],
这允许您完全控制应用程序中使用的服务。
多个 API 驱动程序
此库支持多个 API 驱动程序。您可以在 drivers
部分添加新的驱动程序,并通过更改 default_driver
设置在它们之间切换。
添加自定义驱动程序
要添加自定义驱动程序或使用不同的 API 服务,通过在 config/exchange-rate.php
文件中添加新的条目来扩展库。
'drivers' => [ 'currency-api' => [ 'api' => Hennest\ExchangeRate\Drivers\CurrencyApiService::class, ], 'currency-beacon' => [ 'api' => Hennest\ExchangeRate\Drivers\CurrencyBeaconApiService::class, ], 'my-custom-driver' => [ 'api' => \App\Services\MyCustomApiService::class, ], ],
选择驱动程序
要使用您的自定义驱动程序,您可以通过以下方式之一
- 更新配置文件中的
default_driver
设置
'default_driver' => 'my-custom-driver',
- 或使用环境变量设置它
EXCHANGE_RATE_DRIVER=my-custom-driver
自定义实现
创建自定义实现时,请确保它们遵循以下接口
ApiInterface
:用于自定义 API 集成CacheInterface
:用于自定义缓存机制ParserInterface
:用于自定义解析逻辑ExchangeRateInterface
:用于自定义汇率计算
贡献
欢迎贡献!请随时提交拉取请求。
许可
此库是开源软件,根据 MIT 许可证 许可。