货币转换算法利用API(Currency Conversion Algorithm Using Ap

2019-11-04 17:40发布

我目前正在开发使用PHP用户可以改变产品的钱货币,如eBay或全球速卖通做的应用程序。 因此,如果用户更改其货币兑美元的所有产品的价格都将被转换为美元。

我已经寻找了一个API来获取实时货币称为CurrencyLayer。 该API提供的结构如下:

"success": true,
  "terms": "https://currencylayer.com/terms",
  "privacy": "https://currencylayer.com/privacy",
  "timestamp": 1432480209,
  "source": "USD",
  "quotes": {
    "USDAED": 3.67315,
    "USDAFN": 60.790001,
    "USDALL": 126.194504,
    "USDAMD": 477.359985,
    "USDANG": 1.790403,
    [...]
  }

我的计划是拯救这个报价每隔一小时在我的数据库。 考虑到货币转换的功能,这将是正确的算法,可将一个其他? 我知道这并不难,但我无法弄清楚。

function convertCurrency($currency1 = 'USD', $currency2 = 'EUR', $value){
   //Search the currency value and algorithm to convert   
   $newValue = (????)
   return $newValue;
}

Answer 1:

快速抬起头来,因为结果看起来是JSON格式,你首先可能需要调用json_decode对结果得到它在PHP对象格式。

json_decode后,您的API例子是这样的:

    // var_dump($api_result)
    stdClass Object
    (
        [success] => 1
        [terms] => https://currencylayer.com/terms
        [privacy] => https://currencylayer.com/privacy
        [timestamp] => 1432480209
        [source] => USD
        [quotes] => stdClass Object
            (
                [USDAED] => 3.67315
                [USDAFN] => 60.790001
                [USDALL] => 126.194504
                [USDAMD] => 477.359985
                [USDANG] => 1.790403
            )
    )

下一步就是用你的函数两个参数结合来访问(例如)USDAED结果:

<?php

    function convertCurrency($currency1 = 'USD', $currency2 = 'EUR', $value) {
        //Search the currency value and algorithm to convert
        $combined_currencies = $currency1.$currency2;
        return $api_result->quotes->$combined_currencies * $value;
    }

    echo convertCurrency("USD", "AED", 1); // 3.67315


Answer 2:

正如加里·托马斯已经提到的,CurrencyLayer API 文档具有源货币转换参数,使您可以从转换的基础货币USD到无论你的$currency1参数设置为。

但是据我所知,您希望能够定期查询只与CurrencyLayer API USD作为源货币,自己执行率计算。

要做到这一点,你需要转换:

  1. CURRENCY 1USD
  2. USDCURRENCY 2

这转化为代码:

function convertCurrency($currency1, $currency2, $value)
{
    $baseCurrency = 'USD';

    $quotes = [
        'USDCAD' => 1.28024,
        'USDEUR' => 0.838313,
        // ...
    ];

    $quote1 = $quotes[$baseCurrency . $currency1];
    $quote2 = $quotes[$baseCurrency . $currency2];

    return $value / $quote1 * $quote2;
}

convertCurrency('EUR', 'CAD', 10); // 15.271622890257

你也可以使用一个钱库,如砖/钱 ,处理这些计算(和更多)为您提供:

use Brick\Math\RoundingMode;
use Brick\Money\CurrencyConverter;
use Brick\Money\ExchangeRateProvider\ConfigurableProvider;
use Brick\Money\ExchangeRateProvider\BaseCurrencyProvider;
use Brick\Money\Money;

$provider = new ConfigurableProvider();
$provider->setExchangeRate('USD', 'CAD', 1.28024);
$provider->setExchangeRate('USD', 'EUR', 0.838313);

// This is where the magic happens!
$provider = new BaseCurrencyProvider($provider, 'USD');

$converter = new CurrencyConverter($provider);

$money = Money::of(10, 'EUR');
$converter->convert($money, 'CAD', RoundingMode::DOWN); // CAD 15.27

BaseCurrencyProvider是专为这个目的,当你有相对单一汇率的名单,并希望在列表中任意两个货币之间的转换。

需要注意的是在现实世界的应用程序,你可能会使用一个PDOProvider直接从您的数据库中加载的汇率,而不是ConfigurableProvider上面使用。



文章来源: Currency Conversion Algorithm Using Api