Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

округление цен в PayPal Payments Standard плагине


Recommended Posts

Возникла проблема с передачей цены в PayPal Payments Standard

На сайте все цены заданы до десятитысячных после запятой. Типа вот 12,1951

Это нужно, чтобы в итоге правильно считался налог.

Отображение цен было выставлено до 2 десятых.

Обратили внимание, что при выборе оплаты через Пейпел, там цена становится на несколько центов выше.

Стало понятно, что он сначала округляет стоимость каждого товара, а потом плюсует , что и дает лишние центы.

Я вывела на сайте цены полностью, но результат не изменился. То есть он гдето округляет каждую позицию и передает в пейпел.

Как понять, это плагин передает округленные цены для каждого товара или уже пейпал у себя округляет, а потом складывает?

Если первое. то как это изменить, чтобы округлялся только результат?

Вот  пример

pp.png.d1bec9ea4e01351d68f134109ca3e948.png

мне надо, чтобы пейпал показывал 95 евро, а он сложил стоимость каждой единицы товара, вместо 12,1951, взял 12,20 и умножил на 6

потом округлил налог, сложил все это и выдает 95,03

Надіслати
Поділитися на інших сайтах

вообще,хорошо было бы, чтобы сайт не передавал на пейпал список товаров, налог и доставку отдельно, а передавал только общую сумму

насколько я поняла, это задается здесь catalog/controller/extension/payment/pp_standard.php

и информация о заказе берется из сессии, пкока заказ не сформирован

$this->load->model('checkout/order');

		$order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);

		if ($order_info) {
			$data['business'] = $this->config->get('payment_pp_standard_email');
			$data['item_name'] = html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8');

			$data['products'] = array();

			foreach ($this->cart->getProducts() as $product) {
				$option_data = array();

				foreach ($product['option'] as $option) {
					if ($option['type'] != 'file') {
						$value = $option['value'];
					} else {
						$upload_info = $this->model_tool_upload->getUploadByCode($option['value']);
						
						if ($upload_info) {
							$value = $upload_info['name'];
						} else {
							$value = '';
						}
					}

					$option_data[] = array(
						'name'  => $option['name'],
						'value' => (utf8_strlen($value) > 20 ? utf8_substr($value, 0, 20) . '..' : $value)
					);
				}

				$data['products'][] = array(
					'name'     => htmlspecialchars($product['name']),
					'model'    => htmlspecialchars($product['model']),
					'price'    => $this->currency->format($product['price'], $order_info['currency_code'], false, false),
					'quantity' => $product['quantity'],
					'option'   => $option_data,
					'weight'   => $product['weight']
				);
			}

			$data['discount_amount_cart'] = 0;

			$total = $this->currency->format($order_info['total'] - $this->cart->getSubTotal(), $order_info['currency_code'], false, false);

			if ($total > 0) {
				$data['products'][] = array(
					'name'     => $this->language->get('text_total'),
					'model'    => '',
					'price'    => $total,
					'quantity' => 1,
					'option'   => array(),
					'weight'   => 0
				);
			} else {
				$data['discount_amount_cart'] -= $total;
			}

можно ли убрать вывод всех этих товаров, налога, доставки, а отдавать пейпелу только общую сумму? это бы решило проблему с округлением.

Надіслати
Поділитися на інших сайтах

Везде в контроллере пайпала - передача и ответ можно округлит цени и тотал так.

$data['amount'] = number_format($this->currency->format($order_info['total'], $order_info['currency_code'], $order_info['currency_value'], false), 2, '.', '');

ето примерний код просто смотрите как округляется цена.

Надіслати
Поділитися на інших сайтах

1 час назад, Agatha65 сказал:

А почему у вас евро с 4 знака?

 

это, чтобы, когда клиент покупает много единиц товара, VAT  высчитывался точно.

4 знака только в админке, вывод настроен с округлением до 2

 

проблема была, что при выдаче пейпалу товаров списком, цены  у каждого товара округлялись, а потом складывались, что делало конечную сумму больше. В гугле много жалуются на это по запросу Paypal rounding error

В общем, я снесла вывод товаров по одному, закомментировала все, что в foreach и заменила

     

$total = $this->currency->format($order_info['total'] - $this->cart->getSubTotal(), $order_info['currency_code'], false, false);


       на    

$total = $this->currency->format($order_info['total'], $order_info['currency_code'], false, false);

 

Теперь выводит просто общую сумму, зато правильно.

Может, кому пригодится, хотя лучше оставлять список (но в данном случае просили убрать и его)

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.