Как написать модуль оплаты для Minishop2
Привет всем :). Я не с первого раза разобрался как написать модуль оплаты для Minishop2. Поэтому решил сделать небольшую инструкцию. Не во всем правда разобрался, но надеюсь в комментариях подскажут.
Для модуля оплаты нужны всего 2 файла:
1) /core/components/minishop2/custom/payment/you_name.class.php
В нем минишоп вызывает метод
2) /assets/components/minishop2/payment/you_name.php
На этот файл приходит ответ об успешной оплате. После проверки ответа просто подключаем минишоп
С упаковкой в компонент несколько сложнее. Я тут не разобрался как закинуть эти файлы в папки минишопа. В build.transport.php добавил
Я делал модуль оплаты для paykeeper.ru/. У них нельзя отправить на оплату ссылкой с GET параметрами. Предлагают загружать POST форму на сайт. Пришлось писать сниппет, загружающий эту форму, и редиректить на него с минишопа.
Для примера код моего компонента mspPayKeeper
https://github.com/touol/mspPayKeeper
Если разобраться то все легко, но как часто бывает нет ни описаний ни прмеров кода и приходиться идти и искать то не знаю что.
Может кто-нибудь выложит код бесплатного компонента оплаты, чтоб можно было посмотреть и разобраться как лучше сделать?
Для модуля оплаты нужны всего 2 файла:
1) /core/components/minishop2/custom/payment/you_name.class.php
В нем минишоп вызывает метод
public function send(msOrder $order)
{
$link = $this->getPaymentLink($order);
return $this->success('', array('redirect' => $link));
}
Получает ссылку 'redirect' => $link и по этой ссылке яваскрипт минишопа отправляет на страницу провайдера оплаты. В стандартном варианте ссылка содержит GET параметры такие как сумма, номер заказа, код магазина и т.д.2) /assets/components/minishop2/payment/you_name.php
На этот файл приходит ответ об успешной оплате. После проверки ответа просто подключаем минишоп
$miniShop2 = $modx->getService('minishop2');
$miniShop2->loadCustomClasses('payment');
и ставим статус оплаченif(!$order = $modx->getObject('msOrder', array('num'=>$_POST['orderid']))){
echo "Error! order not found.";
exit;
}
$miniShop2->changeOrderStatus($order->id, 2);
С упаковкой в компонент несколько сложнее. Я тут не разобрался как закинуть эти файлы в папки минишопа. В build.transport.php добавил
$root = dirname(dirname(__FILE__)) . '/';
$vehicle->resolve('file', array(
'source' => $root . 'assets/components/minishop2/payment',
'target' => "return MODX_ASSETS_PATH . 'components/minishop2/';",
));
$vehicle->resolve('file', array(
'source' => $root . 'core/components/minishop2/custom/payment',
'target' => "return MODX_CORE_PATH . 'components/minishop2/custom/';",
));
unset($root);
Но при удалении компонента удаляются и эти папки минишопа :(. Можно закидывать эти файлы в папки минишопа после установки компонента ресолвером, но не знаю как лучше. Подскажите плиз.Я делал модуль оплаты для paykeeper.ru/. У них нельзя отправить на оплату ссылкой с GET параметрами. Предлагают загружать POST форму на сайт. Пришлось писать сниппет, загружающий эту форму, и редиректить на него с минишопа.
Для примера код моего компонента mspPayKeeper
https://github.com/touol/mspPayKeeper
Если разобраться то все легко, но как часто бывает нет ни описаний ни прмеров кода и приходиться идти и искать то не знаю что.
Может кто-нибудь выложит код бесплатного компонента оплаты, чтоб можно было посмотреть и разобраться как лучше сделать?
Поблагодарить автора
Отправить деньги
Комментарии: 10
Использовать custom папку минишопа это плохая практика, в минишопе с четвертой версии появились такие понятия как плагины.
У них нельзя отправить на оплату ссылкой с GET параметрами. Предлагают загружать POST форму на сайтОчень в этом сомневаюсь, иначе как например пользователю у которого прервался интернет/выключили свет продолжить оплату? Если действительно так, то печально и стоило бы написать в ТП paykeeper
Дополню, что не плагины, а сервисы. А вот тут о том, как они подключаются. docs.modx.pro/components/minishop2/development/service/connection
Как зарегистрировать сервис при установке компонента? Чтоб потом не сломалось.
Ну а ссылка зачем? Читайте внимательно.
Не поверите читал :). Заснуть $miniShop2->addService в ресолвер https://github.com/touol/mspPayKeeper/blob/master/_build/resolvers/resolve.tables.php
после case xPDOTransport::ACTION_INSTALL:?
после case xPDOTransport::ACTION_INSTALL:?
Зачем это добавлять в резолвер, который по названию вообще занимается созданием таблиц?
У меня это отдельный резолвер, в котором происходит только регистрация сервиса при установке. И важное замечание — удаление сервиса при удалении пакета. Чтобы потом не чистить руками хлам после удаление пакетов горе-авторов (случалось уже не единожы, речь не о вас) :)
gist.github.com/Alroniks/dc1c03ac87bc7e5ff92afe3011227f54
У меня это отдельный резолвер, в котором происходит только регистрация сервиса при установке. И важное замечание — удаление сервиса при удалении пакета. Чтобы потом не чистить руками хлам после удаление пакетов горе-авторов (случалось уже не единожы, речь не о вас) :)
gist.github.com/Alroniks/dc1c03ac87bc7e5ff92afe3011227f54
Очень в этом сомневаюсь, иначе как например пользователю у которого прервался интернет/выключили свет продолжить оплату? Если действительно так, то печально и стоило бы написать в ТП paykeeperВозобновить оплату можно. Минишоп при оплате и при возобновлении отправляет на страницу со снипетом который POST форму подгружает.
Это какое то откровенное извращение
Какая-то заметка получилась сумбурная. Куча примеров кода без объяснения и, видимо, местами без понимания всего процесса. Но начало хорошее, стоит поглубже разобраться и дело пойдет.
Убрал кучу кода из заметки :). Потратил час, поставил гит и и залил код на гитхаб. Так лучше выглядит :).
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.