Пример создания нового способа оплаты — различия между версиями
Velross (обсуждение | вклад) (Новая страница: «'''Актуально для версии 2.9''' <br/> '''Задача:''' рассчитывать доставку почтой России по следующе…») |
Velross (обсуждение | вклад) |
||
Строка 2: | Строка 2: | ||
<br/> | <br/> | ||
− | '''Задача:''' | + | '''Задача:''' создать способ оплаты с дополнительным шагом, на котором показать пользователю дополнительную информацию.<br/> |
− | '''Решение:''' для решения поставленной задачи, создадим новый способ | + | '''Решение:''' для решения поставленной задачи, создадим новый способ оплаты.<br/> |
Чтобы добавить новый тип доставки, Вам следует выполнить следующие шаги:<br/> | Чтобы добавить новый тип доставки, Вам следует выполнить следующие шаги:<br/> | ||
− | 1. Открыть модуль '''Шаблоны данных''' и найти там "'''Способы | + | 1. Открыть модуль '''Шаблоны данных''' и найти там "'''Способы оплаты'''". Добавить в него дочерний шаблон, назвав его например, так "''Перевод через сервис Visa QIWI Wallet''".<br/> |
− | |||
2. В созданном шаблоне создаем два поля:<br/> | 2. В созданном шаблоне создаем два поля:<br/> | ||
− | ''' | + | '''Как платить?[kak_platit]''' - тип HTML-текст, видимое.<br/> |
− | ''' | + | '''Номер телефона[phone]''' - тип Строка, видимое.<br/> |
− | [[Файл: | + | [[Файл:Newpay1.png]]<br> |
Запоминаем id шаблона из адресной строки браузера:<br/> | Запоминаем id шаблона из адресной строки браузера:<br/> | ||
− | '''/admin/data/type_edit/ | + | '''/admin/data/type_edit/131/''' - то есть у меня id=131<br/> |
− | [[Файл: | + | [[Файл:Qiwi5.png]]<br> |
− | 3. В этом же модуле, на вкладке Справочники, находим справочник "'''Типы | + | 3. В этом же модуле, на вкладке Справочники, находим справочник "'''Типы способов оплаты'''" и нажимаем на иконку глаза, чтобы открыть содержимое справочника.<br/> |
Добавляем новое наименование.<br/> | Добавляем новое наименование.<br/> | ||
− | В поле "'''Название'''" напишем тоже самое "'' | + | В поле "'''Название'''" напишем тоже самое "''Перевод через сервис Visa QIWI Wallet''", в поле "'''Тип данных (id)'''" наш запомненный ранее id "''131''", в поле "'''Тип данных'''" напишем "''emarket-payment-131''", где 131 - это наш id. А вот в поле "'''Идентификатор типа доставки'''" напишем название будущего класса, которое должно отражать предназначение класса. Указывается латинскими буквами. У меня в примере данный класс называется ''simpleQIWI'' (Обратите внимание, что название регистрозависимое. Если мы используем прописные буквы, то точно также мы должны их использовать и в дальнейшем).<br/> |
− | [[Файл: | + | [[Файл:Qiwi6.png]]<br> |
4. Открываем базу данных через phpMyAdmin и выполняем запрос:<br/> | 4. Открываем базу данных через phpMyAdmin и выполняем запрос:<br/> | ||
<source lang="sql"> | <source lang="sql"> | ||
− | UPDATE `blank`.`cms3_object_types` SET `guid` = 'emarket- | + | UPDATE `blank`.`cms3_object_types` SET `guid` = 'emarket-payment-131' WHERE `cms3_object_types`.`id` =131; |
</source> | </source> | ||
В данном запросе следует изменить:<br/> | В данном запросе следует изменить:<br/> | ||
''''blank'''' - на название вашей базы данных,<br/> | ''''blank'''' - на название вашей базы данных,<br/> | ||
− | ''''emarket- | + | ''''emarket-payment-131'''' - на emarket-payment с вашим id<br/> |
− | ''' | + | '''131''' - на ваш id<br/> |
5. Заходим на сайт по FTP, открываем директорию:<br/> | 5. Заходим на сайт по FTP, открываем директорию:<br/> | ||
− | '''\classes\modules\emarket\classes\ | + | '''\classes\modules\emarket\classes\payment\systems\'''<br/> |
− | где копируем файл courier.php и переименовываем его в '' | + | где копируем файл courier.php и переименовываем его в ''simpleqiwi.php'' - у Вас может быть другое название, которое Вы указали в 3 шаге.<br/> |
6. Открываем файл на редактирование и изменяем:<br/> | 6. Открываем файл на редактирование и изменяем:<br/> | ||
− | название класса | + | название класса courierPayment на '''simpleQIWIPayment''' (у вас может быть другое название, указанное на 3 шаге).<br/> |
− | 7. | + | 7. Доработаем содержимое класса на наше усмотрение. Здесь мы вместо редиректа передаем массив с данными об ID заказа, его номере и итоговую сумму заказа, а также кладем в ячейки массива содержимое полей "Номер телефона" и "Как платить?":<br/> |
<source lang="php"> | <source lang="php"> | ||
<?php | <?php | ||
− | class | + | class simpleQIWIPayment extends payment { |
− | public function validate(order $order) { | + | |
− | return | + | public function validate() { return true; } |
+ | |||
+ | public function process($template = null) { | ||
+ | $order = $this->order; | ||
+ | $order->order(); | ||
+ | $controller = cmsController::getInstance(); | ||
+ | $module = $controller->getModule("emarket"); | ||
+ | $line['attribute:orderId'] = $order->getId(); | ||
+ | $line['attribute:number'] = $order->getValue('number'); | ||
+ | $line['attribute:total_price'] = $order->getValue('total_price'); | ||
+ | $line['attribute:phone'] = $this->object->phone; | ||
+ | $line['node:value'] = $this->object->kak_platit; | ||
+ | $lines[] = $line; | ||
+ | $udata['nodes:item'] = $lines; | ||
+ | if($module) { | ||
+ | return $udata; | ||
+ | } | ||
+ | return null; | ||
} | } | ||
− | public function | + | public function poll() { |
− | + | $buffer = outputBuffer::current(); | |
− | + | $buffer->clear(); | |
+ | $buffer->contentType('text/plain'); | ||
+ | $buffer->push('Sorry, but this payment system doesn\'t support server polling.' . getRequest('param0')); | ||
+ | $buffer->end(); | ||
+ | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
}; | }; | ||
?> | ?> | ||
</source><br/> | </source><br/> | ||
8. Проверьте, что файл в кодировке utf-8 (без BOM).<br/> | 8. Проверьте, что файл в кодировке utf-8 (без BOM).<br/> | ||
− | 9. В административном интерфейсе сайта, в модуле Интернет-магазин, создайте новый способ | + | 9. В административном интерфейсе сайта, в модуле Интернет-магазин, создайте новый способ оплаты "''Перевод через сервис Visa QIWI Wallet''", заполните поля '''Номер телефона''' и '''Как платить?'''.<br>[[Файл:Newpay2.png]]<br/> |
+ | 11. Добавим новый шаг в шаблон оформления заказа на этапе выбора способа оплаты: \templates\demodizzy\xslt\modules\emarket\purchase\payment.xsl | ||
+ | <source lang="xml"> | ||
+ | <xsl:template match="purchasing[@stage = 'payment'][@step = 'simpleQIWI']"> | ||
+ | <div class="ramka"> | ||
+ | <h3>Сведения которые необходимо указать при оплате:</h3> | ||
+ | <h4>Номер телефона: <xsl:value-of select="item/@phone" /></h4> | ||
+ | <h4>Сумма к оплате: <xsl:value-of select="item/@total_price" /></h4> | ||
+ | <h4>Комментарий: Заказ №<xsl:value-of select="item/@number" /></h4> | ||
+ | </div> | ||
+ | <br/> | ||
+ | <xsl:value-of select="item" disable-output-escaping="yes"/> | ||
+ | <div class="cart-buttons"> | ||
+ | <a href="{$lang-prefix}/emarket/purchase/result/successful/" class="button big"> | ||
+ | <xsl:text>Завершить</xsl:text> | ||
+ | </a> | ||
+ | </div> | ||
+ | </xsl:template> | ||
+ | </source> | ||
10. Проверим.<br/> | 10. Проверим.<br/> | ||
− | + | [[Файл:Newpay3.png]]<br/> | |
− | [[Файл: | + | [[Файл:Newpay4.png]] |
− | [[Файл: | ||
− | |||
[[Категория:Модуль Интернет магазин]][[Категория:Написание кастомных макросов]] | [[Категория:Модуль Интернет магазин]][[Категория:Написание кастомных макросов]] |
Версия 20:58, 30 ноября 2013
Актуально для версии 2.9
Задача: создать способ оплаты с дополнительным шагом, на котором показать пользователю дополнительную информацию.
Решение: для решения поставленной задачи, создадим новый способ оплаты.
Чтобы добавить новый тип доставки, Вам следует выполнить следующие шаги:
1. Открыть модуль Шаблоны данных и найти там "Способы оплаты". Добавить в него дочерний шаблон, назвав его например, так "Перевод через сервис Visa QIWI Wallet".
2. В созданном шаблоне создаем два поля:
Как платить?[kak_platit] - тип HTML-текст, видимое.
Номер телефона[phone] - тип Строка, видимое.
Запоминаем id шаблона из адресной строки браузера:
/admin/data/type_edit/131/ - то есть у меня id=131
3. В этом же модуле, на вкладке Справочники, находим справочник "Типы способов оплаты" и нажимаем на иконку глаза, чтобы открыть содержимое справочника.
Добавляем новое наименование.
В поле "Название" напишем тоже самое "Перевод через сервис Visa QIWI Wallet", в поле "Тип данных (id)" наш запомненный ранее id "131", в поле "Тип данных" напишем "emarket-payment-131", где 131 - это наш id. А вот в поле "Идентификатор типа доставки" напишем название будущего класса, которое должно отражать предназначение класса. Указывается латинскими буквами. У меня в примере данный класс называется simpleQIWI (Обратите внимание, что название регистрозависимое. Если мы используем прописные буквы, то точно также мы должны их использовать и в дальнейшем).
4. Открываем базу данных через phpMyAdmin и выполняем запрос:
UPDATE `blank`.`cms3_object_types` SET `guid` = 'emarket-payment-131' WHERE `cms3_object_types`.`id` =131;
В данном запросе следует изменить:
'blank' - на название вашей базы данных,
'emarket-payment-131' - на emarket-payment с вашим id
131 - на ваш id
5. Заходим на сайт по FTP, открываем директорию:
\classes\modules\emarket\classes\payment\systems\
где копируем файл courier.php и переименовываем его в simpleqiwi.php - у Вас может быть другое название, которое Вы указали в 3 шаге.
6. Открываем файл на редактирование и изменяем:
название класса courierPayment на simpleQIWIPayment (у вас может быть другое название, указанное на 3 шаге).
7. Доработаем содержимое класса на наше усмотрение. Здесь мы вместо редиректа передаем массив с данными об ID заказа, его номере и итоговую сумму заказа, а также кладем в ячейки массива содержимое полей "Номер телефона" и "Как платить?":
<?php
class simpleQIWIPayment extends payment {
public function validate() { return true; }
public function process($template = null) {
$order = $this->order;
$order->order();
$controller = cmsController::getInstance();
$module = $controller->getModule("emarket");
$line['attribute:orderId'] = $order->getId();
$line['attribute:number'] = $order->getValue('number');
$line['attribute:total_price'] = $order->getValue('total_price');
$line['attribute:phone'] = $this->object->phone;
$line['node:value'] = $this->object->kak_platit;
$lines[] = $line;
$udata['nodes:item'] = $lines;
if($module) {
return $udata;
}
return null;
}
public function poll() {
$buffer = outputBuffer::current();
$buffer->clear();
$buffer->contentType('text/plain');
$buffer->push('Sorry, but this payment system doesn\'t support server polling.' . getRequest('param0'));
$buffer->end();
}
};
?>
8. Проверьте, что файл в кодировке utf-8 (без BOM).
9. В административном интерфейсе сайта, в модуле Интернет-магазин, создайте новый способ оплаты "Перевод через сервис Visa QIWI Wallet", заполните поля Номер телефона и Как платить?.
11. Добавим новый шаг в шаблон оформления заказа на этапе выбора способа оплаты: \templates\demodizzy\xslt\modules\emarket\purchase\payment.xsl
<xsl:template match="purchasing[@stage = 'payment'][@step = 'simpleQIWI']">
<div class="ramka">
<h3>Сведения которые необходимо указать при оплате:</h3>
<h4>Номер телефона: <xsl:value-of select="item/@phone" /></h4>
<h4>Сумма к оплате: <xsl:value-of select="item/@total_price" /></h4>
<h4>Комментарий: Заказ №<xsl:value-of select="item/@number" /></h4>
</div>
<br/>
<xsl:value-of select="item" disable-output-escaping="yes"/>
<div class="cart-buttons">
<a href="{$lang-prefix}/emarket/purchase/result/successful/" class="button big">
<xsl:text>Завершить</xsl:text>
</a>
</div>
</xsl:template>