Как написать модуль оплаты для 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
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Очень в этом сомневаюсь, иначе как например пользователю у которого прервался интернет/выключили свет продолжить оплату? Если действительно так, то печально и стоило бы написать в ТП paykeeper
после case xPDOTransport::ACTION_INSTALL:?
У меня это отдельный резолвер, в котором происходит только регистрация сервиса при установке. И важное замечание — удаление сервиса при удалении пакета. Чтобы потом не чистить руками хлам после удаление пакетов горе-авторов (случалось уже не единожы, речь не о вас) :)
gist.github.com/Alroniks/dc1c03ac87bc7e5ff92afe3011227f54