Оплата

Модуль относится к части CMS «Интернет магазин» и может быть установлен опционально.

Модуль описывает работу с платежными системами. Используется в других модулях в виде подключения. В стандартной комплектации DIAFAN.CMS «Оплата» подключена к корзине интернет-магазина и балансу пользователя.

Подключение

Подключаемая часть – файл modules/payment/payment.inc.php. В нем описан класс Payment_inc. В модуле к объекту класса можно обратиться через переменную $this->diafan->_payment. Экземпляр класса создается при первом вызове переменной.

Методы

array get_all ([string $where = '']) – Получает список платежных систем.

  • string $where: условие для SQL-запроса

Пример:

$rows = $this->diafan->_payment->get_all();
print_r($rows);
// выведет:
//(
// [0] => Array
//     (
//         [id] => 1
//         [name] => Наличными курьеру
//         [text] => Заказ необходимо оплатить курьеру на руки наличными
//         [payment] =>
//     )
//
// [1] => Array
//     (
//         [id] => 3
//         [name] => WebMoney
//         [text] => Используйте мгновенную оплату заказа через систему WebMoney. Это ускорит доставку Вашего заказа.
//         [payment] => webmoney
//     )
// ...
//)

array get (integer $id) – Возвращает название метода оплаты и его тип по ID.

  • integer $id: ид метода оплаты

Пример:

$row = $this->diafan->_payment->get(3);
print_r($rows);
// выведет:
//(
// [name] => WebMoney
// [payment] => webmoney
//)

integer add_pay (integer $element_id, string $module_name, integer $payment_id, float $summ) – Добавление записи о новом платеже в историю платежей, возвращает ID записи.

  • integer $element_id: номер элемента, для которого будет совершен платеж
  • string $module_name: модуль, осуществляющий запрос
  • integer $payment_id: ID способа оплаты
  • float $summ: сумма платежа

Пример:

// добавляет платеж на заказ в интеренет магазине №12 на сумму 300 руб. через платежную систему WebMoney (ID=3, из предыдущего примера)
$pay_id = $this->diafan->_payment->add_pay(12, 'cart', 3, 300);
echo
'Номер платежа: '.$pay_id;
// выведет:
// Номер платежа: 13

integer update_pay (integer $element_id, string $module_name, integer $payment_id, float $summ) – Добавление или обновление записи о платеже в историю платежей, возвращает ID записи.

  • integer $element_id: номер элемента, для которого будет совершен платеж
  • string $module_name: модуль, осуществляющий запрос
  • integer $payment_id: ID способа оплаты
  • float $summ: сумма платежа

Пример:

// изменяем сумму платежа из предыдущего примера на сумму 400 руб.
$pay_id = $this->diafan->_payment->update_pay(12, 'cart', 3, 400);
echo
'Номер платежа, данные которого изменены: '.$pay_id;
// выведет:
// Номер платежа, данные которого изменены: 13

array get_pay (string $element_id, string $module_name, [string $code = '']) – Генерирует данные для второго шага в оформлении заказа: оплата.

  • string $element_id: ID заказа
  • string $module_name: модуль, осуществляющий запрос
  • string $code: код доступа

Пример:

// получит данные для оплаты заказа №6
$result = $this->diafan->_payment->get_pay(6, 'cart');

array check_pay (integer $id, string $payment) – Проверяет наличие платежа, используется в конкретном методе оплаты.

  • integer $id: номер платежа
  • string $payment: платежная система

Пример:

// если платежа нет в базе данных, то выполнение скрипта остановиться и пользователь увидит ошибку 404
$pay = $this->diafan->_payment->check_pay(12, 'webmoney');

void success (array $pay, [string $type = 'all']) – Действия при успешной оплате.

  • array $pay: данные платежа
  • string $type: тип операции: all - все действия, pay - оплата, redirect - редирект на страницу платежа

Пример:

// если платеж успешно проведен, то
if(проверка успешного проведения платежа)
{
    
$this->diafan->_payment->success($pay);
}

void fail (array $pay) – Действия при неудачной оплате.

  • array $pay: данные платежа

Пример:

// если платеж успешно проведен, то
if(! проверка успешного проведения платежа)
{
    
$this->diafan->_payment->fail($pay);
}

array default_id () – Возвращает идентификатор дефолтного метода оплаты.

Структура бэкенда

К модулю можно подключить неограниченное количество бэкендов – модулей для работы с конкретными платежными системами.

Для этого нужно разработать несколько файлов станадартной структуры, учитывающие особенности платежной системы и положить папку с этими файлами в папку payment/backend. Далее создать метод оплаты, в котором в качестве платежной системы указать созданный бэкенд.

Платежный модуль (или бэкенд) должен иметь уникальное название латинскими буквами (по примеру robokassa, webmoney, balance и др.). Для примера будем использовать название paymethod.

В папке payment/backend/paymethod могут находиться следующий файлы:

  • payment.paymethod.php
  • payment.paymethod.admin.php
  • payment.paymethod.model.php
  • payment.paymethod.view.php

Это не обязательная структура платежного модуля. Нужно использовать только необхоимые файлы. Кроме того, в платежный модуль можно добавлять свои файлы любой другой структуры.

Рассмотрим структуру стандартных файлов

payment.paymethod.php

Файл, который обрабатывает прямые запросы к платежному модулю. Обычно эти запросы указываются в настройках на сайте платежной системы. Прямой доступ к этому файлу идет по ссылке: http://site.ru/payment/get/paymethod/. Можно передать дополнительные аргументы, которые будут доступны через переменную $_GET["rewrite"].

Пример:

// http://site.ru/payment/get/paymethod/success/
$_GET["rewrite"] = 'paymethod/success';

// http://site.ru/payment/get/paymethod/fail/
$_GET["rewrite"] = 'paymethod/fail';

Таким образом можно определять какое действие обрабатывать.

Чаще всего платежные системы предлагают два действия: успешное зачисление платежа (success) и неудачная попытка оплаты (fail). При этом передаются номер платежа (например, в переменной $_REQUEST["id"]) и какие-то данные для проверки валидности запроса (алгоритм предоставляется платежной системой).

Для начала нужно найти платеж в базе данных:

$pay = $this->diafan->_payment->check_pay($_REQUEST["id"], 'paymethod');

Если платеж не будет найден, то выполнение скрипта прерветься и пользователь увидит ошибку 404.

Далее, если платеж неудачный, то вызываем функцию fail().

$this->diafan->_payment->fail($pay);

Если платеж успешный, то выполняем валидацию данных по предоставленному системой алгоритму и зачисляем средства на счет.

if(проверка пройдена)
{
    
$this->diafan->_payment->success($pay);
}

Настройки платежного метода, заданные администратором сайта доступны через переменную $pay["params"].

Пример:

echo $pay["params"]["paymethod_login"];
// выведет настройку "Логин"

Бывают случаи, когда платежная система предлогает разбить зачисление успешного платежа на два шага: проверку и показ страницы об успешно окончании. Тогда зачисление средств надо проводить при проверке, а на втором этапе просто показать страницу успешного зачисления средств.

1 шаг:

if(проверка пройдена)
{
    
$this->diafan->_payment->success($pay, 'pay');
}

2 шаг:

$this->diafan->_payment->success($pay, 'redirect');

payment.paymethod.admin.php

Файл содержит настройки платежного метода, подгружаемые при добавлении метода оплаты.

Структура файла:

Пример:

// ошибка 404 при прямом вызове файлов
if (! defined('DIAFAN'))
{
    
$path = __FILE__;
    while(!
file_exists($path.'/includes/404.php'))
    {
        
$parent = dirname($path);
        if(
$parent == $path) exit;
        
$path = $parent;
    }
    include
$path.'/includes/404.php';
}

class
Payment_paymethod_admin
{
    public
$config;
    private
$diafan;

    public function
__construct(&$diafan)
    {
        
$this->diafan = &$diafan;
        
$this->config = array(
            
"name" => 'Название метода, выводимое администратору',
            
"params" => array(
                
// название настройки должно начинаться с названия метода
                
'paymethod_string' => 'Название',

                
// если настройка не строковая, то вместо названия указываем массив с названием и типом
                // доступны следующие типы: text - строка, checkbox - галочка
                
'paymethod_checkbox' => array(
                    
'name' => 'Тестовый режим',
                    
'type' => 'checkbox'
                
),

                
// можно определить свою функцию для вывода поля и его сохранения
                
'paymethod_var' => 'Название',
            )
        );
    }

    
/**
     * Своя функция на редактирования настройки paymethod_var
     *
     * @return void
     */
    
public function edit_variable_paymethod_var()
    {
        echo
'<div class="unit tr_payment" payment="paymethod" style="display:none">
            <div class="infofield">Название поля</div>
            Значение поля
        </div>'
;
    }

    
/**
     * Своя функция на сохранение настройки paymethod_var
     *
     * @return void
     */
    
public function save_variable_paymethod_var()
    {
        
// сохраняет данные
    
}
}

payment.paymethod.model.php

Файл выводит данные платежной системы поле выбора метода оплаты. Чаще всего это форма оплаты, которая отправляет данные на сайт платежной системы. Также может быть прямой редирект на платежную систему или ссылки на платежные квитациии.

В файле генерируются данные, а затем они подставляются в шаблон payment.paymethod.view.php.

Пример:

// ошибка 404 при прямом вызове файлов
if (! defined('DIAFAN'))
{
    
$path = __FILE__;
    while(!
file_exists($path.'/includes/404.php'))
    {
        
$parent = dirname($path);
        if(
$parent == $path) exit;
        
$path = $parent;
    }
    include
$path.'/includes/404.php';
}

class
Payment_paymethod_model extends Diafan
{
    
/**
     * Формирует данные для формы платежной системы
     *
     * @param array $params настройки платежной системы
     * @param array $pay данные о платеже
     * @return array
     */
    
public function get($params, $pay)
    {
        
$result = array(
            
// какие-то данные, которые затем будут подставлены в шаблон
        
);
        return
$result;
    }
}

Переменная $params — это массив настроек платежной системы, описанных в файле payment.paymethod.admin.php.

Пример:

// из нашего пример массив $params будет следующим
$params = array(
    
'paymethod_string' => '...',
    
'paymethod_checkbox' => 1|0,
    
'paymethod_var' => '...',
);

Переменная $pay — это массив данных о платеже.

Пример:

$pay = array(
    
'id' => 'идентификатор платежа из таблицы {payment_history}',
    
'text' => '"Сообщение о совершенном заказе перед оплатой" из настроек модуля, в котором используется оплата, например, модуля "Магазин". Используется для вывода пользователю на экран.',
    
'desc' => '"Описание платежа" из настроек модуля, в котором используется оплата, например, модуля "Магазин". Передается платежной системе.',
    
// данные о плательщике, детали заказа
    
'details' => array(
        
'address' => 'Адрес',
        
'street' => 'Улица',
        
'building' => 'Номер дома',
        
'suite' => 'Корпус',
        
'flat' => 'Квартира',
        
'entrance' => 'Подъезд',
        
'floor' => 'Этаж',
        
'intercom' => 'Домофон',
        
'city' => 'Город',
        
'country' => 'Страна',
        
'zip' => 'Индекс',
        
'metro' => 'Станция метро',
        
'cargolift' => 'Наличие грузового лифта',
        
'name' => 'ФИО',
        
'firstname' => 'Имя',
        
'lastname' => 'Фамилия',
        
'fathersname' => 'Отчество',
        
'phone' => 'Телефон',
        
'phone-extra' => 'Дополнительный телефон',
        
'email' => 'Электронный адрес для связи',
        
'comment' => 'Комментарий к адресу',
        
// заказанные товары
        
'goods' => array(
            array(
                
'name' => 'название',
                
'article' => 'артикул',
                
'price' => 'цена',
                
'count' => 'количество заказанного товара',
                
'summ' => 'сумма',
            ),
            ...
        ),
        
// сопутствующие услуги
        
'additional' => array(
            array(
                
'name' => 'название',
                
'summ' => 'сумма',
            ),
            ...
        ),
        
// доставка
        
'delivery' => array(
            
'name' => 'название',
            
'summ' => 'сумма',
        ),
        
'discount' => 'скидка на весь заказ (скидки на отдельные товары включены в цену товаров)',
    ),
);

Все детали заказа в массиве $pay['details'] являются необязательными. Их наличие и заполнение зависит от модуля, использующего платежный модуль, а также от настроек модуля. Поэтому при использовании нужно проверять переменные на существование.

payment.paymethod.view.php

Шаблон платежного метода, который выводиться в контентной части страницы после выбора метода оплаты. Данные для шаблона генерируются в файле payment.paymethod.model.php.

Модуль Webmoney

При подключении модуля WebMoney необходимо заполнить поле дополнительных настроек следующими значениями:

  • Webmoney: секретный ключ – ключ, указанный в настройках системы Webmoney;
  • Webmoney: кошелек – кошелек, выданный в системе Webmoney.

На сайте Webmoney необходимо внести в настройки следующие значения:

  • ResultURL: //yoursite.ru/payment/get/webmoney/result/
  • SuccessURL: //yoursite.ru/payment/get/webmoney/success/
  • FailURL: //yoursite.ru/payment/get/webmoney/fail/

Пример настроек в системе Webmoney

Модуль Баланс пользователя

Модуль не требует дополнительных настроек. Пользователь в любой момент в своем личном кабинете может пополнить баланс с помощью других методов оплаты, и затем, при выборе оплаты «Баланс пользователя» деньги будут списаны с баланса пользователя.

Модуль Банковские платежи

Служит для автоматической выписки счетов на оплату и квитанций. Необходимо заполнить дополнительные настройки модуля, реквизиты Вашей организации, от имени которой будут выписываться счета на оплату:

  • Наименование организации
  • ОГРН
  • ИНН
  • КПП
  • Расч. счет
  • Банк
  • БИК
  • Кор. счет
  • Адрес
  • Руководитель предприятия
  • Главный бухгалтер
  • КБК
  • Сокр. наим. налогового органа
  • Код ОКАТО
  • НДС
  • Печать – поле для загрузки изображения Вашей печати.

При выборе пользователем методы оплаты «Банковские платежи», для него будут сформированы платежные квитации для физического лица и счета на оплату для юридического лица, в которые будут подставлены данные платежа и данные из настроек платежного модуля. Пользователь увидит их печатные формы, сможет распечатать и оплатить в любом банке.

Шаблоны квитанций:

  • для физического лица – modules/payment/backend/non_cash/payment.non_cash.fl.php
  • для юридического лица – modules/payment/backend/non_cash/payment.non_cash.ul.php

Модуль QIWI

В модуль QIWI на сайте необходимо внести следующие параметры, которые Вы получите на сайте QIWI при регистрации своего магазина:

  • Номер терминала – ID магазина
  • Пароль – пароль от API ID

На сайте QIWI необходимо внести следующие параметры:

  • ResultURL: http://yoursite.ru/payment/get/qiwi/result/
  • SuccessURL: http://yoursite.ru/payment/get/qiwi/success/

Модуль Яндекс.Касса

Для работы с этим модулем необходимо подключиться к Яндекс.Кассе и заключить договор с Яндекс.Деньгами, это могут сделать только юрлица или ИП. Настройки для активации модуля:

  • sсId - номер магазина в Яндексе. Выдается при подключении к Яндекс.Кассе.
  • shopId - номер витрины в Яндексе. Выдается при подключении к Яндекс.Кассе.
  • shopPassword - секретное слово, его можно указать в личном кабинете Яндекс.Кассы после подключения.
  • Тестовый режим - включается для тестирования оплаты. Его нужно выключить, чтобы принимать настоящие платежи.
  • Способы оплаты - выберите нужные (поставьте галочку). Доступные вам способы оплаты указаны в договоре с Яндекс.Деньгами.

Настройки на стороне Яндекс.Кассы (в личном кабинете):

  • avisoURL, checkURL, checkOrder: https://yoursite.ru/payment/get/yandexmoney/
  • successURL: https://yoursite.ru/payment/get/yandexmoney/success/
  • failURL: https://yoursite.ru/payment/get/yandexmoney/fail/

Пример настроек в системе Яндекс.Касса

Платежные агрегаторы

В DIAFAN.CMS в стандартную сборку по умолчанию не включены многочисленные модули платежных агрегаторов (сервисов, предоставляющий возможность оплаты разными способами, включая банковские карты коммерческих банков). Их можно скачать и установить отдельно. Список модулей агрегаторов

Методы оплаты

Платежные модули (или бэкенды) подключаются к методам оплаты. А уже методы оплаты добавляют в отдельном интерфейсе, где для них определяется порядок следования, описание и подключенные платежные модули.

Список методов оплаты

В дистрибутиве предустановлены несколько вариантов, которые можно добавлять, вводить регистрационные данные, тестировать и пользоваться.

Также можно доустановить другие методы оплаты из раздела «Дополнения». После установки они появятся в выпадающем списке.

Список методов оплаты

Внимание!
Наиболее популярным и вместе с тем вызывающим вопросы методом оплаты является Robokassa. Поэтому справочно укажем тут параметры, которые нужно вводить в личном кабинете Robokassa для её корректной работы:

Result Url: http://site.ru/payment/get/robokassa/result/

Success Url: http://site.ru/payment/get/robokassa/success/

Fail Url: http://site.ru/payment/get/robokassa/fail/

где site.ru - доменное имя Вашего сайта. Протокол также может иметь значение (http:// или https://)

История платежей

Просмотр истории платежей за заданный период времени.

История платежей

База данных

{payment} – Методы оплаты

{payment_history} – История платежей

Файлы

Модуль находится в папке modules/payment и устроен классически.

  1. modules/payment/admin/payment.admin.php – редактирование методов оплаты;

  2. modules/payment/admin/payment.admin.history.php – история платежей;

  3. modules/payment/backend/balance/payment.balance.admin.php – настройки платежной системы «Баланс пользователя» для административного интерфейса;

  4. modules/payment/backend/balance/payment.balance.model.php – действия при выборе оплаты балансом;

  5. modules/payment/backend/balance/payment.balance.view.php – шаблон вывода ошибки платежа при оплате балансом;

  6. modules/payment/backend/cloudpayments/payment.cloudpayments.php – обработка уведомлений, полученных от CloudPayments;

  7. modules/payment/backend/cloudpayments/payment.cloudpayments.admin.php – настройки платежной системы CloudPayments для административного интерфейса;

  8. modules/payment/backend/cloudpayments/payment.cloudpayments.model.php – формирует данные для виджета CloudPayments;

  9. modules/payment/backend/cloudpayments/payment.cloudpayments.view.php – шаблон вывода виджета через систему CloudPayments;

  10. modules/payment/backend/non_cash/payment.non_cash.php – платежная квитанция на оплату;

  11. modules/payment/backend/non_cash/payment.non_cash.admin.php – настройки платежной системы «Банковские платежи» для административного интерфейса;

  12. modules/payment/backend/non_cash/payment.non_cash.fl.php – платежная квитанция на оплату для физ.лица;

  13. modules/payment/backend/non_cash/payment.non_cash.model.php – формирует данные для страницы оплаты безналичным платежем;

  14. modules/payment/backend/non_cash/payment.non_cash.num2str.php – перевод чисел в слова;

  15. modules/payment/backend/non_cash/payment.non_cash.ul.php – платежная квитанция на оплату для юр.лица;

  16. modules/payment/backend/non_cash/payment.non_cash.view.php – шаблон безналичного платежа;

  17. modules/payment/backend/non_cash/payment.non_cash.view.fl.php – шаблон квитации для физического лица;

  18. modules/payment/backend/non_cash/payment.non_cash.view.ul.php – шаблон квитации для юридического лица;

  19. modules/payment/backend/robokassa/payment.robokassa.php – обработка данных, полученных от системы Robokassa;

  20. modules/payment/backend/robokassa/payment.robokassa.admin.php – настройки платежной системы Robokassa для административного интерфейса;

  21. modules/payment/backend/robokassa/payment.robokassa.cashregister.php – онлайн касса платежного метода «Robokassa»;

  22. modules/payment/backend/robokassa/payment.robokassa.model.php – формирует данные для формы платежной системы Robokassa;

  23. modules/payment/payment.get.php – работа с платежными системами;

  24. modules/payment/payment.inc.php – модель модуля «Методы оплаты»;

  25. modules/payment/payment.install.php – установка модуля;

  26. modules/payment/views/payment.view.list.php – шаблон списка платежных система при оплате.

Дополнения

Ваши комментарии и дополнения
07 апреля 2016 г.
А где собственно порядок настройки Робокассы, все это Result Url, Success Url и прочие Метод отсылки данных по Result Url. Робокасса как бы идет в коробке, а данных по настройке тут вообще нет.
04 марта 2019 г.
https://www.robokassa.ru/ru/HowTo.aspx - Документация на сайте самой Робокассы.
19 июля 2019 г. , редакция: 19 июля 2019 г.
Здравствуйте!
Подскажите как настроить? В описании указано - http://joxi.ru/1A5ZEz0CDxbjZr , при этом когда я устанавливаю (не задаю) платежную систему "---" , при нажатии на кнопку оформления заказа с вышеуказанным методом оплаты, меня перекидывает на главную страницу сайта. Подскажите, как сделать так, что бы перекидывало на страницу завершения заказа, на которой я мог бы отредактировать текст. Но только так, что бы не повредились другие методы оплаты, типо по счету для юриков или робокассе. Спасибо
19 июля 2019 г.
Цитата
Подскажите, как сделать так, что бы перекидывало на страницу завершения заказа, на которой я мог бы отредактировать текст.
В настройках магазина параметр "Страница завершения заказа", там любую можно указать
04 июня 2020 г.
В чём проблема, описать настройку оплаты робокассой? Почему приходиться на сторонний сайт идти для настройки модуля, четыре года назад Дмитрий вопрос задал, а ответа нет
04 июня 2020 г. , редакция: 08 июня 2020 г.
Цитата
Почему приходиться на сторонний сайт идти для настройки модуля

Какие у Вас проблемы с настройкой Робокассы? Что не получалось, что пришлось идти за руководством?
Все платежные модули одинаковы абсолютно, есть id-магазина, есть секретный ключ. На сайте платежной системы после регистрации получили их и в пару полей в модуле внесли. Что Яндекс, что Тинькоф, что Робокасса, везде всё одинаково.

Но добавим, конечно
14 мая 2021 г.
Добрый день. Если я открою счет в банке Точка, что мне нужно, чтобы настроить прием платежей через интернет-эквайринг на cms diafan?
14 мая 2021 г.
После открытия счета в Точке или любом другом банке регистрируетесь В робокассе например, указываете р/с Точки и всё. Получаете коды доступа к модулю в cms, вносите и принимаете платежи. Если что, поддержка поможет

Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.