Magento-2 Как конвертировать цену из текущей валюты в базовую валюту
Я хочу конвертировать цену продукта из текущей валюты в базовую валюту.
Например, если цена продукта составляет 5000 индийских рупий. Я хочу конвертировать 5000 индийских рупий в доллары США.
Я не знаю, для какой основной функции лучше всего использовать. Кто-нибудь может привести мне примеры? Любая функция, которая используется для преобразования цены в текущую в базовую и базовую в текущую?
Цель: Я программно добавляю товар в корзину, если текущая валюта - доллар США, то она работает правильно, но если я поменяю валюту на индийских рупий, добавленная цена продукта преобразуется индийских рупий в долларов США. Поэтому я хочу конвертировать сумму INR в доллары США.
3 answers
Решение:
public function convertPrice($amount = 0, $store = null, $currency = null)
{
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$priceCurrencyObject = $objectManager->get('Magento\Framework\Pricing\PriceCurrencyInterface');
//instance of PriceCurrencyInterface
$storeManager = $objectManager->get('Magento\Store\Model\StoreManagerInterface');
//instance of StoreManagerInterface
if ($store == null) {
$store = $storeManager->getStore()->getStoreId();
//get current store id if store id not get passed
}
$rate = $priceCurrencyObject->convert($amount, $store, $currency);
//it return price according to current store from base currency
//If you want it in base currency then use:
$rate = $this->_priceCurrency->convert($amount, $store) / $amount;
$amount = $amount / $rate;
return $amount;
}
Здесь $amount
- сумма, в которую вы хотите конвертировать.
$store
это идентификатор магазина, из которого вы хотите конвертировать базовую валюту магазина.
$currency
это валюта, которую вы хотите конвертировать, если вы передали значение null, то она принимает текущую валюту.
Вы можете использовать приведенный ниже код в своем помощнике или в функции
/**
* @var \Magento\Store\Model\StoreManagerInterface
*/
protected $storeManager;
/**
* @var \Magento\Directory\Model\CurrencyFactory
*/
protected $currencyFactory;
/**
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
* @param \Magento\Directory\Model\CurrencyFactory $currencyFactory
*/
public function __construct(
\Magento\Store\Model\StoreManagerInterface $storeManager,
\Magento\Directory\Model\CurrencyFactory $currencyFactory
){
$this->storeManager = $storeManager;
$this->currencyFactory = $currencyFactory;
}
public function convertToBaseCurrency($price)
{
//you can also pass INR code here insted of below current store currency
$currentCurrency = $this->storeManager->getStore()->getCurrentCurrency()->getCode();
$baseCurrency = $this->storeManager->getStore()->getBaseCurrency()->getCode();
$rate = $this->currencyFactory->create()->load($currentCurrency)->getAnyRate($baseCurrency);
$returnValue = $price * $rate;
return $returnValue;
}
Сам Magento предоставляет всю конфигурацию преобразования, которую нам нужно только использовать.
Самый простой способ заархивировать это!
class Price
{
protected $_priceHelper;
public function __construct(
\Magento\Framework\Pricing\Helper\Data $priceHelper,
) {
$this->_priceHelper = $priceHelper;
}
public function yourFunction(){
/* Your code */
$this->convertToBaseCurrency(100);
}
/**
* @param $price
* @return int|float
*/
public function convertToBaseCurrency($price)
{
$formattedCurrencyValue = $this->_priceHelper->currency($price, false, false);
return $formattedCurrencyValue;
}
}