2010-07-19 14 views
18

Sto cercando un modo per convertire qualsiasi importo da una valuta a un'altra in un sito web. L'utente immette qualcosa come "100" e seleziona USD come valuta, quindi sceglie dollari australiani o canadesi come valuta da convertire. Quando fa clic sul pulsante "Converti", vorrei convertire tale importo automaticamente, tramite alcune API, e mostrargli l'importo nella valuta che ha scelto di convertire.Conversione di valuta con PHP

Qualche idea?

+2

Questa non è una sfida banale, perché la valuta fluttua. Prova qualcosa del genere: http://www.kksou.com/php-gtk2/Joomla-Gadgets/Google-Currency-Converter-AJAX-version.php – bpeterson76

+2

Puoi ottenere i tassi di cambio giornalieri in EURO da ['http: //www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml'](http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml) –

+0

Prova http://thecurrencygraph.com L'ho usato sul mio ultimo sito. Ha un sacco di funzioni incluse le opzioni di geolocalizzazione. W. – wilsonpage

risposta

3

Mi piace la prima soluzione ma sembra esserci un GRANDE problema con esso. Ho provato a implementarlo in un gateway di pagamento, ma ho continuato a ottenere un risultato di 1. Questo mi ha perplesso e alla fine ho scoperto che è perché c'è uno spazio utilizzato da Google per le migliaia di sparator. Quindi l'importo di 1 500,00 è stato restituito come uno poiché il resto è stato esploso. Ho creato una soluzione rapida e sporca per questo. Fammi sapere se qualcun altro ha riscontrato questo problema. Qui è la mia soluzione:

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); } 
+0

iGoogle è stato ritirato il 1 ° novembre 2013. Questa API non funziona più. – reformed

7

Un esempio di conversione di EUR a 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; 
      } 
+0

Questo è decisamente più pulito e una soluzione più robusta rispetto agli altri citati qui. – Doggie52

+0

Grazie, questo funziona davvero bene – Dewan159

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 
    ); 
} 
+0

iGoogle è stato ritirato il 1 ° novembre 2013. Questa API non funziona più. – reformed

7

Questo metodo utilizza Yahoo valuta API esercitazione completa: Currency Converter in PHP, Python, Javascript and 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; 
2

Questo è quello che sto usando:

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

Ho utilizzato il seguente PHP per estrarre i dati dalla BCE come suggerito da Stefan Gehrig.

<?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; } 
?> 

scrive un file JSON che includo come una variabile JavaScript:

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

Posso quindi facile afferrare i dati utilizzando il codice di valuta 3 lettere (ad esempio, data['GBP']) con JavaScript quando viene richiesto un cambio di valuta.

Uso un processo Cron per aggiornare il JSON una volta al giorno, quindi non effettua una chiamata ogni volta che la pagina viene visitata.

0

Questo è così semplice se si utilizza un server locale come WAMP o XAMPP o un altro server allora si dovrebbe avere per consentire l'estensione di OpenSSL prima in php.ini

extension=php_openssl.dll `allow_url_fopen = On` 

allora si sarà in grado di eseguire il mio codice altro che runing il tuo sito web con hosting online, allora non avete bisogno di fare questo in modo si deve aggiungere questa funzione php nello script php

<?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 
1

uso questa semplice funzione:

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); 
} 
+0

Nel 2017 e oltre non incoraggio l'uso di questa funzione poiché aggiunge un enorme tempo di caricamento della pagina. Soprattutto se si convertono più numeri, poiché questa non è un'API, scarica l'intera pagina Web e estrae solo l'HTML per i valori che si stanno cercando. Date invece un'occhiata alla mia risposta usando l'API 'fixer.io'. – AlexioVay

1

mio 2017 soluzione è una funzione molto leggero che ottiene le informazioni di cambio correnti dal fixer.io API.Inoltre memorizza il tasso di cambio in un cookie giornaliero per evitare ulteriori pesanti tempi di caricamento del web. È inoltre possibile scegliere sessioni per quella o rimuoverlo: utilizzo

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

Esempio per convertire 100 euro al chilo:

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

0

Puoi anche controllare: http://free.currencyconverterapi.com

di responsabilità, I' m l'autore di questo sito.

Un URL di conversione di esempio è: http://free.currencyconverterapi.com/api/v3/convert?q=PHP_EUR,EUR_PHP&compact=ultra che restituirà un valore in formato json, ad es. {"PHP_EUR": 0.016434, "EUR_PHP": 60.849184}

È necessario tenere conto delle limitazioni, ad esempio richieste e richieste massime (i dettagli hanno trovato il sito Web). Ho implementato i limiti perché ci sono stati abusatori del servizio.

Ho iniziato questo dal 2014 ed è stato attivo da allora (a parte il cambio di collegamento e le interruzioni di manutenzione lungo la strada). Io personalmente lo uso per i miei altri siti web e ho fornito il servizio pubblicamente in modo che possa aiutare anche altri sviluppatori.

speranza Comunque questo aiuta, e qui c'è un esempio di codice PHP:

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

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

echo(convertCurrency(5, "USD", "PHP")); 
?> 
Problemi correlati