Tutorial/PHP 與 Laravel

在 PHP 與 Laravel 使用匯率

以 Laravel HTTP 客戶端、bearer 認證、有限逾時和新鮮度欄位取得並快取即時匯率。

MMexchangerate.dev·Jul 17, 2026·6 分鐘閱讀

小型 Laravel 服務可呼叫 exchangerate.dev、拒絕錯誤回應,並快取完整匯率觀測 60 秒。密鑰放在設定中,與匯率一同回傳 sourcemarket_sessiondata_updated_at

Key points
使用 Laravel HTTP 客戶端的 bearer 認證、逾時與 throw()
快取完整成功回應 60 秒。
透過 EXCHANGERATE_API_KEY 載入密鑰。
精確金額運算應使用十進制程式庫。

建立有快取的匯率服務

服務以基礎貨幣和排序後的代碼建立穩定快取鍵。throw() 會在 Laravel 寫入快取之前執行,因此錯誤不會成為匯率資料。

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();
        });
    }
}

在原始碼之外設定密鑰

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_...

讀取匯率及觀測欄位

呼叫 $service->latest("USD", ["EUR", "GBP"]),再讀取 $result["rates"]["EUR"]。同時保留 $result["source"]$result["market_session"]$result["data_updated_at"]

不要把錯誤快取成匯率
401 表示密鑰或標頭錯誤,429 表示超出請求限制。讓請求失敗,舊觀測只可連同原本更新時間保留。
  • 建立快取鍵前先排序貨幣代碼。
  • 設定有限 HTTP 逾時。
  • 讀取並快取 JSON 前呼叫 throw。
  • 只四捨五入最終金額,不處理 API 匯率。
MM
exchangerate.dev
為使用外匯數據的開發者而設的整合指南。

Keep reading

Guide一次取得歷史外匯時間序列Read Reference閱讀 source 與 market_sessionRead Guide指示性匯率與可執行匯率Read