PHP 取得當前匯率

這邊使用網路上的公開資訊查詢,有需要可以直接使用

查詢國家 https://restcountries.com

查詢匯率 https://open.er-api.com


function getExchangeRateFree($input, $target = 'TWD') {
    $debug = "";
    $keywordMap = [
        // 美元
    '美元' => 'USD', '美金' => 'USD', '美國' => 'USD',
    // 日圓
    '日圓' => 'JPY', '日幣' => 'JPY', '日本' => 'JPY',
    // 台幣
    '台幣' => 'TWD', '新台幣' => 'TWD', '台灣' => 'TWD',
    // 歐元
    '歐元' => 'EUR', '歐洲' => 'EUR',
    // 人民幣
    '人民幣' => 'CNY', '中國' => 'CNY', 'RMB' => 'CNY',
    // 英鎊
    '英鎊' => 'GBP', '英國' => 'GBP', 'UK' => 'GBP',
    // 澳幣
    '澳幣' => 'AUD', '澳洲' => 'AUD', '澳大利亞' => 'AUD',
    // 港幣
    '港幣' => 'HKD', '香港' => 'HKD', 'HK' => 'HKD',
    // 新加坡幣
    '新幣' => 'SGD', '新加坡' => 'SGD', 'Singapore' => 'SGD',
    // 韓元
    '韓元' => 'KRW', '韓國' => 'KRW', '南韓' => 'KRW',
    // 泰銖
    '泰銖' => 'THB', '泰國' => 'THB',
    // 加幣
    '加幣' => 'CAD', '加拿大' => 'CAD', 'CA' => 'CAD',
    // 瑞士法郎
    '瑞士法郎' => 'CHF', '瑞士' => 'CHF',
    // 紐元
    '紐幣' => 'NZD', '紐西蘭' => 'NZD',
    // 馬來幣
    '馬幣' => 'MYR', '馬來西亞' => 'MYR',
    ];

    $input = trim($input);
    $currencyCode = null;

    // Step 0: 如果輸入是三個英文字母,直接當作幣別
    if (preg_match('/^[A-Z]{3}$/i', $input)) {
        $currencyCode = strtoupper($input);
    }

    // Step 1: 先查 keywordMap
    if (!$currencyCode) {
        foreach ($keywordMap as $kw => $code) {
            if (mb_stripos($input, $kw) !== false) {
                $currencyCode = $code;
                break;
            }
        }
    }

    // Step 2: 如果還沒找到,查國家對應幣別
    if (!$currencyCode) { 
        if($inputCountry_code != null){
            $input = $inputCountry_code;
        }

        $apiUrl = "https://restcountries.com/v3.1/alpha/" . urlencode($input);
        $json = @file_get_contents($apiUrl);
        if ($json) {
            $data = json_decode($json, true);
            if (!empty($data[0]['currencies'])) {
                $currencyCode = array_keys($data[0]['currencies'])[0];
            }
        }
    }

    // Step 3: 如果還是沒找到,直接用輸入的值
    if (!$currencyCode) {
        $currencyCode = strtoupper($input);
    }

    // Step 4: 查匯率
    $url = "https://open.er-api.com/v6/latest/".$target;
    $json = @file_get_contents($url);
    if (!$json) return "⚠️ 匯率伺服器無回應";
    $data = json_decode($json, true);

    if (!isset($data['rates'][$currencyCode])) {
        return "⚠️ 找不到 {$currencyCode} 對 {$target} 匯率";
    }

    $rate = round((1/$data['rates'][$currencyCode]), 4);

    $timestamp = strtotime($data['time_last_update_utc']);
    $date = date('Y-m-d', $timestamp);

    return $debug."💱 {$currencyCode} 對 {$target} 匯率:{$rate}\n📅 更新日期:{$date}";
}

發佈留言