Download the PHP package brightcreations/exchange-rates without Composer
On this page you can find all versions of the php package brightcreations/exchange-rates. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download brightcreations/exchange-rates
More information about brightcreations/exchange-rates
Files in brightcreations/exchange-rates
Package exchange-rates
Short Description A Laravel package for fetching exchange rates from various sources.
License MIT
Informations about the package exchange-rates
Exchange Rates Library
A comprehensive Laravel package for fetching, storing, and managing exchange rates from various external APIs. This library provides a clean, extensible architecture for handling currency exchange rates with support for both current and historical data.
🚀 Features
- Multiple API Support: Built-in support for Exchange Rate API, Open Exchange Rates, and World Bank
- Automatic Fallback: Intelligent fallback mechanism that tries services in order until one succeeds
- Historical Data: Store and retrieve historical exchange rates
- Bulk Operations: Efficient bulk operations for multiple currencies
- Database Storage: Automatic storage and caching of exchange rates
- Smart Caching: Automatic caching for World Bank yearly data
- Extensible Architecture: Easy to add new exchange rate providers
- DTO Pattern: Clean data transfer objects for type-safe operations
- Repository Pattern: Clean separation between data access and business logic
- Built-in REST Endpoints: Ready-to-use read-only HTTP endpoints with normal and reversed lookup modes
📦 Installation
1. Install via Composer
2. Publish Configuration and Migrations
3. Configure Environment Variables
Add the following to your .env file:
🏗️ Architecture Overview
This library follows a clean, layered architecture:
- Services: Handle API communication and business logic
- Repositories: Manage database operations
- DTOs: Type-safe data transfer objects
- Contracts: Define interfaces for extensibility
- Models: Eloquent models for database entities
Historical rate provider capabilities
When consuming historical rates (e.g. via brightcreations/money-converter fetchOnFail(), interpolate(), or extrapolate()), provider behaviour varies:
| Provider | Auto-fetch on getHistoricalExchangeRate miss |
Granularity | Notes |
|---|---|---|---|
OpenExchangeRateService |
Yes | Daily | Fetches and stores on ModelNotFoundException |
ExchangeRateApiService |
Yes | Daily | Same as Open Exchange Rates |
WorldBankExchangeRateApiService |
No (DB only) | Yearly | Pre-populate with php artisan exchange-rates:backfill |
FallbackExchangeRateService |
Delegates to fallback order | Per provider | First successful provider in fallback_order wins |
See money-converter historical conversion docs for how fetchOnFail, interpolate(), and extrapolate() use these capabilities.
Programmatic check:
Consuming with money-converter
brightcreations/money-converter is the recommended package for currency conversion in Laravel apps that use this library.
- Install both packages:
composer require brightcreations/money-converter brightcreations/exchange-rates - Follow the money-converter integration guide to publish configs, migrate, and populate rates
- money-converter's default PDO provider reads the same
currency_exchange_ratestables this package writes
Version requirement: money-converter ^0.6.0 requires exchange-rates ^0.8.0 for bounding-rate repository methods used by interpolation and extrapolation.
📚 Documentation
- Installation & Configuration - Detailed setup instructions
- Services & Contracts - Understanding the service layer and contracts
- Repository Pattern - Database operations and DTO usage
- DTOs Guide - Data Transfer Objects explained
- API Reference - Complete method documentation
- Examples - Practical usage examples
🔧 Quick Start
Basic Usage
Historical Data
Repository Usage
Note: You can also use Laravel's
resolve()orapp()helpers to access the services directly:The facades are the recommended and most convenient way for most use cases.
🌐 Built-in HTTP Endpoints
The package ships with a default read-only REST endpoint that returns exchange rates already stored in the database. It does not call any external provider — use storeExchangeRates(...) (via Artisan commands or your own code) to populate data first.
Route Configuration
Routes are enabled by default. Publish the config to customise or disable them:
The final URL is always api/{prefix}/..., so the default resolves to /api/exchange-rates/{currency}.
Normal Mode — rates from a base currency
{currency} is the base currency. Returns all stored target currencies and their rates.
| Parameter | Location | Required | Description |
|---|---|---|---|
currency |
path | yes | ISO 4217 base currency code (3 letters, e.g. USD). Case-insensitive. |
currencies |
query string | no | Comma-separated target currency codes to filter by (e.g. EUR,GBP,SAR). If omitted, all stored targets are returned. |
Example — all targets
Example — filtered
Reversed Mode — rates into a target currency
{currency} becomes the target currency. Returns all stored source currencies that have a rate pointing to this target. Each rate is the stored source → target value (same direction as source_currency → target_currency).
| Parameter | Location | Required | Description |
|---|---|---|---|
currency |
path | yes | ISO 4217 target currency code (3 letters, e.g. EUR). Case-insensitive. |
reversed |
query string | yes | Must be true (or 1) to activate this mode. |
currencies |
query string | no | Comma-separated source currency codes to filter by (e.g. USD,GBP). If omitted, all stored sources are returned. |
Example — all sources
Example — filtered
Example — reciprocal pair lookup
Equivalent to GET /api/exchange-rates/GBP?currencies=USD when a GBP→USD row is stored:
HTTP Responses
| Status | Meaning |
|---|---|
| 200 | Success. rates is an empty array when no data is stored for that currency. |
| 422 | Validation error — invalid currency code format. |
🔌 Supported APIs
The library uses an intelligent fallback mechanism. By default, it tries services in this order:
- Open Exchange Rates (primary)
- Exchange Rate API (secondary)
- World Bank (tertiary fallback)
Exchange Rate API
- Provider: Exchange Rate API
- Features: Current and historical rates, real-time updates
- Requires: API Token
- Cost: Free tier available
Open Exchange Rates
- Provider: Open Exchange Rates
- Features: Current and historical rates, real-time updates
- Requires: App ID
- Cost: Free tier available
World Bank Exchange Rate API
- Provider: World Bank Open Data
- Features: Historical yearly average rates
- Requires: No API key (free and open)
- Cost: Free
- Data: Yearly averages (less precise than real-time services)
- Coverage: ~160+ currencies mapped from country data
- Caching: 24-hour cache for efficiency
Note on World Bank Data: The World Bank service provides yearly average exchange rates based on country-level data. While less precise than real-time APIs, it serves as an excellent free fallback option. Exchange rates are computed by:
- Fetching LCU (Local Currency Unit) per USD rates by country
- Mapping countries to currencies using pragmarx/countries
- Computing cross-currency rates from USD-anchored values
Limitations:
- Yearly averages only (not daily/real-time)
- Some currencies may not be available if country mapping fails
- Aggregate regions (like "Euro Area") are filtered out automatically
🔄 Fallback Configuration
You can customise the fallback order in config/exchange-rates.php:
Or use a specific service directly:
🤝 Contributing
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
📄 License
This project is licensed under the MIT License — see the LICENSE file for details.
🆘 Support
For support, please contact:
- Email: [email protected]
- Developer at: DAZU DPN
- Company: Bright Creations
Made with ❤️ by Bright Creations
All versions of exchange-rates with dependencies
illuminate/support Version ^9.0|^10.0|^11.0|^12.0
illuminate/database Version ^10.0 || ^11.0 || ^12.0
illuminate/http Version ^10.0 || ^11.0 || ^12.0
illuminate/console Version ^10.0 || ^11.0 || ^12.0
guzzlehttp/guzzle Version ^7.9
pragmarx/countries Version ^1.0