Перейти к содержимому


Фотография
- - - - -

Заказ от клиента, без оплаты на сайте.


Лучший Ответ mrbrain , 12 March 2013 - 05:37

Еще сущесвует один способ, правда он является искусственным, но покрайней мере может натолкнуть разработчиков как прикрутить этот параметр в форму оформления заказа.
Попорядку.
1. В форме оформления заказа в списке "Способы оплаты" добавляем две опции Робокаса и Интеркаса, сохраняем и запоминаем, какие оно создало алиасы для этих опций (у меня это 'robokassa','interkassa')

2. На этой же странице с помощью fire bug смотрим какой уникальный номер (имя) поля "Спопособов оплаты", это необходимо знать что бы вырвать способ оплаты из POST массива по его имени, у меня это 2c200017-7279-46db-a2fe-2ef87b7ac23c

3. Открываем документ \media\zoo\applications\jbuniversal\framework\controllers\basket.php и находим строки

                if ((int)$appParams->get('global.jbzoo_cart_config.payment-enabled') && $orderDetails->getTotalPrice() > 0 ) {
                    $msg = JText::_('JBZOO_CART_SUCCESS_TO_PAYMENT_MESSAGE');
                    $this->setRedirect(JRoute::_($this->app->jbrouter->basketPayment($Itemid, $appId, $item->id), false));

                    return;

                } else {
                    $msg = JText::_('JBZOO_CART_SUCCESS_MESSAGE');
                    $this->setRedirect(JRoute::_($this->app->jbrouter->basketSuccess($Itemid, $appId), false), $msg);

                    return;
                }
примерно в 300 строке.
Добавляем перед этим кодом:
//Выбор страницы для способа оплаты
 $post_array    = $this->app->submission->filterData($post['elements']);
 $paement_value = $post_array['2c200017-7279-46db-a2fe-2ef87b7ac23c']['option'][0];
 $paement_servis= array('robokassa','interkassa');
//***
Где
$post_array  - данный которые ввел пользователь
$paement_value - способ оплаты выбранный пользователем (имя соответсвует имени поля Способ оплаты, которое смотрели с помощью fire bug)
$paement_servis - массив алиасов способы оплаты, которые будут осуществляться с помощью сервисов.
Затем после вставленного кода необходимо поправить условие if, заменив с:
if ((int)$appParams->get('global.jbzoo_cart_config.payment-enabled') && $orderDetails->getTotalPrice() > 0)
на
if ((int)$appParams->get('global.jbzoo_cart_config.payment-enabled') && $orderDetails->getTotalPrice() > 0 && in_array($paement_value,$paement_servis))
Добавляется дополнительное условие проверки in_array($paement_value,$paement_servis), которое проверяет выбранный способ оплаты, действительно сервис или нет.

Таким образом, если в админке создать новый тип поля Спосособ оплаты, или можно где то указывать его имя, и для способов оплаты можно помечать он сервисный или нет, то этот код можно сделать универсальным, заменив прямые записи имен, на их запросы из конфига.


Перейти к сообщению


  • Закрытая тема Тема закрыта
Сообщений в теме: 16

#1 excandr

excandr

Отправлено 10 March 2013 - 10:39

Подскажите возможно ли как-то реализовать следующее.
Надо ,что-бы заказ оформлялся даже, если клиент не желает оплачивать на сайте товар. То есть, заказ должен отправляться продавцу.
Например добавить кнопку ОПЛАТА НАЛИЧНЫМИ КУРЬЕРУ, рядом с кнопками РОБОКАССА , и после этого оформление заказа заканчивалось.
Изображение

ИЛИ что-бы после нажатия кнопки ОФОРМИТЬ ЗАКАЗ , клиенту выдавалось сообщение - "Заказа оформлен, Мы свяжемся с Вами позже", но у него была так же возможность оплатить заказа сразу , если он пожелает, или попросту игнорировать оплату на сайте.
  • 0

#2 SmetDenis

SmetDenis

Отправлено 11 March 2013 - 07:08

Шаблон списка способов оплат.
/media/zoo/applications/jbuniversal/templates/catalog/renderer/payment/_default.php

Добавьте туда вывод картинки ссылкой. Ссылку лучше указать на страницу с описанием про курьера.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#3 excandr

excandr

Отправлено 11 March 2013 - 07:42

Шаблон списка способов оплат.
/media/zoo/applications/jbuniversal/templates/catalog/renderer/payment/_default.php

Добавьте туда вывод картинки ссылкой. Ссылку лучше указать на страницу с описанием про курьера.

А процесс оформления, после нажатия на выведенную иконку будет завершаться? (информация о заказе отсылаться продавцу, а клиент получать сообщение, что с Вами свяжутся позже) 
  • 0

#4 SmetDenis

SmetDenis

Отправлено 11 March 2013 - 07:49

К моменту загрузки списка способов оплаты заказ уже будет создан. Письмо будет отправлено.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#5 excandr

excandr

Отправлено 11 March 2013 - 21:11

Шаблон списка способов оплат.
/media/zoo/applications/jbuniversal/templates/catalog/renderer/payment/_default.php

Добавьте туда вывод картинки ссылкой. Ссылку лучше указать на страницу с описанием про курьера.

Спасибо за совет , очень помог.
1) В общем я взял и переделала кнопку у РОБОКАССЫ под свои цели. Теперь при нажатии - Оплата курьером, завершить заказ (см.рис) - мне поступает заказ в административную панель Joomla (пока не уверен будет ли посылать на почту). 
Изображение


2) НО при нажатии - Оплата курьером ... , заказ то отправляется, но еще бы хотелось что-бы появлялось сообщение - Заказ принят, мы свяжемся с Вами - как это появляется, если Interkassa и Robokassa отключены.

Я так понимаю это делается в файле Default.php (в папке payment_robox).  Вот мой код - 
---------------------------------------------------------------------
?>
<p style="height:56px;"><!-- noindex --><a  target="_blank" rel="nofollow"><img src="media/zoo/applications/jbuniversal/assets/img/payments/robokassa.png"></a><!-- /noindex --></p>
<form action="<?php echo $action;?>" method=POST>
 <input type="submit" style="display:inline-block;" class="add-to-cart" value="<?php echo JText::_('JBZOO_PAYMENT_ROBOX');?>" />
</form>
---------------------------------------------------------------
Пытался скопировать код из default.php (в папке basketform). Но что-то некорректно получилось. Стало выдавать "Ошибка 0".

Можете помоч с кодом. Как должен выглядеть код в переделанном default от robokassa.

  • 0

#6 mrbrain

mrbrain

Отправлено 12 March 2013 - 05:37   Лучший Ответ

Еще сущесвует один способ, правда он является искусственным, но покрайней мере может натолкнуть разработчиков как прикрутить этот параметр в форму оформления заказа.
Попорядку.
1. В форме оформления заказа в списке "Способы оплаты" добавляем две опции Робокаса и Интеркаса, сохраняем и запоминаем, какие оно создало алиасы для этих опций (у меня это 'robokassa','interkassa')

2. На этой же странице с помощью fire bug смотрим какой уникальный номер (имя) поля "Спопособов оплаты", это необходимо знать что бы вырвать способ оплаты из POST массива по его имени, у меня это 2c200017-7279-46db-a2fe-2ef87b7ac23c

3. Открываем документ \media\zoo\applications\jbuniversal\framework\controllers\basket.php и находим строки
                if ((int)$appParams->get('global.jbzoo_cart_config.payment-enabled') && $orderDetails->getTotalPrice() > 0 ) {
                    $msg = JText::_('JBZOO_CART_SUCCESS_TO_PAYMENT_MESSAGE');
                    $this->setRedirect(JRoute::_($this->app->jbrouter->basketPayment($Itemid, $appId, $item->id), false));

                    return;

                } else {
                    $msg = JText::_('JBZOO_CART_SUCCESS_MESSAGE');
                    $this->setRedirect(JRoute::_($this->app->jbrouter->basketSuccess($Itemid, $appId), false), $msg);

                    return;
                }
примерно в 300 строке.
Добавляем перед этим кодом:
//Выбор страницы для способа оплаты
 $post_array    = $this->app->submission->filterData($post['elements']);
 $paement_value = $post_array['2c200017-7279-46db-a2fe-2ef87b7ac23c']['option'][0];
 $paement_servis= array('robokassa','interkassa');
//***
Где
$post_array  - данный которые ввел пользователь
$paement_value - способ оплаты выбранный пользователем (имя соответсвует имени поля Способ оплаты, которое смотрели с помощью fire bug)
$paement_servis - массив алиасов способы оплаты, которые будут осуществляться с помощью сервисов.
Затем после вставленного кода необходимо поправить условие if, заменив с:
if ((int)$appParams->get('global.jbzoo_cart_config.payment-enabled') && $orderDetails->getTotalPrice() > 0)
на
if ((int)$appParams->get('global.jbzoo_cart_config.payment-enabled') && $orderDetails->getTotalPrice() > 0 && in_array($paement_value,$paement_servis))
Добавляется дополнительное условие проверки in_array($paement_value,$paement_servis), которое проверяет выбранный способ оплаты, действительно сервис или нет.

Таким образом, если в админке создать новый тип поля Спосособ оплаты, или можно где то указывать его имя, и для способов оплаты можно помечать он сервисный или нет, то этот код можно сделать универсальным, заменив прямые записи имен, на их запросы из конфига.



  • 2

#7 excandr

excandr

Отправлено 12 March 2013 - 10:31


И что будет выдавать после того как клиент нажмет ОФОРМИТЬ ЗАКАЗ?
Правильно ли я понимаю
- Если клиент выберет ROBOKASSA или INTERKASSA ? то он будет попадать на форму оплаты этих систем.
- А если клиент выберет , созданный мной КУРЬЕРУ , то оформление будет завершаться с сообщением, типа ,Мы свяжемся с Вами позже.
??
  • 0

#8 mrbrain

mrbrain

Отправлено 12 March 2013 - 10:36

Да все верно поняли, если клиент выбирает способ с сервисом, то попадает на страницу с оплатой, если не через сервис, то попадает на такую же страницу, которая открывается если не включены сервисы оплаты - сообщение о завершении заказа.
  • 0

#9 excandr

excandr

Отправлено 12 March 2013 - 10:59

Да все верно поняли, если клиент выбирает способ с сервисом, то попадает на страницу с оплатой, если не через сервис, то попадает на такую же страницу, которая открывается если не включены сервисы оплаты - сообщение о завершении заказа.

выглядит удобно ..... вечером попробую Вашу инструкцию ... надеюсь разберусь 
  • 0

#10 mrbrain

mrbrain

Отправлено 12 March 2013 - 11:19

Поскольку это хак, то нужно учитывать, что после обновления все пропадет это, а также я назвал севис Робокаса, но на шаблоне с оплатой выводится сразу два включенных сервиса (если два включили конечно), поэтому можно назвать например способ оплаты Электоронные деньги если нужны два сервиса оплаты или называйте Робокаса, как делал это я (мне нада был только один).
  • 0




Click to return to top of page in style!