Magento-2 Как конвертировать цену из текущей валюты в базовую валюту


Я хочу конвертировать цену продукта из текущей валюты в базовую валюту.

Например, если цена продукта составляет 5000 индийских рупий. Я хочу конвертировать 5000 индийских рупий в доллары США.

Я не знаю, для какой основной функции лучше всего использовать. Кто-нибудь может привести мне примеры? Любая функция, которая используется для преобразования цены в текущую в базовую и базовую в текущую?

Цель: Я программно добавляю товар в корзину, если текущая валюта - доллар США, то она работает правильно, но если я поменяю валюту на индийских рупий, добавленная цена продукта преобразуется индийских рупий в долларов США. Поэтому я хочу конвертировать сумму INR в доллары США.

Author: Teja Bhagavan Kollepara, 2018-06-23

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, то она принимает текущую валюту.

 4
Author: Nikunj Vadariya, 2018-06-23 10:54:28

Вы можете использовать приведенный ниже код в своем помощнике или в функции

    /**
     * @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;
    }
 4
Author: Prashant Valanda, 2018-06-23 10:18:57

Сам 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;
    }
}
 1
Author: Manish Goswami, 2020-01-23 11:42:55