Помогите дописать модуль приема LiqPay

#
Помогите дописать модуль приема LiqPay
<?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);">
      Внимание! Нажимая &laquo;Оплатить&raquo; Вы подтверждаете передачу контактных данных на сервер 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>";


Помогите закончить модуль, уверен, он не только мне нужен.
#
Re: Помогите дописать модуль приема LiqPay
Ответ от ПС надо разбирать в ТДС "Интернет-магазин Корзина".
В коде или в настройках - зависит от того, какие действия должны предприниматься по результатам разбора.
Заказов не беру. Консультирую редко.
#
Re: Re: Помогите дописать модуль приема LiqPay
нужно декодировать полученную переменную: operation_xml
достать из xml следующие поля: order_id amount status
Если status == success
Проверить наличие заказа с order_id, если таковой присутствует и не оплачен, проверить amount если совпадает, то проверить подпись, если все ок изменить статус заказа на оплачен

Почти правильно описал последовательность

у меня лишь несколько вопросов:
1. каким образом можно разобрать этот декодированный XML средствами HostCMS?
2. каким образом после всех верификаций изменить статус заказа?
#
Re: Помогите дописать модуль приема LiqPay
и
3. Каким образом запросить данные о заказе по номеру, если таковой есть?
Авторизация