Оплата
- Подключение
- Структура бэкенда
- Модуль Webmoney
- Модуль Баланс пользователя
- Модуль Банковские платежи
- Модуль QIWI
- Модуль Яндекс.Касса
- Платежные агрегаторы
- Методы оплаты
- История платежей
- База данных
- Файлы
- Дополнения
Модуль относится к части 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/
Модуль Баланс пользователя
Модуль не требует дополнительных настроек. Пользователь в любой момент в своем личном кабинете может пополнить баланс с помощью других методов оплаты, и затем, при выборе оплаты «Баланс пользователя» деньги будут списаны с баланса пользователя.
Модуль Банковские платежи
Служит для автоматической выписки счетов на оплату и квитанций. Необходимо заполнить дополнительные настройки модуля, реквизиты Вашей организации, от имени которой будут выписываться счета на оплату:
- Наименование организации
- ОГРН
- ИНН
- КПП
- Расч. счет
- Банк
- БИК
- Кор. счет
- Адрес
- Руководитель предприятия
- Главный бухгалтер
- КБК
- Сокр. наим. налогового органа
- Код ОКАТО
- НДС
- Печать – поле для загрузки изображения Вашей печати.
При выборе пользователем методы оплаты «Банковские платежи», для него будут сформированы платежные квитации для физического лица и счета на оплату для юридического лица, в которые будут подставлены данные платежа и данные из настроек платежного модуля. Пользователь увидит их печатные формы, сможет распечатать и оплатить в любом банке.
Шаблоны квитанций:
- для физического лица – 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 в стандартную сборку по умолчанию не включены многочисленные модули платежных агрегаторов (сервисов, предоставляющий возможность оплаты разными способами, включая банковские карты коммерческих банков). Их можно скачать и установить отдельно. Список модулей агрегаторов
Методы оплаты
Платежные модули (или бэкенды) подключаются к методам оплаты. А уже методы оплаты добавляют в отдельном интерфейсе, где для них определяется порядок следования, описание и подключенные платежные модули.
В дистрибутиве предустановлены несколько вариантов, которые можно добавлять, вводить регистрационные данные, тестировать и пользоваться.
Также можно доустановить другие методы оплаты из раздела «Дополнения». После установки они появятся в выпадающем списке.
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 и устроен классически.
modules/payment/admin/payment.admin.php – редактирование методов оплаты;
modules/payment/admin/payment.admin.history.php – история платежей;
modules/payment/backend/balance/payment.balance.admin.php – настройки платежной системы «Баланс пользователя» для административного интерфейса;
modules/payment/backend/balance/payment.balance.model.php – действия при выборе оплаты балансом;
modules/payment/backend/balance/payment.balance.view.php – шаблон вывода ошибки платежа при оплате балансом;
modules/payment/backend/cloudpayments/payment.cloudpayments.php – обработка уведомлений, полученных от CloudPayments;
modules/payment/backend/cloudpayments/payment.cloudpayments.admin.php – настройки платежной системы CloudPayments для административного интерфейса;
modules/payment/backend/cloudpayments/payment.cloudpayments.model.php – формирует данные для виджета CloudPayments;
modules/payment/backend/cloudpayments/payment.cloudpayments.view.php – шаблон вывода виджета через систему CloudPayments;
modules/payment/backend/non_cash/payment.non_cash.php – платежная квитанция на оплату;
modules/payment/backend/non_cash/payment.non_cash.admin.php – настройки платежной системы «Банковские платежи» для административного интерфейса;
modules/payment/backend/non_cash/payment.non_cash.fl.php – платежная квитанция на оплату для физ.лица;
modules/payment/backend/non_cash/payment.non_cash.model.php – формирует данные для страницы оплаты безналичным платежем;
modules/payment/backend/non_cash/payment.non_cash.num2str.php – перевод чисел в слова;
modules/payment/backend/non_cash/payment.non_cash.ul.php – платежная квитанция на оплату для юр.лица;
modules/payment/backend/non_cash/payment.non_cash.view.php – шаблон безналичного платежа;
modules/payment/backend/non_cash/payment.non_cash.view.fl.php – шаблон квитации для физического лица;
modules/payment/backend/non_cash/payment.non_cash.view.ul.php – шаблон квитации для юридического лица;
modules/payment/backend/robokassa/payment.robokassa.php – обработка данных, полученных от системы Robokassa;
modules/payment/backend/robokassa/payment.robokassa.admin.php – настройки платежной системы Robokassa для административного интерфейса;
modules/payment/backend/robokassa/payment.robokassa.cashregister.php – онлайн касса платежного метода «Robokassa»;
modules/payment/backend/robokassa/payment.robokassa.model.php – формирует данные для формы платежной системы Robokassa;
modules/payment/payment.get.php – работа с платежными системами;
modules/payment/payment.inc.php – модель модуля «Методы оплаты»;
modules/payment/payment.install.php – установка модуля;
modules/payment/views/payment.view.list.php – шаблон списка платежных система при оплате.
Дополнения
Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.