Написал компонент miniPayment

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

Компонент состоит из 3х составляющих:
  • Операция — собственно, платеж
  • Метод оплаты — любой произвольный метод оплаты. Тут нужно указать сниппет (или 2) для отправки юзера на сервис и приема информации.
  • Статус — статус платежа, можно добавлять любые произвольные

Как работает

На сайт выводится форма, в ней возможные методы оплаты. Юзер (или вы) заполянет нужные данные, сумму и жмет «отправить». Компонент проверяет выбранный метод оплаты, извлекает сниппеты для его обработки, создает запись в таблице платежей и отдает все сниппету.
Дальше — на ваше усмотрение. Обычно юзер уходит на удаленный севис, и там все оплачивает.

В сервисе настроено, куда присылать уведомления об оплате — там должен быть второй сниппет, который проверит данные и перелючит статус.

Форма платежа может быть любой, обязательно только отправить method. Дальнейший роцесс сохранения операции можно изменить плагином (см. ниже). Предусмотрено поле data, типа text для произвольных значений.

В общем, сделано все максимально гибко и расширяемо в любые стороны.

Плагины и сниппеты

Платежных сервисов очень много и универального механизма работы нет. У Robokassa одно, у Qiwi другое, у Paypal третье.
Поэтому — вся работа с сервисами вынесена в сниппеты, которые придется написать самостоятельно. Обычно, сервисы дают понятные примеры для работы.

В процессе работы с платежом вызываются 4 события:
  • mpOnBeforeOperationCreate — перед созданием операции платежа
  • mpOnOperationCreate — после создания операции
  • mpOnBeforeOperationUpdate — перед обновлением платежа (и переключении статуса тоже)
  • mpOnOperationUpdate — после обновления платежа
Во все события передается операция платежа, и вы можете делать с ней все, что угодно. Рассылать письма, менять статус, благодарить заплатившего юзера — дело ваше.

В комплекте идет простейший плагин для примера. Он не перезаписывается обновлениями, так что — можно смело его редактировать. Обратите внимание на то, что по умолчанию он отключен.

Как сделан

Компонент построен на базе обновленного modExtra. Все, что можно, сделано через «классные» процессоры. В комплекте 2 языка: родной и английский.
У сниппета есть параметры, при установке создаются события для плагинов и другие нужности. В общем, полноценный, серьезный компонент, по всем правилам.

Многие идеи позаимствованы из моего miniShop, но все полностью написано заново, чтобы не тащить старый кривой код.

Заключение

В репозитории новой разработки пока нет, и не ясно, будет ли. С одной стороны, компонент полностью готов и отлично работает, а с другой — меня задолбают вопросами "а как мне подключить %servicename%"?

Кому нужно — найдет на Github исходный код, соберет пакет и установит. А потом напишет простенький платежный сниппет и изменит плагин, по своему усмотрению.

Выходит своеобразная проверка квалификации.

Следующая заметка
PhpHypher - расстановка переносов


Комментарии ()

  1. Alex Vakhitov 08 октября 2012, 13:23 # 0
    Отличный компонент, спасибо огромное
    1. seigiard@gmail.com 15 октября 2012, 13:26 # 0
      Василий, это очень круто :)
      Спасибо за модуль, как-раз появилась необходимость поизучать методы оплаты.
      1. Максим Франц 16 октября 2012, 07:58 # 0
        Если используется miniShop, этот функционал уже есть. Если не используется miniShop… Можно полюбопытствовать кто Целевая аудитория этого компонента? А то как то ограничено себе представляю. Платежи-товар-магазин. Если магазин на revo то miniShop, а там это уже есть.
        1. Василий Наумкин 16 октября 2012, 08:23 # 0
          Написано было под заказ, для донейтов.

          Также можно это прикрутить к любому нынешнему/будущему магазину на Рево. Да к чему угодно.

          Когда буду переделывать miniShop, этот код войдет в него. Ибо тут все написано заново, и гораздо лучше, чем в MS.
        2. Виталий Батушев 05 ноября 2012, 05:30 # 0
          Возникла непонятка с обновлением статуса. 17 строка сниппета miniPayment:
          case 'updateOperation': $output = $modx->miniPayment->updateOperation($scriptProperties['id'], $scriptProperties['status']); break;

          Непонятно почему. Ведь если мне агрегатор сообщает о проведении операции, он посылает мне запрос с POST и по идее мне нужно в этом месте слушать $_REQUEST или $_POST, а не параметры сниппета. Или я не прав?
          1. Vlad Pthead 08 октября 2013, 13:54 # 0
            Так же, с процессе работы с платежем вызываются 4 события:
            Раздел «Планшеты и сниппеты», опечатка)
            Компонент еще не попробовал, но судя по предназначению — обязательно пригодиться, спасибо!
            Добавление новых комментариев отключено.