Добавление оплаты LiqPay в UMI.CMS
Сразу оговорюсь, что часть статьи была позаимствована с api.docs.umi-cms.ru.
Добавления типа данных оплаты
Для начала в корень сайта положите из вложения файл и запустите. После того, как скрипт отработает, в UMI, в модуле шаблоны данных появится новый тип оплаты:
Далее нужно перейти в редактирование способа оплаты и добавить несколько новых полей:
- Приватный ключ | public_key
- Приватный ключ | private_key
- Включить режим sandbox (отладка, тестовые платежи) | sandbox_status
- Описание | description
- Валюта | currency
- Тип оплаты | pay_way
Для того, чтобы создать новый метод оплаты в модуле интернет-магазин, нужно добавить класс платежной системы. Реализация класса платёжной системы.
В папке /classes/modules/emarket/classes/payment/systems/ создать файл liqpay.php. В файл добавить код:
<?php class liqpayPayment extends payment { public function validate() { // Запрещаем оплату с помощью , // если сумма заказа меньше 1 грн. $sum = (float) $this->order->getActualPrice(); if($sum < 1) { return false; } return true; } public function process($template = null) { $order = $this->order; $order->order(); $order->setPaymentStatus('initialized'); // Ставим заказу статус "инициализирована оплата" // Загружаем API класс LiqPay objectProxyHelper::includeClass('emarket/classes/payment/api/', 'LiqPay'); $liqpay = new LiqPay($this->getValue('public_key'), $this->getValue('private_key')); $sandbox_status = 0; if($this->getValue('sandbox_status')) $sandbox_status = 1; $domain = $_SERVER['HTTP_HOST']; $html = $liqpay->cnb_form(array( 'version' => '3', 'sandbox' => $sandbox_status, 'amount' => $order->getActualPrice(), 'currency' => $this->getValue('currency'), 'description' => $this->getValue('desc'), 'pay_way' => $this->getValue('pay_way'), 'order_id' => $order->getId(), 'type' => 'buy', 'result_url' => $domain . '/emarket/purchase/result/successful/?order_id='.$order->getId().'&order_type=liq_pay', )); $param = array(); $param['form_html'] = $html; list($templateString) = def_module::loadTemplates("emarket/payment/liqpay/".$template, "form_block"); return def_module::parseTemplate($templateString, $param); } 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(); } }; ?>
В папке /classes/modules/emarket/classes/payment/ найти папочку api, если нет, то создать и положить в нее файл LiqPay.php.
Далее, в корне сайта положить файл liqpay-server.php, это API файл для сервиса LiqPay, который примет пост запрос от сервиса LiqPay и если заказ будет успешно оплачен, то изменит статус заказа на «готов», а статус оплаты на «принята».
Очень важно, в строке $pay = umiObjectsCollection::getInstance () ->getObject (1272), указать ваш ID способа оплаты из модуля интернет-магазин.
<?php include 'standalone.php'; if(isset($_POST['signature']) && isset($_POST['data'])) { // Указать сюда id способа оплаты модуля ИМ, // чтобы вытянуть $public_key и $private_key $pay = umiObjectsCollection::getInstance()->getObject(1272); $public_key = $pay->getValue('public_key'); $private_key = $pay->getValue('private_key'); $liq_pay_data = json_decode(base64_decode($_POST['data']), TRUE); $sign = base64_encode(sha1( $private_key . $_POST['data'] . $private_key, 1)); if($liq_pay_data['status'] == 'sandbox' or $liq_pay_data['status'] == 'success') { // Обязательно, иначе класс order не подключится!!! cmsController::getInstance()->getModule("emarket"); $order = order::get($liq_pay_data['order_id']); $order->setOrderStatus('ready'); $order->setPaymentStatus('accepted'); } } ?>
Далее в файл «payment.xsl», расположенный по адресу /templates/demodizzy/xslt/modules/emarket/purchase добавьте шаблон:
<xsl:template match="purchasing[@stage = 'payment'][@step = 'liqpay']"> <xsl:value-of select="form_html" disable-output-escaping="yes" /> <xsl:call-template name="form-send" /> </xsl:template>
Готово с программированием, можно приступить к настройке магазина
Создание магазина в LiqPay и добавление способа оплаты в UMI.CMS.
Для создания магазина нужно перейти на сайт liqpay, авторизоваться и создать магазин:
В настройках магазина укажите поля «Наличие order_id» и «URL уведомлений сервер-сервер.
URL»: http[s]://ваш_сайт/liqpay-server.php.
Далее перейти в UMI, модуль интернет магазин и добавить новый способ оплаты LiqPay и заполнить поля приватный и публичный ключ, включить песочницу:
На этом пожалуй и все. Хочу оговориться, что данный метод работает на UMI.CMS версии 2.9.7. Думаю, что в новых версиях координально ничего не поменяли 🙂
Готовый код можно сказать umi-liq-pay и найти код на GitHub