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

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

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

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


info.ini

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


adm.settings.php

Данный файл содержит класс PaymentName, реализующий интерфейс IPayment:

Class PaymentName implements IPayment


Settings( ... )

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

/*
   $config - массив с текущими настройками ПС
*/
public function Settings( array $config ) : array
{
  $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 - описание платежа
*/
public function Form( int $id, array $config_payment, array $invoice, string $currency, string $desc ) : string
{
   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 - массив с данными, полученными от сервера ПС
*/
public function check_id( array $result ) : int
{
  return $DATA['m_orderid'];
}


Check_ok( ... )

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

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

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

  return true;
}


Check_out( ... )

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

/*
   $data - массив с данными, полученными от сервера ПС
   $config - настройки ПС из админпанели
   $invoice - массив с квитанцией на оплату (таблица бд dle_billing_invoice)
*/
public function check_out( array $result, array $config_payment, array $invoice ) : string|bool
{
  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 true;
    }
    return $data['m_orderid'].'|error';
  }

  return 'Data|error';
}


Check_payer_requisites( ... )

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

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