wake-up-neo.net

Währungsumrechnung mit PHP

Ich suche nach einer Möglichkeit, einen beliebigen Betrag von einer Währung in eine andere auf einer Website umzuwandeln. Der Benutzer gibt etwas wie "100" ein und wählt USD als Währung aus. Dann wählt er australische oder kanadische Dollar als Währung, in die umgerechnet werden soll. Wenn er auf die Schaltfläche "Konvertieren" klickt, möchte ich diesen Betrag automatisch über eine API konvertieren und ihm den Betrag in der Währung anzeigen, in die er konvertiert hat.

Irgendwelche Ideen?

18
Click Upvote

Ein Beispiel für die Umrechnung von EUR in USD

$url = 'http://www.webservicex.net/CurrencyConvertor.asmx/ConversionRate?FromCurrency=EUR&ToCurrency=USD';
            $xml = simpleXML_load_file($url,"SimpleXMLElement",LIBXML_NOCDATA);
            if($xml ===  FALSE)
            {
               //deal with error
            }
            else { 

                $rate = $xml;
            }
7
TGuimond

Diese Methode verwendet die Yahoo-Währungs-API. Vollständiges Tutorial: Währungsumrechner in PHP, Python, Javascript und jQuery

function currencyConverter($currency_from,$currency_to,$currency_input){
$yql_base_url = "http://query.yahooapis.com/v1/public/yql";
$yql_query = 'select * from yahoo.finance.xchange where pair in ("'.$currency_from.$currency_to.'")';
$yql_query_url = $yql_base_url . "?q=" . urlencode($yql_query);
$yql_query_url .= "&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";
$yql_session = curl_init($yql_query_url);
curl_setopt($yql_session, CURLOPT_RETURNTRANSFER,true);
$yqlexec = curl_exec($yql_session);
$yql_json =  json_decode($yqlexec,true);
$currency_output = (float) $currency_input*$yql_json['query']['results']['rate']['Rate'];

return $currency_output;
}

$currency_input = 2;
//currency codes : http://en.wikipedia.org/wiki/ISO_4217
$currency_from = "USD";
$currency_to = "INR";
$currency = currencyConverter($currency_from,$currency_to,$currency_input);

 echo $currency_input.' '.$currency_from.' = '.$currency.' '.$currency_to;
7
Max

Ich mag die erste Lösung, aber es scheint ein großes Problem mit ihr zu geben. Ich habe versucht, sie in ein Zahlungsgateway zu implementieren, aber ich erhielt immer wieder das Ergebnis von 1. Schließlich fand man heraus, dass es einen Platz gibt, den Google für den Tausendsparator verwendet. Somit wurde der Betrag von 1 500,00 als Einheit zurückgegeben, da der Rest explodiert war. Ich habe eine schnelle und schmutzige Lösung für das Problem erstellt. Lassen Sie mich wissen, wenn jemand anderes dieses Problem erfahren hat. Hier ist meine Lösung:

function currency($from_Currency,$to_Currency,$amount) {
  $amount = urlencode($amount);
  $from_Currency = urlencode($from_Currency);
  $to_Currency = urlencode($to_Currency);
  $url = "http://www.google.com/ig/calculator?hl=en&q=$amount$from_Currency=?$to_Currency";
  $ch = curl_init();
  $timeout = 0;
  curl_setopt ($ch, CURLOPT_URL, $url);
  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch,  CURLOPT_USERAGENT , "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
  curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  $rawdata = curl_exec($ch);
  curl_close($ch);
  $data = explode('"', $rawdata);
  $data = explode('.', $data['3']);
  $data[0] = str_replace(" ", "",preg_replace('/\D/', '',  $data[0]));
  if(isset($data[1])){
    $data[1] = str_replace(" ", "",preg_replace('/\D/', '', $data[1]));
    $var = $data[0].".".$data[1];        
  } else{
    $var = $data[0];
  }
  return round($var,2); }
3
user481996

Meine 2017-Lösung ist eine sehr leichte Funktion, die die aktuellen Austauschinformationen von der fixer.io-API abruft. Außerdem wird der Wechselkurs in einem täglichen Cookie gespeichert, um weitere schwere Ladezeiten zu vermeiden. Sie können auch Sitzungen dafür auswählen oder entfernen:

function convertCurrency($amount, $from = 'EUR', $to = 'USD'){
    if (empty($_COOKIE['exchange_rate'])) {
        $Cookie = new Cookie($_COOKIE);
        $curl = file_get_contents_curl('http://api.fixer.io/latest?symbols='.$from.','.$to.'');
        $rate = $curl['rates'][$to];
        $Cookie->exchange_rate = $rate;
    } else {
        $rate = $_COOKIE['exchange_rate'];
    }
    $output = round($amount * $rate);

    return $output;
}

Beispiel für die Umrechnung von 100 Euro in Pfund:

echo convertCurrency(100, 'EUR', 'GBP');

2
AlexioVay

Verwenden Sie den angegebenen Code für den Währungsumrechner PHP

public function convertCurrency($from, $to, $amount)    
{
    $url = file_get_contents('https://free.currencyconverterapi.com/api/v5/convert?q=' . $from . '_' . $to . '&compact=ultra');
    $json = json_decode($url, true);
    $rate = implode(" ",$json);
    $total = $rate * $amount;
    $rounded = round($total);
    return $total;
}
2
Ankit Gandhi

Das verwende ich:

function exchangeRate( $amount, $from, $to)
{
    switch ($from) {
        case "euro":
            $from_Currency = "EUR";
            break;
        case "dollar":
            $from_Currency = "USD";
            break;
        case "pounds":
            $from_Currency = "GBP";
            break;
    }

    switch ($to) {
        case "euro":
            $to_Currency = "EUR";
            break;
        case "dollar":
            $to_Currency = "USD";
            break;
        case "pound":
            $to_Currency = "GBP";
            break;
    }

  $amount = urlencode($amount);

  $from_Currency = urlencode($from_Currency);
  $to_Currency = urlencode($to_Currency);
  $get = file_get_contents("https://www.google.com/finance/converter?a=$amount&from=" . $from_Currency . "&to=" . $to_Currency);

  $get = explode("<span class=bld>",$get);
  $get = explode("</span>",$get[1]);
  $converted_amount = preg_replace("/[^0-9\.]/", null, $get[0]);
  return round($converted_amount, 2);
}
2
Web Developer
/**
 * Rechnet den gegebenen Betrag von einer Währung in eine andere um
 * @param FLOAT $value
 * @param STRING $fromCurrency=USD Ursprungswärung des Betrags
 * @param STRING $toCurrency=EUR Zielwärhung, in die umgerechnet wird
 * @param BOOL $round=true Wenn aktiviert, wird der errechnete Wert auf 2 Nachkommastellen kaufmännisch gerundet
 * @return ARRAY [timestamp][datetime_iso][datetime_de][value][from][to][result]
 */
function calcCurrency($value=0, $fromCurrency='USD', $toCurrency='EUR', $round=true) {
    $timestamp = time();
    $fromCurrency = preg_replace('[^A-Z]', '', strtoupper(trim($fromCurrency)));
    $toCurrency = preg_replace('[^A-Z]', '', strtoupper(trim($toCurrency)));
    $round = (bool) $round;

    $wrongJSON = file_get_contents("http://www.google.com/ig/calculator?hl=en&q=1$fromCurrency=?$toCurrency");
    $search = array('lhs', 'rhs', 'error', 'icc');
    $replace = array('"lhs"', '"rhs"', '"error"', '"icc"');
    $json = str_replace($search, $replace, $wrongJSON);
    $jsonData = json_decode($json, true);
    if ('' !== $jsonData['error']) throw new Exception('FEHLER: '.$jsonData['error']);
    $rhs = explode(' ', $jsonData['rhs'], 2);

    $calcValue = floatval(0.00);
    $value = floatval($value);
    $ratio = floatval($rhs[0]);

    // Gültigkeitsprüfungen
    if ($value < 0) throw new Exception('Umzurechnender Wert darf nicht negativ sein.');

    // Plausibilitätsprüfung der eingestellten Währung und Festlegung
    if ($toCurrency == $fromCurrency) {
        // Ursprungswährung = Zielwährung | Es erfolgt keine Berechnung
        $calcValue = $value;
        $ratio = 1;
    } else {
        $calcValue = floatval($value * $ratio);
    }

    // Array mit Rückgabewerten erzeugen und zurück geben
    return array(
        'timestamp' => $timestamp,
        'datetime_iso' => date('Y-m-d H:i:s', $timestamp),
        'datetime_de' => date('d.m.Y H:i:s', $timestamp),
        'value' => $value,
        'from' => $fromCurrency,
        'to' => $toCurrency,
        'ratio' => round($ratio, 6),
        'result' => (true===$round)
            ? round($calcValue, 2)
            : $calcValue
    );
}
2
gabberfun

Nachdem ich viel gesucht habe, habe ich das gefunden.

// Fetching JSON
$req_url = 'https://api.exchangerate-api.com/v4/latest/USD';
$response_json = file_get_contents($req_url);

// Continuing if we got a result
if(false !== $response_json) {

    // Try/catch for json_decode operation
    try {

    // Decoding
    $response_object = json_decode($response_json);

    // YOUR APPLICATION CODE HERE, e.g.
    $base_price = 12; // Your price in USD
    $EUR_price = round(($base_price * $response_object->rates->EUR), 2);

    }
    catch(Exception $e) {
        // Handle JSON parse error...
    }
}

Das funktioniert gut. Das Snippet stammt von: https://www.exchangerate-api.com/docs/php-currency-api

2
Amit Shukla

Ich habe das folgende PHP verwendet, um Daten aus der EZB zu ziehen, wie von Stefan Gehrig vorgeschlagen.

<?php
try {
    $xml_string = file_get_contents("https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");
    $xml = new SimpleXMLElement($xml_string);
    $cxml = $xml->xpath('//*[@currency]');
    //anchored to USD in this case
    $usx = $xml->xpath('//*[@currency="USD"]');
    $base = floatval(strval($usx[0]['rate']));
    //create a simple associative array with the 3-letter code
    //as the key and the rate as the value
    $c_arr = array();
    foreach ($cxml as $c) {
        $cur = strval($c['currency']);
        $rate = floatval(strval($c['rate']))/$base;
        $c_arr[$cur] = $rate;
    }
    //add the euro since it's assumed as the base rate for the ECB
    $c_arr['EUR'] = 1/$base;
    $currency_json = json_encode($c_arr);

    //write to file
    $file = "currency.json";
    $fh = fopen($file, 'w') or die("can't open file");
    fwrite($fh, $currency_json);
    fclose($fh);
    echo $currency_json;
} catch (Exception $e) { echo $e; }
?>

Es schreibt eine JSON-Datei, die ich als JavaScript-Variable einfüge:

<script type="text/javascript">
var data = <?php include('currency.json'); ?>;
</script>

Ich kann die Daten dann einfach mit dem 3-Buchstaben-Währungscode (z. B. data['GBP']) mit JavaScript abrufen, wenn eine Währungsänderung angefordert wird.

Ich verwende einen Cron-Job, um den JSON einmal am Tag zu aktualisieren, sodass er nicht bei jedem Besuch der Seite einen Anruf tätigt.

1
Justin Putney

verwenden Sie diese einfache Funktion:

function convertCurrency($amount, $from, $to){
    $url  = "https://www.google.com/finance/converter?a=$amount&from=$from&to=$to";
    $data = file_get_contents($url);
    preg_match("/<span class=bld>(.*)<\/span>/",$data, $converted);
    $converted = preg_replace("/[^0-9.]/", "", $converted[1]);
    return round($converted, 3);
}
1
technico

Sie können auch überprüfen: https://free.currencyconverterapi.com

Haftungsausschluss, ich bin der Autor dieser Website.

Eine Beispiel-Conversion-URL lautet: http://free.currencyconverterapi.com/api/v6/convert?q=PHP_EUR,EUR_PHP&compact=ultra&apiKey=sample-api-key , die einen Wert im Json-Format zurückgibt, z. {"PHP_EUR": 0.016434, "EUR_PHP": 60.849184}

Sie sollten jedoch die Einschränkungen beachten, z. B. maximale Anfragen und Abfragen (Details der Website). Ich habe Grenzwerte implementiert, weil der Dienst missbraucht wurde.

Ich habe dies seit 2014 begonnen und bin seitdem in Betrieb (abgesehen von den Verbindungswechsel- und Wartungsausfallzeiten). Ich persönlich nutze es für meine anderen Websites und stellte den Dienst öffentlich zur Verfügung, damit er auch anderen Entwicklern helfen kann.

Wie auch immer, hoffe das hilft, und hier ist ein Beispiel PHP Code:

<?php
function convertCurrency($amount, $from, $to){
  $conv_id = "{$from}_{$to}";
  $string = file_get_contents("https://free.currencyconverterapi.com/api/v6/convert?q=$conv_id&compact=ultra&apiKey=sample-api-key");
  $json_a = json_decode($string, true);

  return $amount * round($json_a[$conv_id], 4);
}

echo(convertCurrency(5, "USD", "PHP"));
?> 
0
Manny

Bitte überprüfen Sie das Währungsumrechnungsbeispiel.

    function oneUSDTo($amount, $toCurrency)
{
$currencyUrl = $amount."usd+to+$toCurrency";
$url = "https://www.google.com/search?q=".$currencyUrl;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);
$data = explode("$amount US Dollar = ",$result);
return (float) substr($data[1],0,10);
}

//Usage: oneUSDTo("type currency code here");
echo oneUSDTo("5","EUR");
0

Holen Sie sich zuerst eine kostenlose API von dieser Website:

fixer.io

Zweitens ersetzen Sie es hier:

<?php
$API = '3259bbede76b961c84a5244a0';
function convertCurrency($API, $amount, $from = 'EUR', $to = 'USD'){
$curl = file_get_contents("http://data.fixer.io/api/latest?access_key=$API&symbols=$from,$to");
$arr = json_decode($curl,true);

$from = $arr['rates'][$from];
$to = $arr['rates'][$to];

$rate = $to / $from;
$result = round($amount * $rate, 6);
return $result;
}

Dann verwenden Sie es auf diese Weise und genießen Sie es!

echo convertCurrency($API, 1, 'USD', 'EGP');
0
Behiry
https://fincharts.info/charts/exchange/?key=api_key&&from=USD&to=GBP,BWP,ZAR&amount=45854&date=2018-03-03&base=USD

ich glaube, Sie müssen sich für einen API-Schlüssel anmelden

Dies ist so einfach, wenn Sie einen lokalen Server wie wamp oder xampp oder einen anderen Server verwenden. In diesem Fall sollten Sie die Erweiterung von openssl zuerst in der php.ini aktivieren 

extension=php_openssl.dll `allow_url_fopen = On`

dann können Sie meinen Code ausführen, ansonsten laufen Sie Ihre Website mit Online-Hosting. Dann müssen Sie dies nicht tun, also müssen Sie diese PHP-Funktion in Ihr PHP-Skript einfügen

<?php
function currencyCnv( $amount, $from, $to){
$get = file_get_contents("https://www.google.com/finance/converter?a=$amount&from=" . $from. "&to=" . $to);
$get = explode("<span class=bld>",$get);
$get = explode("</span>",$get[1]);
$converted_amount = $get[0];
echo round($converted_amount,2);
}

  currencyCnv(100,'GBP','PKR');
//currencyCnv(you amount from form input filed ,currency from select box,currency to select box)
//any currency convert with this code 
0
Hammad Friend