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?
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;
}
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;
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); }
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');
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;
}
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);
}
/**
* 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
);
}
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
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.
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);
}
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"));
?>
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");
Holen Sie sich zuerst eine kostenlose API von dieser Website:
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;
}
echo convertCurrency($API, 1, 'USD', 'EGP');
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