Добавление оплаты 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


