node-vkcoinapi
Модуль для работы с API VK Coin
Особенности:
- Реализованы все методы официального API
- Удобная документация и хорошая тех. поддержка
- Возможность получения платежей в режиме реального времени
- Активные обновления
- Не тянет за собой много библиотек
- Есть своя беседа для обсуждения обновлений/багов
Планы:
- Сделать WebHooks
- Сделать гайды по установке и использованию на YouTube
- Сделать папку с примерами
Установка
Windows:
- Скачайте и установите последнюю версию Node.JS
- Создайте в удобном месте папку, например vkcoin
- Перейдите в командную строку: Win + R > cmd
- Перейдите в папку: cd (путь до вашей папки)
- Пропишите: npm i node-vkcoinapi
Ubuntu:
- Установите Node.JS по этому гайду
- Создайте в удобном месте папку, например vkcoin
- Перейдите в папку: cd (путь до вашей папки)
- Пропишите: npm i node-vkcoinapi
Начало работы
Для начала использования, вам нужно создать в своей папке исполняемый файл, пусть это будет index.js
Теперь его нужно открыть и импортировать библиотеку:
const VKCOINAPI = ; const vkcoin = options;
Опция | Тип | Описание |
---|---|---|
options | Object | Опции конструктора |
options.key | String | Ключ для взаимодействия с API |
options.userId | Number | Ваш айди ВК |
options.token | String | Ваш токен |
Где взять эти значения
- Получение ключа (key): описано в начале этой статьи
- Получение айди вк (userId):
Откройте свою аватарку и в адресной строке вы увидите подобное: https://vk.com/fakeman.cat_fmc?z=photo236908027_456259706%2Falbum236908027_0%2Frev
Вашим айди будет являться число после слова photo. В этом случае 236908027
- Получение токена (token):
Откройте эту ссылку и нажмите разрешить
После этого в адресной строке будет подобное: https://api.vk.com/blank.html#access_token=xxxxxxxxxxxx&expires_in=0&user_id=user_id&email=email
Токеном будет являться строка от access_token до &expires. В этом случае xxxxxxxxxxxx
Токен нужен для получения событий через WebSocket (Моментальное получение платежей)
API
call - Вызывает апи-метод по его названию (Нужен, если я не успел обновить модуль)
Например. Вышел новый метод у vkcoin, пусть это будет send_from_admin.
Выглядеть в виде ссылки это будет так: https://coin-without-bugs.vkforms.ru/merchant/send_from_admin
. Вызывать его нужно так:
{ const result = await vkcoinapi; console;} ;
Наглядно можно показать на уже существующем методе (send - делает перевод коинов):
{ const result = await vkcoinapi; console;}
Параметр | Тип | Описание |
---|---|---|
method | String | Исполняемый метод |
params | Object | Параметры метода |
При вызове методов с помощью call указывать merchatId и key в параметрах не нужно
getTransactionList - Получает список ваших транзакций
{ const result = await vkcoinapi; console;} ;
Параметр | Тип | Описание |
---|---|---|
tx | Number[] | Массив айди переводов для получения ИЛИ [1] - последняя 1000 транзакций, [2] - 100 |
sendPayment - Делает перевод другому пользователю (в десятичных долях)
{ const result = await vkcoinapi; // 1 коин = 1000 ед. console;} ;
Параметр | Тип | Описание |
---|---|---|
toId | Number | Айди получателя |
amount | Number | Сумма перевода |
fromShop | Boolean | Если true, то платеж отправится от имени магазина |
getLink - Получает ссылку для перевода
{ const link = vkcoinapi; console;} ;
Параметр | Тип | Описание |
---|---|---|
amount | Number | Сумма перевода |
fixation | Boolean | Фиксированная сумма или нет |
formatCoins - Делает получаемое из API значение коинов читабельным. Например, приходит значение 1234567890. Этот метод сделает значение таким: 1 234 567,890
Это можно использовать в паре с другим методом:
{ const trans = await vkcoinapi; const fixTrans = transresponse; console;} ;
Параметр | Тип | Описание |
---|---|---|
coins | Number | Входящее значение коинов |
getBalance - Получает баланс по айди пользователей
getMyBalance - Получает баланс текущего пользователя
{ const balances = await vkcoinapi; const myBalance = await vkcoinapi; console;} ;
Среди этих методов аргумент принимает только getBalance:
Параметр | Тип | Описание |
---|---|---|
userIds | Number|Number[] | Массив айди пользователей |
setShopName - Меняет название магазина
{ const result = await vkcoinapi; console;} ;
Параметр | Тип | Описание |
---|---|---|
name | String | Новое имя для магазина |
setCallback - Изменяет адрес для получения событий
{ const result = await vkcoinapi; console;} ;
Параметр | Тип | Описание |
---|---|---|
callback | String | Новый адрес с указанием пути |
removeCallback - Удаляет адрес для получения событий
{ const result = await vkcoinapi; console;} ;
Параметров не принимает
Updates
updates - Позволяет "прослушивать" события в VK Coin. Пока что я реализовал перехват входящего платежа, но вскоре придумаю что-нибудь ещё. И да, впервые работаю с сокетами :)
Запуск
Для запуска прослушивания есть 3 способа. Longpoll, webhook и отдельный middleware для Express
startPolling - Запускает обмен запросами между клиентом и сервером в режиме реального времени (WebSocket). Является лучшим и быстрым способом получения событий:
vkcoinupdates; /* Тут ваши действия со слушателем */
Параметр | Тип | Описание |
---|---|---|
callback | Function | Функция обратного вызова, принимает в себя аргумент event |
Советую в аргумент callback вставлять console.log или любой другой метод для отслеживания действий сокетов, например можно дебажить методом отправки сообщения ВК:
vkcoinupdates; /* Тут ваши действия со слушателем */
Например: Вы запустили polling и потом зашли в VK Coin. Срабатывает автопереподключение к серверу:
> Подключено
> Вы зашли в VK Coin
> Соединение разорвано, переподключение совершится через 5 сек...
> Подключено
startWebHook - Запускает сервер на 8181 порте для получения событий. Может не работать на Windows и является неоптимальным способом получения событий. В этом случае можно обойтись без асинхронной функции:
vkcoinupdates; /* Тут ваши действия со слушателем */
Опция | Тип | Описание |
---|---|---|
options | Object | Опции вебхука |
options.url | String | Адрес вашего сервера для получения событий |
options.port | Number | Порт для запуска сервера (8181 - по умолчанию) |
options.path | String | Путь вашего хука (/ - по умолчанию) |
При использовании startWebHook, вы лишаетесь многого: получение топов, места, онлайна и информации об объёме рынка. Всё это можно получить при использовании startPolling
getExpressMiddleware - Получает функцию цепи middleware для Express.
Перед использованием этого способа, нужно указать VKCOIN'у адрес для получения событий с указанием пути:
vkcoinapi;
Дальше уже можно использовать
const express = ; const app = ; /** * Это действие нужно обязательно * Нужно для получения тела запроса */app; // Дальше есть два варианта развития событий // 1: Добавление функции в цепь middlewareapp; // 2: Или определить функцию на свой роутapp; // Выбирайте на свой вкус :) /* Тут ваши действия со слушателем */
События
updates.onTransfer - Перехватывает входящие платежи, принимает один аргумент
vkcoinupdates; vkcoinupdates;
Или
vkcoinupdates; vkcoinupdates;
Или
{ await vkcoinapi; app vkcoinupdates;}
event - Объект, который хранит в себе информацию о платеже:
Параметр | Тип | Описание |
---|---|---|
event.amount | Number | Количество коинов, которые послупили на счёт |
event.fromId | Number | Айди плательщика |
event.id | Number | Айди платежа |
Стоит отметить, что startWebHook получает только платежи по ссылке.
Я опять же советую использовать startPolling
Методы и прочее
reconnectTimeout - Значение тайм-аута для переподключения
vkcoinupdatesreconnectTimeout = 10000; // Сменил на 10 скунд
По умолчанию это значение равно 5000 (5 секунд)
reconnect - Метод переподключения сервера для Longpoll. Использоуется в самой библиотеке для автопереподключения, но в своём коде его также можно использовать.
{ await vkcoinupdates; try /* Тут код, который может выдать ошибку */ catcherror await vkcoinupdates; // Выполняю переподключение console; } ;
Стоит сказать, что при переподключении во время работы поллинга новое подключение будет перебивать первое и потом наоброт. Так будет идти бесконечно, пока вы не остановите код. Так что reconnect стоит использовать, если вы отключились от сервера, а лучше вообще не трогать :)
Полезная информация - Если вы подкючились через startLongpoll, то в качестве бонуса вы можете узнать много полезного:
- Своё место в топе
- Объём рынка
- Сумма переводов за 5 минут
- Онлайн в данный момент
- Топ пользователей
- Топ сообществ
const updates = vkcoin; updates;
Теперь пройдусь по каждому параметру:
Параметр | Тип | Описание |
---|---|---|
place | Number | Ваше место в топе |
online | Number | Онлайн пользователей в данный момент |
digits | Object[] | Информация о рынке и сумме переводов |
digits.description | String | Описание дигита |
digits.value | Number | Значение дигита |
digits.trend | Number | На сколько изменилось значение переводов за 5 минут |
userTop | Object[] | Топ пользователей |
userTop.id | Number | ID Пользователя |
userTop.score | Number | Баланс |
userTop.first_name | String | Имя |
userTop.last_name | String | Фамилия |
userTop.is_closed | Boolean | Закрыт ли аккаунт |
userTop.can_access_closed | Boolean | Может ли текущий пользователь видеть профиль при is_closed = true |
userTop.photo_200 | String | Ссылка на аватарку |
userTop.link | String | Ссылка на профиль |
groupTop | Object[] | Топ сообществ. Подробнее: см. ниже |
groupTop.id | Number | ID сообщества |
groupTop.score | Number | Баланс |
groupTop.name | String | Имя сообщества |
groupTop.screen_name | String | Короткий адрес |
groupTop.is_closed | Number | Закрыта ли группа |
groupTop.type | String | Тип сообщества (паблик, страница, группа) |
groupTop.photo_200 | String | Аватарка сообщества |
groupTop.link | String | Ссылка на сообщество |
Так же скорее всего, все значения будут равны null
, потому что клиент ws не успевает подключиться. Для решения этой проблемы могу посоветовать сделать delay
функцию и интегрировать в метод:
const delay = ; const updates = vkcoin; updates;
Для тех, кто не понял. Так как подключение не успевает за получением значений, мы его задерживаем функцией delay
на 1 секунду и тогда всё успевает получиться.