Перейти к содержанию
Xelen

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

Рекомендуемые сообщения

Возникла проблема с передачей цены в 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;
			}

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

$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 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.