Конвертация валюты с использованием PHP
Я ищу способ конвертировать любую сумму из одной валюты в другую на веб-сайте. Пользователь вводит что-то вроде "100" и выбирает доллар США в качестве валюты, а затем выбирает австралийские или канадские доллары в качестве валюты для конвертации. Когда он нажимает кнопку "Конвертировать", я хотел бы автоматически конвертировать эту сумму через некоторый API и показать ему сумму в валюте, которую он решил конвертировать.
Любые идеи?
Ответы
Ответ 1
Этот метод использует API валюты Yahoo Полный учебник: Конвертер валют в PHP, Python, Javascript и 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
Пример преобразования EUR в 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;
}
Ответ 3
Мне нравится первое решение, но, похоже, проблема с BIG с ним.
Я попытался реализовать его в платежном шлюзе, но я продолжал получать результат 1.
Это озадачило меня, и я в конце концов обнаружил, что это потому, что есть пространство, используемое google для тысяч sparator. Таким образом, сумма в 1 500,00 была возвращена как одна, так как остальные были взорваны. Я создал для этого быстрое и грязное решение.
Дайте мне знать, если кто-то еще испытал эту проблему.
Вот мое решение:
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); }
Ответ 4
Это то, что я использую:
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);
}
Ответ 5
Мое решение для 2017 - очень легкая функция, которая получает текущую информацию об обмене от API fixer.io
. Он также сохраняет обменный курс в ежедневном файле cookie, чтобы предотвратить дальнейшее интенсивное время загрузки в Интернете. Вы также можете выбрать "Сеансы" для этого или удалить его:
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;
}
Пример использования для конвертации 100 евро в фунты:
echo convertCurrency(100, 'EUR', 'GBP');
Ответ 6
Использовать данный код для конвертера валют 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;
}
Ответ 7
После долгих поисков нашел это.
// 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...
}
}
Это работает нормально.
Фрагмент из: https://www.exchangerate-api.com/docs/php-currency-api
Ответ 8
/**
* 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
);
}
Ответ 9
Я использовал следующий PHP, чтобы вытащить данные из ЕЦБ в качестве Стефана Герига.
<?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 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; }
?>
Он записывает JSON файл, который я включаю в качестве переменной JavaScript:
<script type="text/javascript">
var data = <?php include('currency.json'); ?>;
</script>
Ответ 10
используйте эту простую функцию:
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);
}
Ответ 11
Это так просто, если вы используете локальный сервер, например, wamp или xampp или другой сервер, тогда вам нужно включить расширение opensl сначала в php.ini
extension=php_openssl.dll `allow_url_fopen = On`
тогда вы сможете запустить мой код
иначе вы запускаете свой веб-сайт с помощью онлайн-хостинга, тогда вам не нужно это делать, поэтому вам нужно добавить эту функцию php в свой 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
Ответ 12
Вы также можете проверить: https://free.currencyconverterapi.com
Отказ от ответственности, я автор этого сайта.
Пример URL преобразования: http://free.currencyconverterapi.com/api/v6/convert?q=PHP_EUR,EUR_PHP&compact=ultra&apiKey=sample-api-key, который будет возвращать значение в формате json, например, {"PHP_EUR": 0.016434, "EUR_PHP": 60.849184}
Следует помнить об ограничениях, таких как максимальное количество запросов и запросов (подробности можно найти на веб-сайте). Я ввел ограничения, потому что были нарушители сервиса.
Я начал это с 2014 года, и с тех пор постоянно работаю (за исключением случаев, когда меняются ссылки и время простоя обслуживания). Я лично использую его для других своих веб-сайтов и предоставляю услугу публично, чтобы она также могла помочь другим разработчикам.
В любом случае надеюсь, что это поможет, и вот пример кода 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"));
?>
Ответ 13
Пожалуйста, проверьте ниже пример изменения валюты.
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");
Ответ 14
https://fincharts.info/charts/exchange/?key=api_key&&from=USD&to=GBP,BWP,ZAR&amount=45854&date=2018-03-03&base=USD
Кажется, вы должны зарегистрироваться для ключа API, я думаю,
Ответ 15
<?php
// replace this key from fixer.io after getting a free API access key:
$API = '314259bbe6de76b961c84a5244ac0fc0';
function convertCurrency($API, $amount, $from = 'EUR', $to = 'USD'){
$curl = file_get_contents("http://data.fixer.io/api/latest?access_key=$API&symbols=$from,$to");
if($curl)
{
$arr = json_decode($curl,true);
if($arr['success'])
{
$from = $arr['rates'][$from];
$to = $arr['rates'][$to];
$rate = $to / $from;
$result = round($amount * $rate, 6);
return $result;
}else{
echo $arr['error']['info'];
}
}else{
echo "Error reaching api";
}
}
echo convertCurrency($API, 1, 'USD', 'EGP');