Наверх

Оплата

Модуль относится к части 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);
}

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

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

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

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

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

  • payment.paymenthod.php
  • payment.paymenthod.admin.php
  • payment.paymenthod.model.php
  • payment.paymenthod.view.php

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

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

payment.paymenthod.php

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

Пример:

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

// http://site.ru/payment/get/paymethod/fail/
$_GET["rewtite"] = '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.paymenthod.admin.php

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

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

Пример:

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

class
Payment_paymenthod_admin
{
    public
$config;
    private
$diafan;

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

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

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

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

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

payment.paymenthod.model.php

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

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

Пример:

// ошибка 404 при прямом вызове файлов
if ( ! defined('DIAFAN'))
{
    
$path = __FILE__; $i = 0;
    while(!
file_exists($path.'/includes/404.php'))
    {
        if(
$i == 10) exit; $i++;
        
$path = dirname($path);
    }
    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(
    
'paymenthod_string' => '...',
    
'paymenthod_checkbox' => 1|0,
    
'paymenthod_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.paymenthod.view.php

Шаблон платежного метода, который выводиться в контентной части страницы после выбора метода оплаты. Данные для шаблона генерируются в файле payment.paymenthod.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 в стандартную сборку по умолчанию не включены многочисленные модули платежных агрегаторов (сервисов, предоставляющий возможность оплаты разными способами, включая банковские карты коммерческих банков). Их можно скачать и установить отдельно. Список модулей агрегаторов

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

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

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

Методы оплаты имеют следующие свойства:

Основные:

  • Название – Название метода оплаты, выводится на сайте. Параметр имеет разные значения для разных языковых версий сайта.
  • Опубликовать на сайте – Параметр имеет разные значения для разных языковых версий сайта.
  • Платежная система – Система безналичной оплаты заказа. Если платежная система не задана, при оформлении заказа сразу перекидывает на страницу завершения заказа. Параметры подключения выдаются платежными системами при одобрении Вашего магазина.
  • Описание – Описание метода оплаты, выводится на сайте в форме заказа. Параметр имеет разные значения для разных языковых версий сайта.
  • Сортировка: установить перед – Изменить положение текущего метода оплаты среди других методов. В списке методов можно сортировать методы простым перетаскиванием мыши.

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

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

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

База данных

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

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

Файлы

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

  1. modules/payment/admin/js/payment.admin.js – редактирование платежных систем, JS-сценарий;

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

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

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

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

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

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

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

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

  10. modules/payment/backend/non_cash/payment.non_cash.memo.php – товарный чек;

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

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

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

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

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

  16. modules/payment/backend/non_cash/payment.non_cash.view.memo.php – шаблон товарного чека;

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

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

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

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

  21. modules/payment/backend/qiwi/payment.qiwi.view.php – шаблон платежа через систему QIWI;

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

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

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

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

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

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

  28. modules/payment/backend/webmoney/payment.webmoney.view.php – шаблон платежа через систему WebMoney;

  29. modules/payment/backend/yandexmoney/payment.yandexmoney.php – работа с платежной системой Яндекс.Касса;

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

  31. modules/payment/backend/yandexmoney/payment.yandexmoney.model.php – формирует данные для формы платежной системы Яндекс.Касса;

  32. modules/payment/backend/yandexmoney/payment.yandexmoney.view.php – шаблон платежа через систему Яндекс.Касса;

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

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

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

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

Ваши комментарии и дополнения

А где собственно порядок настройки Робокассы, все это Result Url, Success Url и прочие Метод отсылки данных по Result Url. Робокасса как бы идет в коробке, а данных по настройке тут вообще нет.
Как подключить paypal ?
Модуль для PayPal можно скачать здесь: http://addons.diafan.ru/modules/modules-and-services/paypal/ Там же инструкция по установке.
Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.