Автор Тема: Онлайн оплата без стоимости доставки  (Прочитано 4005 раз)

06 Ноябрь 2014, 18:25:25
Ответ #15
  • Ветеран
  • *****
  • Сообщений: 16667
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Так попробуй
$cart->id_currency = ид твоей валюты;
В том-то и дело, что модуль берет валюту из корзины. В самом модуле ничего не нужно менять. Клиент добавляет товар, у этого товара определана цена и валюта.
Если у вас проблема в определении валют, то нужно искать причину не в модуле.
06 Ноябрь 2014, 18:32:04
Ответ #16
  • Ветеран
  • *****
  • Сообщений: 16667
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
$this->currencies = true;
$this->currencies_mode = 'radio';
Это стандарные переменные определения валюты. Такой переменной нельзя присвоить значение ID валюты. Это не тот случай.
У вас есть эти строчки в коде модуля?
06 Ноябрь 2014, 19:40:13
Ответ #17
  • Фрилансер
  • *
  • Сообщений: 104
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В модуль перед передачей заказа на оплату.
ничего не понял. мне нужно конкретно знать, в программированиии я не силен.
07 Ноябрь 2014, 10:52:50
Ответ #18
  • Фрилансер
  • *
  • Сообщений: 104
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
$this->currencies = true;
$this->currencies_mode = 'radio';
Это стандарные переменные определения валюты. Такой переменной нельзя присвоить значение ID валюты. Это не тот случай.
У вас есть эти строчки в коде модуля?

Есть эти строчки. Проблем с определением валюты нет. Как я уже упоминал, движок модифицирован - валюта по-умолчанию доллары, а цена автоматически для клиентов показывается в евро.
07 Ноябрь 2014, 11:32:08
Ответ #19
  • Ветеран
  • *****
  • Сообщений: 16667
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
С модифицированным движком все сложнее. Не известно, что там меняли и как работает добавление в корзину.
В стандарном варианте, товар добавляется в корзину по цене и валюте, которую видит покупатель. В таком варианте ничего менять не нужно, так как модуль берет валюту и сумму из массива $cart.
Включите режим отладки и скиньте данные по $cart.
07 Ноябрь 2014, 11:43:32
Ответ #20
  • Фрилансер
  • *
  • Сообщений: 104
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
С модифицированным движком все сложнее. Не известно, что там меняли и как работает добавление в корзину.
В стандарном варианте, товар добавляется в корзину по цене и валюте, которую видит покупатель. В таком варианте ничего менять не нужно, так как модуль берет валюту и сумму из массива $cart.
Включите режим отладки и скиньте данные по $cart.
Что там меняли, вполне известно.
В classes/Tools.php

Находим строку

$currency = Currency::getCurrencyInstance((int)_PS_CURRENCY_DEFAULT_);
и меняем на

$currency = Currency::getCurrencyInstance('4');
, где 4 - id валюты.

После этих манпуляций при валюте по умолчанию доллар можно вывести цены в любой другой валюте на постоянной основе (1.4 преста). В корзину все цены отображаются тоже в выведенной валюте. А вот модуль почему то уже "кушает" валюту по умолчанию, поэтому я и пытаюсь найти решение в файле самого модуля, вручную прописать айди или ISO нужной мне валюты. Причем модуль очень интересно показывает валюту по умолчанию - цена отображается в единицах выведенной принудительно валюты, а вот уже символ валюты - по умолчанию. Например, товар стоит 40 руб (1 доллар в валюте по молчанию), а модуль пытается заставить клиента заплатить не 40 руб, а 40 долларов (40 USD).
07 Ноябрь 2014, 12:21:04
Ответ #21
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Измените в модуле
$this->currencies_mode = 'checkbox';
07 Ноябрь 2014, 13:39:08
Ответ #22
  • Фрилансер
  • *
  • Сообщений: 104
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Измените в модуле
$this->currencies_mode = 'checkbox';
Никакого результата. А что означает checkbox?
07 Ноябрь 2014, 13:48:56
Ответ #23
  • Ветеран
  • *****
  • Сообщений: 1614
  • Репутация: +32/-1
  • Сообщество PrestaShop
    • Просмотр профиля
checkbox / radio
Это для выбора валют для модулей. Ограничения использования валют для модулей устанавливаются в Модули / Оплата.
07 Ноябрь 2014, 14:10:21
Ответ #24
  • Фрилансер
  • *
  • Сообщений: 104
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
У меня ощущение, что разрешить задачу можно правкой кода в liqpay.php а именно:

        $return_url    = 'http://'.$_SERVER['HTTP_HOST'].__PS_BASE_URI__.'modules/liqpay/validation.php';           
        $currency = $this->getCurrency();
        $amount         = $params['cart']->getOrderTotal(true, 4);
        $order_id      = $_SERVER['SERVER_NAME'].'_'.$params['cart']->id;
        $description   = 'Payment of goods on the site '.$_SERVER['SERVER_NAME'];

Нужно только правильно закомментировать строчку с валютой. Проблему с удалением платы за доставку из платежа я решил также правкой этого блока кода, значит и нужную мне валюту тоже можно здесь вывести. У кого какие идеи? Думаю, это совсем просто, только мне пока не хватает знаний.
07 Ноябрь 2014, 14:36:58
Ответ #25
  • Ветеран
  • *****
  • Сообщений: 1614
  • Репутация: +32/-1
  • Сообщество PrestaShop
    • Просмотр профиля
$currency = $this->getCurrency();Для настроек модуля в админке. Коментируя ее ничего не решить.
07 Ноябрь 2014, 14:45:19
Ответ #26
  • Фрилансер
  • *
  • Сообщений: 104
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
$currency = $this->getCurrency();Для настроек модуля в админке. Коментируя ее ничего не решить.

Вы ошибаетесь. Задача была решена:
Идем в liqpay.php, ищем строчку
$currency = $this->getCurrency();
Меняем на:
$currency = new Currency(х);
где х - id валюты, в которой будет взыматься с клиентов плата.

Как всегда после ручного изменения кода, вылезают сторонние ненужности. Например, админка отправляет клиенту ошибку оплаты (хотя оплата происходит прекрасно), потому что общая сумма заказа считается вместе с доставкой, а плату за доставку я уже отсек выше в этой теме. Как решить эту ошибку я не знаю. Наверное проще будет убрать стоимость доставки.
07 Ноябрь 2014, 15:47:32
Ответ #27
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
В таком случае вам нужно пересмотреть реализацию замещения валют. Проще один раз сделать нормально, чем потом решать многочисленые проблемы.
10 Ноябрь 2014, 18:55:55
Ответ #28
  • Фрилансер
  • *
  • Сообщений: 104
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Может есть у кого какие идеи?

Нопоминаю суть проблемы - искусственным путем была отсечена стоимость онлайн оплаты (liqpay) стоимости доставки (оплачивается только товар, total products).
После оплаты (успешной оплаты), клиент получает на почту письмо "Ошибка оплаты", статус заказа в админке автоматически тоже становится "Ошибка оплаты".

В самом заказе висит сообщение: "Внимание! 80 руб оплачено вместо 100 руб.!", где 80 руб. - стоимость товаров в заказе, а 100 руб. - стоимость всего заказа с доставкой.

Вариант бесплатной доставки не подходит. У меня возникла было идея подменить total paid на total products, но вот не знаю как. Помогите советом...
10 Ноябрь 2014, 20:09:41
Ответ #29
  • Ветеран
  • *****
  • Сообщений: 1807
  • Репутация: +49/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
У меня возникла было идея подменить total paid на total products, но вот не знаю как.
По моему, вариант не очень хороший. Если у вас есть другие методы оплаты и доставки, то они должны считать сумму по total paid.
Можно сделать так, что при выборе этого метода автоматом добавлялясь скидка на сумму доставки. Создаете правило корзины и оно включается в этом методе оплаты.