web-dev-qa-db-fra.com

Conversion de devise en utilisant PHP

Je cherche un moyen de convertir n'importe quel montant d'une devise à une autre sur un site Web. L'utilisateur entre quelque chose comme "100" et sélectionne la devise US, puis le dollar australien ou canadien comme devise de conversion. Lorsqu'il clique sur le bouton "Convertir", j'aimerais convertir ce montant automatiquement, via une API, et lui montrer le montant dans la devise dans laquelle il a choisi de convertir.

Des idées?

18
Click Upvote

Un exemple de conversion de EUR en 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

Cette méthode utilise l’API de devise Yahoo Didacticiel complet: Convertisseur de devises en PHP, Python, Javascript et 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

J'aime la première solution, mais il semble y avoir un gros problème. J'ai essayé de l'implémenter dans une passerelle de paiement mais j'ai continué à obtenir un résultat égal à 1. Cela m'a rendu perplexe et j'ai finalement trouvé que c’est parce qu’il existe un espace utilisé par Google pour le compte de milliers. Ainsi, le montant de 1 500,00 a été retourné sous la forme d'une somme, le reste ayant été explosé. J'ai créé un correctif rapide et sale pour le problème. Informez-moi si quelqu'un d'autre a rencontré ce problème. Voici ma solution:

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

Ma solution 2017 est une fonction très légère qui récupère les informations d’échange actuelles de l’API fixer.io. Il enregistre également le taux de change dans un cookie quotidien pour éviter tout temps de chargement important de la bande. Vous pouvez également choisir des sessions pour cela ou le supprimer:

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

Exemple d'utilisation pour convertir 100 euros en livres:

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

2
AlexioVay

Utiliser le code donné pour le convertisseur de devises 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

C'est ce que j'utilise:

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

J'ai utilisé PHP pour extraire les données de la BCE sous la forme Stefan Gehrig suggéré.

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

Il écrit un fichier JSON que j'inclus en tant que variable JavaScript:

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

Je peux ensuite récupérer facilement les données en utilisant le code de devise à 3 lettres (par exemple, data['GBP']) avec JavaScript lorsqu’un changement de devise est demandé.

J'utilise un travail Cron pour mettre à jour le JSON une fois par jour, de sorte qu'il n'appelle pas chaque fois que la page est visitée.

1
Justin Putney

utilisez cette fonction simple:

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

Vous pouvez également vérifier: https://free.currencyconverterapi.com

Disclaimer, je suis l'auteur de ce site.

Un exemple d'URL de conversion est: http://free.currencyconverterapi.com/api/v6/convert?q=PHP_EUR,EUR_PHP&compact=ultra&apiKey=sample-api-key qui renverra une valeur au format json, par exemple. {"PHP_EUR": 0.016434, "EUR_PHP": 60.849184}

Vous devriez noter sur les limitations bien que comme maximum de demandes et requêtes (détails trouvés sur le site). J'ai mis en place des limites parce qu'il y a eu des abuseurs du service.

J'ai commencé cela depuis 2014 et je suis en progression depuis (à part le changement de lien et les temps d'arrêt de maintenance en cours de route). Personnellement, je l'utilise pour mes autres sites Web et fournit le service publiquement afin qu'il puisse également aider d'autres développeurs.

Quoi qu'il en soit, espérons que cela aide, et voici un exemple de code PHP:

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

Veuillez vérifier ci-dessous l'exemple de changement de devise.

    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
Prakash Vasavada

Tout d'abord, obtenez une API gratuite sur ce site:

fix.io

Deuxièmement, remplacez-le ici:

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

Ensuite, utilisez-le de cette façon et profitez-en!

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

semble que vous devez vous inscrire pour une clé API, je pense

0

C'est si simple si vous utilisez un serveur local comme wamp, xampp ou un autre serveur, vous devez alors activer l'extension de openssl en premier dans le fichier php.ini. 

extension=php_openssl.dll `allow_url_fopen = On`

alors vous serez en mesure d'exécuter mon code sinon vous exécutez votre site web avec hébergement en ligne alors vous n'avez pas besoin de le faire, vous devez donc ajouter cette fonction php dans votre 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 
0
Hammad Friend