<?php
/*
* Платёжная система LIQPAY
*/
class Shop_Payment_System_Handler16 extends Shop_Payment_System_Handler
{
// Логин в системе LiqPay
protected $_mrh_login = "your_id";
// Пароль - используется интерфейсом инициализации оплаты
protected $_mrh_pass1 = "your_pass";
// Код валюты в магазине HostCMS в двнном случае это созданная UAH
protected $_liqpay_currency = 4;
// Коэффициент перерасчета при оплате ROBOKASSA
protected $_coefficient = 1;
/*
* Метод, запускающий выполнение обработчика
*/
public function execute()
{
parent::execute();
$this->printNotification();
return $this;
}
protected function _processOrder()
{
parent::_processOrder();
// Установка XSL-шаблонов в соответствии с настройками в узле структуры
$this->setXSLs();
// Отправка писем клиенту и пользователю
$this->send();
return $this;
}
public function paymentProcessing()
{
// Пользователь перешел на страницу с уведомлением о статусе заказа
if (isset($_REQUEST['operation_xml']) && isset($_REQUEST['Culture']))
{
$this->ShowResultMessage();
return TRUE;
}
// Пришло подтверждение оплаты, обработаем его
if (isset($_REQUEST['order_id']))
{
$this->ProcessResult();
return TRUE;
}
}
public function getSumWithCoeff()
{
return Shop_Controller::instance()->round(($this->_robokassa_currency > 0
&& $this->_shopOrder->shop_currency_id > 0
? Shop_Controller::instance()->getCurrencyCoefficientInShopCurrency(
$this->_shopOrder->Shop_Currency,
Core_Entity::factory('Shop_Currency', $this->_liqpay_currency)
)
: 0) * $this->_shopOrder->getAmount());
}
public function getNotification()
{
$sRoboSum = $this->getSumWithCoeff();
ob_start();
$xml = "<request>
<version>1.2</version>
<merchant_id>{$this->_mrh_login}</merchant_id>
<result_url>{$handler_url}</result_url>
<server_url>{$handler_url}</server_url>
<order_id>{$this->_shopOrder->invoice}</order_id>
<amount>{$sRoboSum}</amount>
<currency>UAH</currency>
<description>Order #{$this->_shopOrder->invoice}</description>
<exp_time>7</exp_time>
<default_phone></default_phone>
<pay_way>card,liqpay,delayed</pay_way>
<goods_id></goods_id>
</request>";
?>
<h1>Оплата через систему LiqPay</h1>
<p>
<a href="http://www.liqpay.com/" target="_blank">
<img src="http://www.poppers.com.ua/images/liqpay.gif" border="0" alt="Система электронных платежей">
</a>
</p>
<p>Счет <strong>№ <?php echo $this->_shopOrder->invoice?></strong>, сумма к оплате составляет <strong><?php echo $this->_shopOrder->sum()?></strong></p>
<p>Для оплаты нажмите кнопку "Оплатить".</p>
<p style="color: rgb(112, 112, 112);">
Внимание! Нажимая «Оплатить» Вы подтверждаете передачу контактных данных на сервер LIQPAY для оплаты.
</p>
<form action="<?php echo 'https://www.liqpay.com/?do=clickNbuy';?>" method="POST">
<input type="hidden" name="operation_xml" value="<?php echo base64_encode("{$xml}");?>">
<input type="hidden" name="signature" value="<?php echo base64_encode(sha1("{$this->_mrh_pass1}"."{$xml}"."{$this->_mrh_pass1}",1));?>">
<input type="submit" value="Оплатить счет № <?php echo $this->_shopOrder->invoice?> на сумму: <?php echo $this->_shopOrder->sum()?>">
</form>
<?php
return ob_get_clean();
}
public function getInvoice()
{
return $this->getNotification();
}
// Вывод сообщения об успешности/неуспешности оплаты
function ShowResultMessage()
{
}
/*
* Обработка статуса оплаты
*/
function ProcessResult()
{
}
}
Эта часть работает, дальше есть проблема, так как я новичок в HostCMS не могу понять как организовать проверку ответа сервера и изменение статуса заказа.
LiqPay отдает ответ методом POST в двух переменных: operation_xml и signature (по аналогии с запросом)
для того, чтоб добраться до самого тела xml, его необходимо декодировать:
$xml_decoded=base64_decode($xml);
где $xml есть содержимое operation_xml переданной нам
там будет XML следующего вида:
$xml=”<response>
<version>1.2</version>
<merchant_id></merchant_id>
<order_id> ORDER_123456</order_id>
<amount>1.01</amount>
<currency>UAH</currency>
<description>Comment</description>
<status>success</status>
<code></code>
<transaction_id>31</transaction_id>
<pay_way>card</pay_way>
<sender_phone>+3801234567890</sender_phone>
<goods_id>1234</goods_id>
<pays_count>5</pays_count>
</response>";
Помогите закончить модуль, уверен, он не только мне нужен.
