Delivers current exchange rates for EUR provided by the ECB under https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml as PHP objects.
composer require steffenbrand/curr-curr
try {
$cc = new CurrCurr();
$exchangeRate = $cc->getExchangeRateByCurrency(Currency::USD);
$exchangeRate->getDate();
$exchangeRate->getCurrency();
$exchangeRate->getRate();
} catch (ExchangeRatesRequestFailedException $e) {
// webservice might not be present
} catch (ExchangeRatesMappingFailedException $e) {
// webservice might not deliver what we expect
} catch (CurrencyNotSupportedException $e) {
// requested currency might not be provided
}
try {
$cc = new CurrCurr();
$exchangeRates = $cc->getExchangeRates();
$exchangeRates[Currency::USD]->getDate();
$exchangeRates[Currency::USD]->getCurrency();
$exchangeRates[Currency::USD]->getRate();
foreach ($exchangeRates as $exchangeRate) {
$exchangeRate->getDate();
$exchangeRate->getCurrency();
$exchangeRate->getRate();
}
} catch (ExchangeRatesRequestFailedException $e) {
// webservice might not be present
} catch (ExchangeRatesMappingFailedException $e) {
// webservice might not deliver what we expect
}
CurrCurr does not provide its own SimpleCache implementation, however it does give you the possibility to inject any PSR-16 compliant implementation into the EcbClient. You just have to wrap it with a CacheConfig instance.
$cc = new CurrCurr(
new EcbClient(
EcbClient::DEFAULT_EXCHANGE_RATES_URL,
new CacheConfig(
new OpCache(sys_get_temp_dir() . '/cache')
// Any PSR-16 compliant implementation
// This example uses odan/cache
)
)
);
You can provide your own key and time to live.
new CacheConfig(
new OpCache(sys_get_temp_dir() . '/cache')
CacheConfig::CACHE_UNTIL_MIDNIGHT, // time to live in seconds
CacheConfig::DEFAULT_CACHE_KEY // key used for caching
);
CurrCurr allows you to inject your own implementation of the EcbClientInterface. But you can also use the provided EcbClientMock, which allows you to simulate 3 different responses.
$cc1 = new CurrCurr(new EcbClientMock(EcbClientMock::VALID_RESPONSE));
$cc2 = new CurrCurr(new EcbClientMock(EcbClientMock::USD_MISSING_RESPONSE));
$cc3 = new CurrCurr(new EcbClientMock(EcbClientMock::DATE_MISSING_RESPONSE));