Подключение нового платежного агрегатора

Файлы платежных системы (пс) находятся в каталоге /engine/modules/billing/payments/:

  • ../payments/name/ - каталог, содержащий файлы каждой отдельной пс
  • info.ini - файл конфигурации
  • adm.settings.php - основной файл интеграции

По желанию можно установить свою иконку - /engine/skins/billing/payments/name.png

info.ini

[info]
version=1.0
title=Название
desc=Краткое описание платежной системы

adm.settings.php

Данный файл содержит класс Payment со следующими обязательными методами:

Class Payment
Settings( ... )

возвращает массив настроек для редактирования в админ.панели

/*
   $config - массив с текущими настройками ПС
*/
function Settings( $config ) 
{
  $Form = array();

  $Form[] = array("Параметр #1:", "Описание параметра #1", "<input name='save_con[param1]' type='text' value='" . $config['param1'] ."'>" );
  $Form[] = array("Параметр #2:", "Описание параметра #2", "<input name='save_con[param2]' type='text' value='" . $config['param2'] ."'>" );

  return $Form;
}
Form( ... )

возвращает форму с данными платежа для отправки на сайт ПС

/*
   $id - id квитанции, уникален для каждой операции
   $config- настройки ПС из админ.панели
   $invoice - массив с квитанцией на оплату (таблица бд dle_billing_invoice)
   $currency - валюта платежа (после склонения)
   $desc - описание платежа
*/
function form( $id, $config, $invoice, $currency, $desc ) 
{
   return '
   "<form method="post" id="paysys_form" action="https://merchant.webmoney.ru/lmi/payment.asp">
   "<input name="lmi_payment_desc" value="'.$desc.'" type="hidden">
   "<input name="lmi_payment_no" value="'.$id.'" type="hidden">
   "<input name="lmi_payment_amount" value="'.$invoice['invoice_pay'].'" type="hidden">
   "<input name="lmi_sim_mode" value="0" type="hidden">
   "<input name="lmi_payee_purse" value="'.$config['wm'].'" type="hidden">
   "<input type="submit" class="bs_button" value="Оплатить">
   "</form>';
}
Check_id( ... )

метод должен выбрать ID квитанции из данных, полученных от сервера ПС

/*
   $data - массив с данными, полученными от сервера ПС
*/
function check_id( $data ) 
{
  return $DATA['m_orderid'];
}
Check_ok( ... )

метод выводит сообщения на запрос ПС о статусе сайта в случаи успешной оплаты

/*
   $data - массив с данными, полученными от сервера ПС
*/
function check_ok( $data )
{
  header( $_SERVER['SERVER_PROTOCOL'] . ' HTTP 200 OK', true, 200 );

  echo $DATA['m_orderid'] . '|success';

  return true;
}
Check_out( ... )

метод проверяет принятые от ПС данные. В случае успешной проверки - возвращает 200, в ином случае - сообщение об ошибке

/*
   $data - массив с данными, полученными от сервера ПС
   $config - настройки ПС из админпанели
   $invoice - массив с квитанцией на оплату (таблица бд dle_billing_invoice)
*/
function check_out( $data, $config, $invoice ) 
{
  if (isset($data['m_operation_id']) && isset($data['m_sign']))
  {
    $arHash = array($data['m_operation_id'],
        $data['m_operation_ps'],
        $data['m_operation_date'],
        $data['m_operation_pay_date'],
        $data['m_shop'],
        $data['m_orderid'],
        $data['m_amount'],
        $data['m_curr'],
        $data['m_desc'],
        $data['m_status'],
        $config['secret_key']);

    $sign_hash = strtoupper(hash('sha256', implode(':', $arHash)));

    if ($data['m_sign'] == $sign_hash && $data['m_status'] == 'success')
    {
      return 200;
    }
    return $data['m_orderid'].'|error';
  }

  return 'Data|error';
}
Check_payer_requisites( ... )

метод выбирает реквизиты покупателя из массива данных от ПС

/*
   $data - массив с данными, полученными от сервера ПС
*/
function check_payer_requisites( $data )
{
    return 'WMID' . $data["LMI_PAYER_WM"];
}