Jump to content
покупайте без комиссии
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

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


Recommended Posts

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

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

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

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

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

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

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

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

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

Вот  пример

pp.png.d1bec9ea4e01351d68f134109ca3e948.png

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

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

Link to post
Share on other sites

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

насколько я поняла, это задается здесь 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;
			}

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

Link to post
Share on other sites

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

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

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

Link to post
Share on other sites
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);

 

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

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

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.