ongr/currency-exchange-bundle
Symfony bundle for currency exchange rates and conversion, offering configurable rate providers, storage, and service-based APIs to fetch and apply exchange rates in PHP applications. Integrates with ONGR/Elasticsearch for managing currency data.
Decisions it does not support well: real-time or intraday pricing, rate locking with SLAs, crypto or exotic pairs, audit-grade historical rate reconciliation, or anything requiring a maintained security posture. The v2.0.6 hotfix (saving currencies with past date, #70) reinforces the last point: writing historical rates correctly was broken until this patch, which is precisely the operation a refund/reconciliation workflow depends on.
Only in a narrow legacy context:
Look elsewhere when:
Recommended substitutes: a maintained provider client (ECB reference feed, exchangerate.host, OpenExchangeRates, Fixer) behind a thin internal ExchangeRateService interface, plus your own cached rate table with an explicit effective_date column. That is roughly a one-to-two-day engineering effort and removes the dependency risk entirely.
To executives: Currency conversion is a commodity capability — it is not where we differentiate, but it is a gate on entering new markets. The high opportunity score attached to this package reflects the value of the problem space, not the quality of the code. A new patch (v2.0.6) appeared after a long dormancy, but it is a single hotfix for saving currencies with past dates — no new capability, no platform modernization, still negligible adoption. Recommendation stands: do not adopt; fund a small, owned adapter over a commercial or central-bank rate feed. Cost is measured in days, not sprints, and it eliminates a long-term maintenance and security liability.
To engineering: The v2.0.6 change is a one-line-class fix to the dated-currency persistence path (#70). It is not a reason to reconsider the dependency: the project is still a Symfony bundle (not Laravel), still on a 2016-era 2.x line, and the patch carries no PHP 8, framework, or dependency upgrades. Treat it as a design reference only: borrow the provider-interface and conversion-service shape, note that it models effective-dated currencies, then implement against a current SDK with caching, a persisted rate table keyed by date, and explicit rate-lock semantics at order time. Estimated effort: 1–2 engineer-days for parity, plus a short design note on refund/historical-rate policy. The fact that historical-date saving needed a hotfix is a useful argument for owning our own effective_date handling with tests.
To finance and legal: We will own the rate source, its timestamp, and the audit trail — which is what we want, because "which rate did we use and when" is a question this package cannot answer to an auditor's satisfaction. The latest release is a bug fix for recording past-dated currencies, which is exactly the operation our refund and reconciliation reporting depends on; we should not build an audit narrative on top of a codebase whose historical path is only now receiving corrections.
How can I help you explore Laravel packages today?