hennest/exchange-rate

为 Laravel 应用提供的汇率服务提供商

1.0.0 2024-09-01 12:15 UTC

This package is auto-updated.

Last update: 2024-09-04 01:07:27 UTC


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,
    ],
],

选择驱动程序

要使用您的自定义驱动程序,您可以通过以下方式之一

  1. 更新配置文件中的 default_driver 设置
'default_driver' => 'my-custom-driver',
  1. 或使用环境变量设置它
EXCHANGE_RATE_DRIVER=my-custom-driver

自定义实现

创建自定义实现时,请确保它们遵循以下接口

  • ApiInterface:用于自定义 API 集成
  • CacheInterface:用于自定义缓存机制
  • ParserInterface:用于自定义解析逻辑
  • ExchangeRateInterface:用于自定义汇率计算

贡献

欢迎贡献!请随时提交拉取请求。

许可

此库是开源软件,根据 MIT 许可证 许可。