Jump to content

Recommended Posts

Модуль оплат своими руками или как сделать платежный модуль (плагин) для магазина.

 

Определения

Заказ - это то что создано в магазине из корзины покупок

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

 

В openStore

При оформлении заказа из собранной корзины - просто берутся все заказы со статусом 0 и собираются в одну корзину. При оформлении заказа, последним идет выбор платежного способа - он же задает ссылку через

файл

catalog\controller\payment\MY_MODULE.php

в котором должны быть заданы 3 функции

index - создает кнопку для вызова оплаты

pay - создает заказ и запускает создание счета для него и перенаправление покупателя на созданный счет

callback - сюда принимаем уведомление о поступивших платежах из платежного сервиса

 

в OpenStore функция index выглядит так

 
class ControllerPaymentMyModule extends Controller {
	protected function index() {
		// страницу окончания создания заказа свою грузим
		$this->data['action'] = $this->url->link('payment/MY_MODULE/pay');
	
		// добавили этот шаблон в общую папку
		$tpl = '/template/common/payment_confirm.tpl';
		if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . $tpl) ) {
			$this->template = $this->config->get('config_template') . $tpl;
		} else {
			$this->template = 'default' . $tpl;
		}
				
		$this->render();
	}

а файл /template/common/payment_confirm.tpl

содержит:

<div class="buttons">
	<div class="right">
		<a href="<?php echo $action; ?>" class="button" ><?php echo $button_confirm; ?></a>
	</div>
</div>

И для закрытия корзины и создания заказа вызывается функция index вашего модуля через ссылку.

Обычно она вида payment/MODULE_NAME

 
 

 

==========

 

 

MAKE BILL

Итак, после того как Вы выбрали способ оплаты вызывается его MODULE_FUNCTION функция. При этом данная функция должна:

  1. создать заказ (insert order) из корзины - это делается вызовом встроенной функции payment/checkout/insert При этом необходимо задать новый статус заказа (до этого статус был = 0 и поэтому такой заказ не показывался ни где) и записать в созданный заказ данные об созданном счете. Статус заказа желательно установить в 1 (Ожидание)

  2. очистить корзину

  3. создать счет на оплату в выбранной платежной службе

  4. записать данные о созданном счете в историю заказа (update order) - используем встроенную команду update

  5. пере-направить покупателя на созданный счет

 

GET NOTE

Так же в платежном модуле должна быть функция принимающая уведомления от платежной службы об оплате, как правило она называется callback(). Эта функция должна:

  1. получить данные

  2. проверить их на достоверность используя спообы защиты.

  3. занести информацию в заказ. Это делается встроенной функцией update - при этом желательно записать дополнительную информацию об оплате - какая платежная служба, какой аккаунт принял деньги на  какую дату-время, в какой валюте и сколько.,

При этом если от службы пришло уведомление об оплате счета для заказа:

  • со статусом 0 - поидее такой заказ вообще существует как корзина и по нему не нужно принимать уведомления

  • со статусом 1 (ожидание) - если пришло уведомление о полной оплате счета то перевести заказ на  статус 2 (обработка) - командой update

  • со статусом 2 (обработка) - добавить смену статуса от платежной службы (например от cryptoPay.in приходят новые статусы для счета - об подтверждении сетью)

  • с ругими статусами - добавить информацию но не менять статус. Это вызвано тем что заказ моожет быть отмене или возвращен, поэтому статус заказа менять нельзя

 

RE ASK NOTE

Еще надо дать возможность пользователю самостоятеьно проверить статус оплаты счета, так как иногда бывает что что-то пошло не так и пллатежная служба не смогла уведомить магазин о посупившем платеже. Так же это нужнно если уведомления вообще не настроены. Это дделается очень просто - создается кнопка в истории заказа в которую вставляем ссылку на функцию,, которая будет опрашивать платежную службу.

 

Нюансы

Когда заказ создан - он может быть оплачен разными платежными службами - клиент может создать по счету в каждой платежной службе и оплатить один из них. Поэтому при вызове функции MODULE_FUNCTION создания счета в данной службе необходимо проверить - может быть уже заказ в магазине создан из корзины.

Еще один нюанс - когда платежная служба не поддерживает оплату по счетам, а только пополнение на аккаунт пользователя с высылкой соотвествующих уведомленний в магазин. Например Яндекс.Деньги для физических лиц - работает только с аккаунтами своих пользователей. Поэтому когда приходит оплата ао данному заказу, то необходимо проверить - какая сумма пришла,, и если сумма пришла недостаточнная то перевести ее на депозит пользователя в магазине. А если сумма платежа равна или больше суммы заказа, то заказ перевести в статус 2 (обработка - оплаче) и остаток перевести на депозит покупателя в своем магазине.

 

DEPOSITE

Еще один способ оплаты заказов - через пополнение внутреннего депозита в магазине. При этом счет не создается, а просто если досточно средств на депозит, то он получает статус 2 (обработка) и с депозита покупателя списывается сумма

 

Пополнение депозита через платежные службы:

  1. надо задать признак, по которому данная платежная служба подходит для пополнения депозита

  2. В личном кабинете пользователя создаем кнопку - Пополнить депозит

  3. При выборе платежной службы, в ней создается счет с 0-й ценой, который можно поплннять бесконечно долго

  4. при приходе денег на такой счет платежная служба уведомляет магазин о поплнении

  5. магазин сохраняет данные в свою базу, при этом дублирующие поступления игнорируются

При интеграции своего модуля не забываем что название счета для оплаты депозита пользователя выглядит так:

 

DEP3456 - где,

3456 - номер пользователя, DEP - приставка указывающая на то что это счет для депозита.

 

На такой алгоритм создал модуль Multi_Pay - выкладываю его в дополнения

если есть какие идеи - пишите

 

Разработал модуль - Muli_Pay - в нем же модуль для депозитов

и к нему модуль для Яндекса и для биткоинов и в нем же библиотека multi_pay_tools

Share this post


Link to post
Share on other sites

Библиотека для быстрого написания своего платежного модуля

\catalog\model\payment\multi_pay_tools.php

 

При интеграции своего модуля не забываем что название счета для оплаты депозита пользователя выглядит так:

DEP3456 - 3456 - номер пользователя, DEP - приставка указывающая на то что это счет для депозита

 

полезные функции

 

Для платежных сервисов, которые поддерживают создание счетов

 

order_confirm

	public function order_confirm($order_id, $description='', $order_info=false)

при вызове вашего модуля - первым делом надо создать заказ, для этого как раз и пригодится эта функция

она проверяет - был ли создан заказ ранее -если да, то вызов игнорируется

иначе заказ получает статус 1 а корзина очищается

 

 

order_bill_make

	public function order_bill_make($order_id, $order_info, $description='') {

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

Нам необходимо запомнить данный номер счета - это и выполняет данная функция.

При этом в переменной $description задаем ссылку на счет в службе, имя службы и другую информацию

Если статус заказ не равен 1 то вызов функции игнорируется

 

 

order_bill_update

	public function order_bill_update($order_id, $order_info, $new_status_id, $description='') {

когда информация о счете поменялась - например пришло уведомление об оплате или об просрочке по счету, необходимо записать эту информацию в историю заказ и поменять статус заказа. Это выполняет данная функция. Причем если статус заказ не 1 и не 2 то статус не будет изменен. Если пришло уведомление что счет оплачен полностью то передаем в new_status_id = 2. Однако, если статус заказ не был равен 1 то смены статуса уже не произойдет

 

 
Для платежных сервисов, которые не поддерживают создание счетов
(например электронные деньги для физических лиц - Яндекс.Деньги и КИВИ)
 
add_payment
public function add_payment($service_cod, $service_account, $operation_id,  $datetime, $curr,
$amount, $order_id, $customer_id, $description) {

Когда Ваш модуль получил уведомление от платежной службы, что на ваш аккаунт зачисленна некая сумма с неким комментарием, то нужно определить - это сумма для оплаты некоего заказ? этой суммы хватило для оплаты? Если суммы хватило то закрываем данный заказ, а остаток суммы заносим на депозит покупателя. Если суммы недостаточно, всю ее заносим на депозит. Для этой цели используем данную функцию. В добавок данная функция проверит - если такая транзакция (код-службы + код-аккаунта + код-операции) уже обрабатывалась данной функцией то уведомление будет проигнорировано, если нет, то запишет эту транзакцию в свою таблицу.

 

 

update_deposit

	public function update_deposit($customer_id, $amount, $description) {		

Если надо добавить транзакцию в депозит покупателя, то используем эту функцию

Share this post


Link to post
Share on other sites

Помошник helper

еще модуль Multi Pay имеет файл помошник

system\helper\multi_pay.php

полезные функции которого можно продемонстрировать на коде:

	protected function index() {
		$this->load->helper('multi_pay');
		// берется из стадартного языка  $this->load->language('payment/multi_pay_dep');
		$this->data['button_confirm'] = $this->language->get('button_confirm');
		// страницу окончания создания заказа свою грузим
		$this->data['action'] = $this->url->link('payment/multi_pay_dep/pay');
	
		// добавили этот шаблон в общую папку
		$this->template = _tpl('/template/common/payment_confirm.tpl', $this->config->get('config_template'));
				
		$this->render();
	}
 
// добавили этот шаблон в общую папку
$this->template = _tpl('/template/common/payment_confirm.tpl', $this->config->get('config_template'));
 

 

_url - создать ссылку из текущей ссылки, например для запоминания ее в кэше для возврата на нее после регистрации в магазине

_g - легкий способ выбрать значение массива или взять по умолчанию

_tpl - легкий способ задать template

Share this post


Link to post
Share on other sites

Интересно

почитать

Share this post


Link to post
Share on other sites

добавил описание для платежных служб без создания счета

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By ashap
      950.00 руб
      Скачать/Купить дополнение


      PayAnyWay Отложенная оплата
      Модуль для оплаты через сервис PayAnyWay только после подтверждения менеджром магазина. Клиент не может сразу перейти на оплату пока администратор не одобрит возможность проведения платежа.
      Модуль для оплаты онлайн, только после того как менеджер свяжется с клиентом и убедится в наличии товара или каких то других факторах, только после этого у клиента появится возможность оплаты онлайн по ссылки из письма или из личного кабинета.
      *Не заменяет системных файлов
      *Требует vqmod
      Протестировано
      Opencart 1.5.3 - 1.5.6
      Ocstore 1.5.3 - 1.5.5
      Демо
      http://wm.ocstore.pe-art.ru/
      http://wm.ocstore.pe-art.ru/admin
      demo
      demo
      Работа с модулем
      1) В настройках укажите Статус для возможности оплаты
      2) Для разрешения оплаты перейдите в Админ панель - Продажи - Заказы - Просмотр
      3) Последняя вкладка История, там вы увидите ссылку на оплату, но со статусом отличным от указанного в настройках оплата не доступна
      4) Смените статус заказа на тот который вы указали в настройках модуля, установите галку Уведомить покупателя тогда в письмо о смене статуса добавится ссылка (копировать в поле комментарий ссылку не надо, со статусом указанным в настройках ссылка добавляется автоматически). Нажмите кнопку добавить историю.
      5) В личном кабинете в списке заказов у покупателя также должна появиться кнопка для оплаты заказа.
       
      Смотрите также другие модули по ссылке
      Добавил ashap Добавлено 25.01.2016 Категория Платежные системы Системные требования Сайт разработчика https://store.pe-art.ru/ Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 1.5.6.4
      1.5.6.3
      1.5.6.2
      1.5.6.1
      1.5.6
      1.5.4.1
      1.5.3.1 ocStore 1.5.5.1.2
      1.5.5.1.1
      1.5.5.1
      1.5.4.1.2
      1.5.4.1.1
      1.5.4.1
      1.5.3.1 OpenCart.Pro, ocShop OcShop 1.5.6.4.х Обращение к серверу разработчика  
    • By ashap
      4 990.00 руб
      Скачать/Купить дополнение


      РайффайзенБанк Эквайринг
      Прием к оплате банковских карт. Райффайзенбанк предлагает юридическим лицам, владеющим электронным магазином, услуги по организации и проведению расчетов (услуги эквайринга) через сеть Интернет по картам международных платежных систем VISA и MasterСard с эквайрингом через процессинговый центр банка.
      Особенности модуля:
      - Получение уведомлений от РайффайзенБанк о совершении оплаты
      - Автоматическая смена статуса при получении оплаты(возможность отправить письмо автоматически покупателю и админу при поступлении)
      - Возможность использования для электронных товаров.
      - Шифрование пароля API, как в админ панели так и в базе данных.
      - Возможность задать комиссию для покупателя
      - Просмотр успешных платежей в админ панели магазина
      - Если пользователь прервал оплату, заказ все равно создастся
      - Возможность оплаты из личного кабинета
      - Возможность получение ссылки на оплату в письме
      - Возможность использования инструкции к оплате при оформлении заказа (использование переменных таких как «номер заказа», «ссылка на оплату», «сумма заказа», «комиссия» и html тегов)
      - Возможность использования инструкции к оплате в письме о заказе (использование переменных таких как «номер заказа», «ссылка на оплату», «сумма заказа», «комиссия» и html тегов)
      - Уведомление администратора при получении оплаты
      - Уведомление покупателя при получении оплаты магазином
      - Возможность добавления комментария для дальнейших действий в письмо о успешной оплате(использование переменных таких как «номер заказа», «сумма заказа», «комиссия» и html тегов)
      - Возможность повторно выслать ссылку на оплату из админ панели
      - Возможность добавить кнопку «Оплатить позже» при оформлении заказа
      - На странице успешной оплаты, если платеж уже поступил вывод текста об успешной оплате, если платеж не поступил или отказ от оплаты вывод “После того как деньги поступят на наш счет, статус Вашего Заказа # изменится” или возможно в настройках задать Ваш текст.
      - Возможность изменить текст на странице успешной оплаты (использование переменных таких как «номер заказа», «сумма заказа», «комиссия» и html тегов)
      - При оплате сразу после оформления заказа на страницах успешной и ожидаемой оплаты вывод текста, что заказ создан.
      - На страницах успешной и неуспешной оплаты зарегистрированным пользователям выводятся ссылки на личный кабинет.
      - Возможность задания максимальной суммы заказа при котором метод не будет выводиться.
      - Возможность задания минимальной суммы заказа при которой метод не будет выводиться.
      - Возможность изменения названия метода оплаты.
      - Возможность использования html тегов в названии метода оплаты (например вставлять картинки)
      - Возможность изменить текст на странице не удачной оплаты (использование переменных таких как «номер заказа», «ссылка на оплату», «сумма заказа», «комиссия» и html тегов)
      - Возможность совершать предоплату от суммы заказа или фиксированную стоимость
      - Поддержка Мульти-языка
      - Поддержка Мульти-магазина
      - Возможность создавать заказ до оплаты, или создавать только после оплаты (задается в настройках модуля)
      Демо
      http://en.opencart2.pe-art.ru/
      админ панель http://en.opencart2.pe-art.ru/admin/index.php?route=payment/rbacquiring
      demo
      demo
      Протестировано
      Opencart 2.0.x - 2.1.x
      Ocstore 2.1.x
      Возможна реализация для 1.5.х, 2.3, 3.0 под заказ
      Услуга установки под ключ *
      Цена 4900р
      *включает полную интеграцию модуля как на стороне сервера так и на стороне банка,а также полное ведение общения с тех. поддержкой банка вплоть до приема реальных платежей
       
      Смотрите также другие модули по ссылке
      Добавил ashap Добавлено 26.01.2016 Категория Платежные системы Системные требования Сайт разработчика https://store.pe-art.ru/ Старая цена Метод активации Автоматическая активация Ioncube Loader Нет OpenCart 2.1
      2.0 ocStore 2.1 OpenCart.Pro, ocShop Opencart.pro 2.1
      OcShop 2.0.3.х Обращение к серверу разработчика Нет  
    • By SergeyPechenyuk
      Скачать/Купить дополнение


      OC-Store: Ship2Pay
      Для чего нужен модуль?

      Данный модуль предназначен для определения соответствия оплаты к доставке с последующим выводом соответствия при оформлении заказа. Как это работает?

      Например, у Вас есть 2 метода доставки: курьер и отправка почтой, а также есть 2 метода оплаты: наличными курьеру и наложенный платеж. У Вас же стоит задача привязать доставку курьером к методу оплаты "наличными курьеру" и при отправке почтой к оплате наложенным платежом. Текущий функционал Opencart не дает Вам такой возможности. Пользователю, делающему заказ, будут выведены все виды оплаты вне зависимости от выбранного метода доставки товара. Для добавления требуемого Вам функционала поможет модуль "OC-Store: Ship2Pay". Установка модуля для Opencart 2.x.

      1. Загрузить файл ocstore_ship2pay_1_0_for_opencart_2_x.ocmod.zip через стандартный механизм установки дополнений.
      2. В менеджере дополнений нажать кнопку "Обновить" для перестройки кэша дополнений.
      3. В менеджере модулей произвести установку модуля "OC-Store: Ship2Pay".
      4. Настроить модуль "OC-Store: Ship2Pay".
      5. Начать пользоваться бесплатно. Установка модуля для Opencart 1.5.x.

      1. Перед установкой модуля на сервере должен стоять vqmod
      2. Загрузить содержимое файла ocstore_ship2pay_1_0_for_opencart_1_5_x.ocmod.zip в корневую папку сайта.
      3. В менеджере модулей произвести установку модуля "OC-Store: Ship2Pay - Opencart 1.5.x".
      4. Настроить модуль "OC-Store: Ship2Pay - Opencart 1.5.x" С какими версиями Opencart работает модуль?

      Модуль "OC-Store: Ship2Pay" работает с Opencart 2.x. Протестировано на дефолтном шаблоне и journal2. Версия под Opencart 1.5.x протестировано на дефолтном шаблоне Будет ли версия модуль под Opencart 1.5.x?

      Тут говорим огромное спасибо MawBear , который попросил доработать версию под 1.5.4.1 Добавил SergeyPechenyuk Добавлено 27.01.2016 Категория Модули  
    • By fircus
      Скачать/Купить дополнение


      Оплата через portmone.com
      Скопируйте файлы из папки upload в корень вашего магазина.
      Если вы используете не стандартную тему, переименуйте папку catalog->view->theme->default на название вашей темы
      После этого модуль появится в админке
      Оплата производится в гривнах
      **************************************************************************************
      Copy files from upload folder into your site
      If you use not a default theme rename the folder catalog->view->theme->default at name of your theme
      After that the module will appear in the admin panel
      Добавил fircus Добавлено 18.11.2015 Категория Платежные системы  
  • Recently Browsing   0 members

    No registered users viewing this page.

×

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.