Tutorial/PHP y Laravel

Tipos de cambio en PHP y Laravel

Consulta y almacena tipos en Laravel con su cliente HTTP, autenticación bearer, tiempos límite y metadatos de frescura.

MMexchangerate.dev·Jul 17, 2026·6 min de lectura

Un pequeño servicio Laravel puede llamar a exchangerate.dev, rechazar errores HTTP y guardar una observación completa durante 60 segundos. Mantén la clave en configuración y devuelve source, market_session y data_updated_at.

Key points
Usa el cliente HTTP con bearer, timeout y throw().
Almacena la respuesta correcta completa durante 60 segundos.
Carga la clave mediante EXCHANGERATE_API_KEY.
Usa una biblioteca decimal cuando necesites aritmética exacta.

Crea un servicio FX con caché

El servicio forma una clave estable con la base y los símbolos. throw() se ejecuta antes de que Laravel escriba una respuesta fallida en caché.

php · app/Services/ExchangeRateService.phpcopy
<?php

namespace App\Services;

use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Http;

final class ExchangeRateService
{
    public function latest(string $base, array $symbols): array
    {
        sort($symbols);
        $symbolList = implode(',', $symbols);
        $cacheKey = "fx:latest:{$base}:{$symbolList}";

        return Cache::remember($cacheKey, now()->addSeconds(60), function () use (
            $base,
            $symbolList,
        ): array {
            return Http::acceptJson()
                ->withToken(config('services.exchangerate.key'))
                ->timeout(5)
                ->get(
                    "https://api.exchangerate.dev/v1/latest/{$base}",
                    ['symbols' => $symbolList],
                )
                ->throw()
                ->json();
        });
    }
}

Configura la clave fuera del código

php · config/services.php and .envcopy
// config/services.php
'exchangerate' => [
    'key' => env('EXCHANGERATE_API_KEY'),
],

// .env (never commit the real value)
EXCHANGERATE_API_KEY=exr_live_...

Lee el tipo y sus campos de observación

Llama a $service->latest("USD", ["EUR", "GBP"]) y lee $result["rates"]["EUR"]. Conserva $result["source"], $result["market_session"] y $result["data_updated_at"].

No almacenes errores como tipos
Un 401 indica una clave o cabecera incorrecta. Un 429 indica exceso de solicitudes. Deja que fallen y conserva cualquier observación anterior solo con su hora original.
  • Ordena los símbolos antes de formar la clave.
  • Define un timeout.
  • Ejecuta throw antes de guardar JSON.
  • Redondea el monto final, no el tipo.
MM
exchangerate.dev
Guías de integración para desarrolladores que trabajan con datos FX.

Keep reading

GuideSeries históricas FX en una llamadaRead ReferenceCómo leer source y market_sessionRead GuideTipos FX indicativos y ejecutablesRead