Найти тему

Монетизация Joomla (Часть 1). Пополнение баланса пользователя

Оглавление

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

"Ну что ж" - решил я - "Существуют же всякие модули, компоненты и т.д.". НО!!! Когда я начал искать в сети, то подобных расширений оказалось очень мало, а стоимость таких решений просто ЗАШКАЛИВАЕТ!!!!!

В этой статье я расскажу, как реализовать пополнение баланса пользователя Joomla не вкладывая по $200 - $300, а иногда и больше, непонятно за что...

Хочу обратить Ваше внимание на то, что это статья только первая часть статей, в которых я подробно расскажу, как реализовать платные функции на Вашем сайте совершенно БЕСПЛАТНО для Вас!!!

И так, что нам потребуется? Практически ни чего: кошелек Яндекс.Деньги, немного знаний по CMS Joomla и компонет создания форм RS FORM PRO (по секрету: его можно скачать БЕСПЛАТНО в сети)

1. Создание поля БАЛАНС в таблицах БД

Для того, что бы у пользователя был баланс, необходимо создать это поле в базе данных. Для этого открываем phpMyAdmin и создаем в таблице #__users новое поле balans после поля password.

-2

2. Создание формы пополнения баланса в RS FORM

Теперь нам нужно создать форму, с помощью которой пользователь будет пополнять свой баланс. Для этого в компоненте RS FORM (для этого его нужно установить через менеджер расширений в Joomla) создаем новую форму "Пополнить баланс"

-3

ВАЖНО! Форма должна быть доступна только ЗАРЕГИСТРИРОВАННЫМ пользователям, иначе баланс пополняться будет В НИКУДА ))))

Создаем необходимые поля:

1. Создаем текстовое поле balans

В этом поле поле пользователь будет вводить сумму пополнения.

-4

2. Добавляем кнопку "Пополнить"

Это обычная кнопка отправки данных из формы

-5

3. Добавляем номер Яндекс.Кошелька

Яндекс.Кошелек Вы создали и готовы к дальнейшим настройкам

Далее создаем Текстовое поле и называем его yandex (это важно), а в значение по-умолчанию вводим номер кошелька.

-6

4. Добавляем ID пользователя и Имя пользователя

Это необходимо, что бы в комментарии к платежу в системе Яндекс.Деньги Вам пришли эти данные. В свою очередь, при возможном неудачном пополнении баланса, Вы будете знать, кто и на сколько его пополнил

-7

Создаем поле user_id (скрытое поле).

В значении по умолчанию вставляем

//<code>
$user = JFactory::getUser();
return $user->id;
//</code>

Создаем поле user_name (скрытое поле).

В Значении по умолчанию вставляем

//<code>
$user = JFactory::getUser();
return $user->name;
//</code>
-8

Минимальная форма для пополнения баланса создана. В нее(форму) Вы уже можете добавить все, что хотите: дополнительные текстовые поля, ограничения по сумме ввода, какие-то согласия с условиями и т.д.

Осталось передать данные, введенные в форме, в базу данных, и , желательно, сделать это автоматически, без участия администратора. Для этого мы будем использовать HTTP уведомления Яндекс.Кошелька

5. Создаем форму выбора способа оплаты

После создания формы пополнения баланса, нам необходимо создать форму выбора способа оплаты. Для этого я буду использовать сообщение благодарности RS FORM.

Вкладка Свойства.

-9

Кнопка "Редактировать сообщение благодарности"

-10

В открывшемся окне отключаем редактор (JCE)

-11

И вставляем код

-12
<form method="POST" action="https://money.yandex.ru/quickpay/confirm.xml">
<input type="hidden" name="receiver" value="{yandex:value}">
<input type="hidden" name="formcomment" value="Пополнение баланса пользователя {user_name:value} (ID {user_id:value}) ">
<input type="hidden" name="short-dest" value="Пополнение баланса пользователя {user_name:value} (ID {user_id:value})">
<input type="hidden" name="label" value='"user_id":"{user_id:value}","balans":"{balans:value}"'>
<input type="hidden" name="quickpay-form" value="donate">
<input type="hidden" name="targets" value="Пополнение баланса пользователя">
<input type="hidden" name="sum" value="{balans:value}" data-type="number">
<input type="hidden" name="comment" value="Оплатил User ID {user_id:value} {user_name:value}">
<input type="hidden" name="need-fio" value="false">
<input type="hidden" name="need-email" value="false">
<input type="hidden" name="need-phone" value="false">
<input type="hidden" name="need-address" value="false">
<div class="panel_left">
<div class="vibor_pay">
<label><input type="radio" name="paymentType" value="PC"> Яндекс.Деньгами</label>
</div>
<div class="vibor_pay">
<label><input type="radio" name="paymentType" value="AC"> Банковской картой</label>
<input type="submit" value="Оплатить">
</form>

Этот код выведет в сообщении благодарности выбор способа оплаты. И далее пользователь сможет выбрать, чем и как ему лучше оплачивать.

Идем далее!!!

6. Настраиваем HTTP уведомления Яндекса

Открываем эту страничку. Запрашиваем код на телефон и далее открывается страница для настройки.

Прописываем http(s)://domen.ru/pay.php (domen.ru - это Ваш сайт)

Копируем Секрет и ставим галочку Отправлять уведомления. Нажимаем кнопку Сохранить

-13

7. Создаем файл приема HTTP уведомлений о пополнении баланса

В корне сайта создаем файл pay.php в корне сайта

Его содержимое следующее

<?php define( '_JEXEC', 1 );
if ( file_exists( __DIR__ . '/defines.php' ) ) {
include_once __DIR__ . '/defines.php';
}
if ( !defined( '_JDEFINES' ) ) {
define( 'JPATH_BASE', __DIR__ );
require_once JPATH_BASE . '/includes/defines.php';
}
require_once JPATH_BASE . '/includes/framework.php';
?>
<?php
$test = '0'; //Тестирование системы: 0 - выключено, 1 - включено
$notification_secret = "3p6wwjjQUbprAppws9VAfpIS";
$notification_type = $_POST["notification_type"];
$operation_id = $_POST["operation_id"];
$amount = $_POST["amount"];
$currency = $_POST["currency"];
$datetime = $_POST["datetime"];
$sender = $_POST["sender"];
$codepro = $_POST["codepro"];
$label = $_POST["label"];
$sha1_hash = $_POST["sha1_hash"];
$test_notification = $_POST["test_notification"];
$hash = $notification_type . '&' . $operation_id . '&' . $amount . '&' . $currency . '&' . $datetime . '&' . $sender . '&' . $codepro . '&' . $notification_secret . '&' . $label; //формируем хеш
$sha1 = hash("sha1", $hash); //кодируем в SHA1
// Ниже - отладка - запись в файл testlog.txt переданых данных с ЯД.
if ($test=='1') {
$test_wr = fopen ('testlog.txt', 'a+');
fwrite ($test_wr, "$notification_type - тип нотификации\r\n$operation_id - ид операции\r\n$amount - сумма\r\n$currency -Код валюты\r\n$datetime - дата+время\r\n$sender -отправитель\r\n$codepro - наличие кода протекции\r\n$label - метка платежа\r\n$sha1_hash - переданый проверочный хеш\r\n$sha1 - расчитаный хэш\r\n$test_notification - тестовая нотификация\r\n");
fclose ($test_wr);
}
//Ниже - проверка на валидность
if ( $sha1 == $sha1_hash ) {
$db = JFactory::getDbo();
$label = $_POST['label'];
$lab = '{'. $label .'}';
$js = json_decode($lab);
$user_id = $js->user_id;
$summa = $js->balans;
$p_id = $operation_id;
//$s = $js->s;
//$u_id = $js->u;
//$h = $js->h;
//$v = $js->v;
//$s = $js->s;
$date = $datetime;
$dd = new DateTime($date);
$data_end = $dd->format("Y-m-d G:i:s");
$db->setQuery("SELECT `balans` FROM #__users WHERE `id` = '$user_id'");
$sum_old = $db->loadResult();
$summa_new = $sum_old + $summa;
$db->setQuery("UPDATE `#__users` SET `balans`='$summa_new' WHERE `id`= '$user_id'");
$db->query();
$db->setQuery("INSERT INTO #__history_pay (pay_id, pay_data, pay_name, pay_summa, user_id) VALUES ('$p_id','$data_end','Пополнение баланса','+$summa','$user_id')");
$db->query();
} else {
echo 'error!!!';
}
// Ниже - отладка - запись в файл testlog.txt переданых данных с ЯД.
if ($test=='1') {
$test_wr = fopen ('testlog.txt', 'a+');
fwrite ($test_wr, "$notification_type - тип нотификации\r\n$operation_id - ид операции\r\n$amount - сумма\r\n$currency -Код валюты\r\n$datetime - дата+время\r\n$sender -отправитель\r\n$codepro - наличие кода протекции\r\n$label - метка платежа\r\n$sha1_hash - переданый проверочный хеш\r\n$sha1 - расчитаный хэш\r\n$test_notification - тестовая нотификация\r\n");
fclose ($test_wr);
}
?>

В коде выше я выделил

$notification_secret = "3p6wwjjQUbprAppws9VAfpIS";

Тут нужно вставить Секретный ключ Яндекса, который мы получили раньше.

Теперь Ваши пользователи смогут пополнять баланс.

Осталось вывести на страницы сайта и сам баланс.

8. Вывод баланса на страницы сайта

Тут так же нет ни чего сложного. 1 запрос к базе, и мы получаем наш баланс.

<label>Баланс:</label>
<?php $user_id = $user->id;
$db->setQuery("SELECT balans FROM #__users WHERE id = '$user_id'");
$balans = $db->loadResult();
?>
<strong><?php echo $balans ?> руб.</strong>

-14

По любым настройкам баланса пользователя, Вы можете обратиться на мой сайт PRO-PORTAL.info

Всем удачи! До свидания)

В следующей статье я расскажу, как пользоваться этим балансом. Как с его помощью сделать статью избранной на несколько дней.

Подписывайтесь!