florianv/swap
PHP currency conversion library for retrieving exchange rates from 30 providers, with caching and fallback. Maintained since 2014.
💥 Breaking Changes
- Minimum PHP version raised to 8.2 (was 7.4/8.0)
- Minimum PHPUnit version raised to 11.0 (was 9.x/10.x)
📦 Improvements
- Added `suggest` section to composer.json for PSR-18 client and PSR-17 factory implementations, guiding users toward compatible HTTP dependencies
- Improved discovery test — Now verifies discovery works end-to-end by creating a service via `Factory`
📦 Infrastructure & Tooling
- Modernized CI pipeline — Replaced Travis CI with GitHub Actions; test matrix covers PHP 8.2, 8.3, 8.4, and 8.5
- Added Psalm static analysis (level 1) with dedicated CI workflow and baseline
- Added backward compatibility check workflow
- Migrated all tests to PHPUnit 11 attributes — Replaced `@test` and `@dataProvider` annotations
- Added composer scripts — `test`, `psalm`, `cs:fix`, `cs:check`
- Removed legacy CI configs — `.scrutinizer.yml`, `.styleci.yml`, `.travis.yml`
- Updated README badges — Travis badge replaced with GitHub Actions Tests and Psalm badges
- Full Changelog: https://github.com/florianv/swap/compare/4.4.0...4.5.0
🐛 Bug Fixes
- PHP 8.4 compatibility: Use explicit nullable types (?Type) instead of implicit nullable parameters, fixing deprecation notices on PHP 8.4 (Swap.php, Factory.php) #144, #147
- Replace deprecated `HttpClientDiscovery`: Use `Psr18ClientDiscovery` instead of the deprecated `HttpClientDiscovery` in Factory.php #142
📦 Maintenance
- New runtime dependencies: Added symfony/http-client and php-http/message-factory to require
- New suggestion: php-http/discovery added to suggest for auto-discovery of HttpClient
- Documentation: Multiple README and docs updates
- Full Changelog: https://github.com/florianv/swap/compare/4.3.0...4.4.0
📋 Changes
- PHP 8 and PHPUnit 9 support
xChangeApi.com support
Added way to add services by instance
Making Swap not final to allow mocking
See CHANGELOG to get more informations about the changes in this new version
📋 Changes
- Added CurrencyConverterApi service
📋 Changes
- Fixed Fixer service which now requires an access_key
📋 Changes
- Added Forge service
- Added CurrencyDataFeed service
- Supported historical rates in National Bank Of Romania
Fixed now invalid Google service url
Support crypto currencies via Cryptonator
New Russian Central Bank service
Update exchanger to include this bug fix https://github.com/florianv/exchanger/pull/5
Update Exchanger to version 0.2.0
📋 Changes
- ability to retrieve historical rates
- new provider (fixer.io)
- architecture refactoring based on https://github.com/florianv/exchanger
http-adapter 1.0
Implemented Illuminate cache
Fixed the way to retrieve body content
📋 Changes
- PHP 5.4 is the minimum version
- Used https://github.com/egeloen/ivory-http-adapter as HttpAdapter
- Added ability to cache rates
- Added the NationalBankOfRomania provider
📋 Changes
- Added a factory method CurrencyPair::createFromString
- Simplified the retrieval of a rate
📋 Changes
- Added an adapter layer to support different HTTP clients
- Moved all tests to PHPUnit
