![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/cartforge.co/app/code/StripeIntegration/Payments/Helper/ |
<?php namespace StripeIntegration\Payments\Helper; use StripeIntegration\Payments\Exception\Exception; class Convert { public const ZERO_DECIMAL_CURRENCIES = ['BIF', 'CLP', 'DJF', 'GNF', 'JPY', 'KMF', 'KRW', 'MGA', 'PYG', 'RWF', 'UGX', 'VND', 'VUV', 'XAF', 'XOF', 'XPF']; public const THREE_DECIMAL_CURRENCIES = ['BHD', 'JOD', 'KWD', 'OMR', 'TND']; public function isZeroDecimalCurrency(string $currency) { return in_array(strtoupper($currency), self::ZERO_DECIMAL_CURRENCIES); } public function isThreeDecimalCurrency(string $currency) { return in_array(strtoupper($currency), self::THREE_DECIMAL_CURRENCIES); } public function magentoAmountToStripeAmount($amount, $currency): int { if (!is_numeric($amount)) return 0; $amount = floatval($amount); if ($this->isZeroDecimalCurrency($currency)) return (int) round($amount); if ($this->isThreeDecimalCurrency($currency)) return (int) round($amount * 100) * 10; return (int) round($amount * 100); } public function stripeAmountToMagentoAmount($amount, string $currency): float { if (!is_numeric($amount)) return 0.0; $amount = floatval($amount); if ($this->isZeroDecimalCurrency($currency)) return $amount; if ($this->isThreeDecimalCurrency($currency)) return $amount / 1000; return $amount / 100; } public function getCurrencyPrecision(string $currency): int { if ($this->isZeroDecimalCurrency($currency)) return 0; if ($this->isThreeDecimalCurrency($currency)) return 3; return 2; } public function stripeAmountToOrderAmount($amount, $currency, $order) { if (strtolower($currency) != strtolower($order->getOrderCurrencyCode())) throw new Exception("The order currency does not match the Stripe currency"); return $this->stripeAmountToMagentoAmount($amount, $currency); } public function stripeAmountToQuoteAmount($amount, $currency, $quote) { if (strtolower($currency) != strtolower($quote->getQuoteCurrencyCode())) throw new Exception("The quote currency does not match the Stripe currency"); return $this->stripeAmountToMagentoAmount($amount, $currency); } public function stripeAmountToBaseQuoteAmount($amount, $currency, $quote) { if (strtolower($currency) != strtolower($quote->getQuoteCurrencyCode())) throw new Exception("The order currency does not match the Stripe currency"); $precision = $this->getCurrencyPrecision($currency); $magentoAmount = $this->stripeAmountToMagentoAmount($amount, $currency); $baseAmount = round(floatval($magentoAmount / $quote->getBaseToQuoteRate()), $precision); return $baseAmount; } public function baseAmountToOrderAmount($baseAmount, $order, $stripeCurrency, $precision = 4) { if (strtolower($stripeCurrency) == strtolower($order->getOrderCurrencyCode())) { $rate = $order->getBaseToOrderRate(); if (empty($rate)) return $baseAmount; // The base currency and the order currency are the same return round(floatval($baseAmount * $rate), $precision); } else { $store = $order->getStore(); $amount = $store->getBaseCurrency()->convert($baseAmount, $stripeCurrency); return round(floatval($amount), $precision); } // $rate = $this->currencyFactory->create()->load($order->getBaseCurrencyCode())->getAnyRate($order->getOrderCurrencyCode()); } public function orderAmountToBaseAmount($amount, $currency, $order, $precision = 4) { if (strtolower($currency) == strtolower($order->getOrderCurrencyCode())) $rate = $order->getBaseToOrderRate(); else throw new Exception("Currency code $currency was not used to place order #" . $order->getIncrementId()); // $rate = $this->currencyFactory->create()->load($order->getBaseCurrencyCode())->getAnyRate($currency); if (empty($rate)) return $amount; // The base currency and the order currency are the same return round(floatval($amount / $rate), $precision); } }