Laravel Currency

amrshawky/laravel-currency image

Laravel Currency stats

Downloads
296.4K
Stars
327
Open Issues
6
Forks
38

View on GitHub →

A Laravel package for current and historical currency exchange rates & crypto exchange rates based on the free API provided by exchangerate.host

Laravel Currency

Update: exchangerate.host now requires API key, a new version will be released soon to support API keys

Laravel currency is a simple package for current and historical currency exchange rates & crypto exchange rates. based on the free API exchangerate.host - no API keys needed!

Note: This package is an integration for the Currency library

Requirements

  • PHP >= 7.2
  • Laravel >= 6.0
  • guzzlehttp >= 6.0

Installation

composer require amrshawky/laravel-currency

Usage

1. Currency Conversion

To convert from one currency to another you may chain the methods:

use AmrShawky\LaravelCurrency\Facade\Currency;
 
Currency::convert()
->from('USD')
->to('EUR')
->get();

This will return the converted amount or null on failure.

The amount to be converted is default to 1, you may specify the amount:

use AmrShawky\LaravelCurrency\Facade\Currency;
 
Currency::convert()
->from('USD')
->to('EUR')
->amount(50)
->get();

Available Methods

  • Convert currency using historical exchange rates YYYY-MM-DD:
use AmrShawky\LaravelCurrency\Facade\Currency;
 
Currency::convert()
->from('USD')
->to('EUR')
->date('2019-08-01')
->get();
  • Round the converted amount to decimal places:
use AmrShawky\LaravelCurrency\Facade\Currency;
 
Currency::convert()
->from('USD')
->to('EUR')
->round(2)
->get();
  • You may also switch data source between forex default, bank view or crypto currencies:
use AmrShawky\LaravelCurrency\Facade\Currency;
 
Currency::convert()
->from('BTC')
->to('ETH')
->source('crypto')
->get();

2. Latest Rates

To get latest rates you may chain the methods:

use AmrShawky\LaravelCurrency\Facade\Currency;
 
Currency::rates()
->latest()
->get();
 
// ['USD' => 1.215707, ...]
 
Currency::rates()
->latest()
->source('crypto')
->get();
 
// ['ETH' => 3398.61, ...]

This will return an array of all available currencies or null on failure.

Available Methods

  • Just like currency conversion you may chain any of the available methods:
use AmrShawky\LaravelCurrency\Facade\Currency;
 
Currency::rates()
->latest()
->symbols(['USD', 'EUR', 'EGP']) //An array of currency codes to limit output currencies
->base('GBP') //Changing base currency (default: EUR). Enter the three-letter currency code of your preferred base currency.
->amount(5.66) //Specify the amount to be converted
->round(2) //Round numbers to decimal places
->source('ecb') //Switch data source between forex `default`, bank view or crypto currencies.
->get();

3. Historical Rates

Historical rates are available for most currencies all the way back to the year of 1999.

use AmrShawky\LaravelCurrency\Facade\Currency;
 
Currency::rates()
->historical('2020-01-01') //`YYYY-MM-DD` Required date parameter to get the rates for
->get();
 
// ['USD' => 1.1185, ...]
 
Currency::rates()
->historical('2021-03-30')
->source('crypto')
->get();
 
// ['BTC' => 2.0E-5, ...]

Same as latest rates you may chain any of the available methods:

use AmrShawky\LaravelCurrency\Facade\Currency;
 
Currency::rates()
->historical('2020-01-01')
->symbols(['USD', 'EUR', 'CZK'])
->base('GBP')
->amount(5.66)
->round(2)
->source('ecb')
->get();

4. Timeseries Rates

Timeseries are for daily historical rates between two dates of your choice, with a maximum time frame of 365 days. This will return an array or null on failure.

use AmrShawky\LaravelCurrency\Facade\Currency;
 
Currency::rates()
->timeSeries('2021-05-01', '2021-05-02') //`YYYY-MM-DD` Required dates range parameters
->symbols(['USD']) //[optional] An array of currency codes to limit output currencies
->base('GBP') //[optional] Changing base currency (default: EUR). Enter the three-letter currency code of your preferred base currency.
->amount(5.66) //[optional] Specify the amount to be converted (default: 1)
->round(2) //[optional] Round numbers to decimal places
->source('ecb') //[optional] Switch data source between forex `default`, bank view or crypto currencies.
->get();
 
/**
[
'2021-05-01' => [
"USD" => 1.201995
],
'2021-05-02' => [
"USD" => 1.2027
]
]
*/

5. Fluctuations

Retrieve information about how currencies fluctuate on a day-to-day basis, with a maximum time frame of 365 days. This will return an array or null on failure.

use AmrShawky\LaravelCurrency\Facade\Currency;
 
Currency::rates()
->fluctuations('2021-03-29', '2021-04-15') //`YYYY-MM-DD` Required dates range parameters
->symbols(['USD']) //[optional] An array of currency codes to limit output currencies
->base('GBP') //[optional] Changing base currency (default: EUR). Enter the three-letter currency code of your preferred base currency.
->amount(5.66) //[optional] Specify the amount to be converted (default: 1)
->round(2) //[optional] Round numbers to decimal places
->source('ecb') //[optional] Switch data source between forex `default`, bank view or crypto currencies.
->get();
 
/**
[
'USD' => [
"start_rate" => 1.376454,
"end_rate" => 1.37816,
"change" => -0.001706,
"change_pct" => -0.001239
]
]
*/

Throwing Exceptions

The default behavior is to return null for errors that occur during the request (connection timeout, DNS errors, client or server error status code, missing API success parameter, etc.).

If you would like to throw an exception instead, you may use the throw method, The throw method returns the currency instance, allowing you to chain other methods:

use AmrShawky\LaravelCurrency\Facade\Currency;
 
Currency::convert()
->from('USD')
->to('EUR')
->amount(20)
->throw()
->get();

If you would like to perform some additional logic before the exception is thrown, you may pass a closure to the throw method:

use AmrShawky\LaravelCurrency\Facade\Currency;
 
Currency::convert()
->from('USD')
->to('EUR')
->amount(20)
->throw(function ($response, $e) {
//
})
->get();

Other Methods

  • You may use the withoutVerifying method to indicate that TLS certificates should not be verified when sending the request:
use AmrShawky\LaravelCurrency\Facade\Currency;
 
Currency::convert()
->from('USD')
->to('EUR')
->withoutVerifying()
->get();
  • You may specify additional Guzzle request options using the withOptions method. The withOptions method accepts an array of key / value pairs:
use AmrShawky\LaravelCurrency\Facade\Currency;
 
Currency::rates()
->historical('2021-04-30')
->withOptions([
'debug' => true,
'timeout' => 3.0
])
->get();
  • The when method will execute the given callback when the first argument given to the method evaluates to true:
use AmrShawky\LaravelCurrency\Facade\Currency;
 
Currency::rates()
->latest()
->when(true, function ($rates) {
// will execute
$rates->symbols(['USD', 'EUR', 'EGP'])
->base('GBP');
})
->when(false, function ($rates) {
// won't execute
$rates->symbols(['HKD']);
})
->get();

Testing

Currency uses Laravel facades which makes it easy to mock so it's not actually executed during the test:

use AmrShawky\LaravelCurrency\Facade\Currency;
 
Currency::shouldReceive('convert')
->once()
->andReturn(1.50);
 
 
Currency::shouldReceive('rates')
->once()
->andReturn(['EUR' => 1,'USD' => 1.215707]);

More information regarding list of bank sources here

For a list of all supported symbols here and list of crypto currencies here

License

The MIT License (MIT). Please see LICENSE for more information.

amrshawky photo

PHP Developer

Cube

Laravel Newsletter

Join 40k+ other developers and never miss out on new tips, tutorials, and more.


Amrshawky Laravel Currency Related Articles

Laravel MPP: Charge AI Agents for API Access with 402 Payment Required image

Laravel MPP: Charge AI Agents for API Access with 402 Payment Required

Read article
Aegis for Laravel: Scaffolding and Validation Helpers for Value Objects image

Aegis for Laravel: Scaffolding and Validation Helpers for Value Objects

Read article
Laravel Shopper: A Headless E-Commerce Admin Panel for Laravel image

Laravel Shopper: A Headless E-Commerce Admin Panel for Laravel

Read article
AI Generative Engine Optimization for Laravel image

AI Generative Engine Optimization for Laravel

Read article
Passage: A Lightweight API Proxy Gateway for Laravel image

Passage: A Lightweight API Proxy Gateway for Laravel

Read article
Fuse for Laravel: A Circuit Breaker Package for Queue Jobs image

Fuse for Laravel: A Circuit Breaker Package for Queue Jobs

Read article
The Certification of Competence for Laravel logo

The Certification of Competence for Laravel

A community-driven, proctored assessment across 4 levels designed to validate real-world Laravel knowledge, from Junior to mastery-level Artisan. Official Vue.js, Official Nuxt, Angular, React, JS certifications also available.

The Certification of Competence for Laravel
Celebian logo

Celebian

Celebian is a social media marketing agency specializing in helping their clients go viral on TikTok. Whether you're looking to reach a bigger audience or gain more Tiktok followers, likes, and views, they've got you covered.

Celebian
Tinkerwell logo

Tinkerwell

The must-have code runner for Laravel developers. Tinker with AI, autocompletion and instant feedback on local and production environments.

Tinkerwell
Acquaint Softtech logo

Acquaint Softtech

Acquaint Softtech offers AI-ready Laravel developers who onboard in 48 hours at $3000/Month with no lengthy sales process and a 100 percent money-back guarantee.

Acquaint Softtech
Statamic logo

Statamic

The drop-in ready Laravel CMS you’re been waiting for. Go full-stack or headless, flat file or database – it’s up to you.

Statamic
Laravel Cloud logo

Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Laravel Cloud