Viz-awards-gates: NPM-пакет для разработчиков шлюзов наград. Часть 2: алгоритм интеграции на примере форума
Здравствуйте. В чате VIZ меня попросили написать пример интеграции. Но дело в том, что сейчас у меня загруженные дипломом и подготовкой к экзаменам дни, поэтому не получится выделить время на написание полноценного приложения. Предлагаю ознакомиться с алгоритмом действий.
Что надо делать для интеграции:
- Создайте на сервере с установленными node.js, npm и pm2 папку с названием вашего проекта, например, myforum.
- Введите npm init и, используя мастер, произведите заполнение package.json.
- После завершения введите npm install viz-awards-gates и дождитесь завершения инсталляции.
- Перейдите в node_modules/viz-awards-gates и откройте package.json
- Открыв файл, вы увидите код: { "service": "youtube", "login": "viz-user", "active_key": "5K" } Замените youtube на название вашего сервиса, которое должны будут вводить пользователи (в нашем случае "myforum"), viz_user – на ваш логин в VIZ, 5k – на активный ключ. Не забудьте сохранить файл.
- Создайте в папке, где размещены package.json и node_modules (в директории, созданной вами на первом шаге), файл app.js.
Напишите код приложения:
const vag = require('viz-awards-gates'); var express = require('express'); var app = express(); async function noReturn() { await vag.getAwards(); } noReturn(); app.get('/app/', function (req, res) { let api_token = req.query.api-token; // получили параметр api-token из url let domain = req.query.domain; // получили параметр domain из url let login = req.query.login; // получили параметр login из url. Можете заморочиться с выбором mysql модуля для проверки наличия логина в базе сайта, но я этого делать не буду. let pass = req.query.password; // получили параметр password из url let action = req.query.action; // получили параметр action из url let user = req.query.user; // получили параметр user из url (пользователь в базе данных) let viz_acc = req.query.viz; // получили параметр viz из url (логин в viz, для добавления) let withdraw_amount = req.query.amount; // получили параметр amount из url (сумма вывода) if (api_token === 'zkPja7OuwX13kSlY9iu' && login === 'admin' && pass === 'Mus;alk3g') { // Указываем api_token, login и pass, которые должны быть в url, чтобы скрипт выполнял действия дальнейшие. if (action === 'withdraw') { // выводим const withdraw_result = await vag.withdraw(user, amount); // выводим пользователю токены. res.send('
Предупреждаю, что код, скорее всего, нерабочий, несмотря на отсутствие ошибок в IDE. Но как пример программистам, думаю, пойдёт.' + withdraw_result + '
'); // Выводит пользователю сообщение. } else if (action === 'add') { // Добавляем viz аккаунт const add_viz_result = await wag.addVizAccount(user, viz_acc); // добавляем в базу данных VIZ- аккаунт к существующему пользователю. res.send('' + add_viz_result + '
'); } else if (action === 'userinfo') { const search_result = wag.search(user); res.send(JSON.stringify(search_result)); } } }); app.listen(3000, function () { }); - Перейдите в консоль и запустите
pm2 start app.js.
Убедитесь, что всё ок: проверьте награждение, отправив через https://viz.dpos.space/awards/ru/form.html на аккаунт шлюза (на логин, указанный в config.json пакета) любой процент энергии с указанием в memo myforum:test (у вас может быть другое название вместо myforum) - Найдите либо в папке вашего проекта, либо в node_modules, либо в viz-awards-gates папку databases, а в ней users.db и проверьте, что в ней появился логин test
- Создайте форму наград через https://viz.dpos.space/awards/ru/builder.html или дайте ссылку с url награды. Составить его можно тут: https://viz.dpos.space/awards/ru/url.html В качестве логина должен быть указан аккаунт шлюза, процент энергии можно указать любой желаемый, а memo должен иметь форму myforum:login (myforum – ваш сервис, login – логин пользователя). Разместите на страницах вашего форума. Скорее всего, в файле, отвечающем за вывод сообщений пользователей
- Отредактируйте форму или url так, чтобы вместо login был логин пользователя, написавшего сообщение. Чтобы узнать, какая это переменная, рекомендую посмотреть в участок, отвечающий за вывод логина пользователя, написавшего сообщение.
Пример, когда нет шаблонизатора, и используется url с переменной msg_user. ЯП php:
<a href="https://viz.dpos.space/awards/ru?target=myforum-account&energy=2&memo=myforum:<?= $msg_login ?>" target="_blank">Наградить пользователя <?= $msg_login ?></a>
- В коде, отвечающем за настройки профиля пользователя (главное условие, чтобы была проверка авторизации юзера), делаем форму добавления VIZ-аккаунта и форму вывода. Метод: get, url: http://ip_вашего_сервера/app/. Поля:
<input type="hidden" name="action" value="add"> <input type="hidden" name="api-token" value="zkPja7OuwX13kSlY9iu"> <input type="hidden" name="domain" value="myforum.ru"> <input type="hidden" name="login" value="admin"> <input type="hidden" name="password" value="Mus;alk3g"> <input type="text" name="viz" value="" placeholder="Введите viz аккаунт">
(Замените на свои). Показывать пример полей для вывода не буду: там первое поле также является скрытым с action и значением withdraw, второе – скрытое с api ключом, третье – с доменом, четвёртое – с логином, пятое – с паролем админа, шестое – это логин пользователя, получавшего награды, и именем user, седьмое – сумма с name amount - Там, где выводится профиль пользователя, можно также вывести баланс полученных наград, воспользовавшись curl с http://ip_вашего_сервера/app?action=userinfo&user=login (замените login на переменную пользователя, страницу которого просматривает посетитель). Только не забудьте конвертировать json, который будет возвращён вам, в массив
- Всё.
Как зарабатывать шлюзу?
Очень просто: сделайте так, чтобы при награде бенефициаром указывался ваш аккаунт. Напоминаю, что в viz-awards-gates невозможно награждение пользователями, у которых нет VIZ-аккаунта, но те, кто получают награды, на момент аварда могут не иметь VIZ-аккаунта.
На этом завершаю.
Надеюсь, было понятно и наглядно. Если будут вопросы, пишите их в комментариях. P. S. Не рекомендую использовать описанный здесь метод идентификации пользователя, т.к. он не очень надёжный, потому что данные, отправляемые через такую форму, можно перехватить.
С вами был незрячий программист и делегат @denis-skripnik. В последней части напишу о заявке в комитет и о планах по использованию viz-awards-gates мной после окончания учёбы. Перейти