Привет ✋, давно хотел написать подобный гайд и вот дошли руки. Напишем с вами простого бота в VK с автооплатой через QIWI.
Что нам понадобится для работы:
1) Любая библиотека для работы с API VK (я буду использовать EasyVK)
2) Node-QIWI-SDK
3) Сам Node.JS
После установки всего, что я описал выше переходим в ВКонтакте и создаем или используем уже существующую группу:
1) Переходим в раздел "Работа с API"
В данном разделе переходим в LongPoll API и включаем LongPoll, версию API выбираем 5.103 (можете и свою, я всегда использую 5.103)
Переходим в "Типы событий" и включаем событие на "Входящие сообщения", этого нам хватит.
2) Переходим в раздел "Сообщения" и включаем сообщения группы.
Группа готова к использованию, перейдем к написанию кода, создаем JS файл и открываем его в любом редакторе.
Что нам понадобится для работы:
1) Любая библиотека для работы с API VK (я буду использовать EasyVK)
2) Node-QIWI-SDK
3) Сам Node.JS
После установки всего, что я описал выше переходим в ВКонтакте и создаем или используем уже существующую группу:
1) Переходим в раздел "Работа с API"
В данном разделе переходим в LongPoll API и включаем LongPoll, версию API выбираем 5.103 (можете и свою, я всегда использую 5.103)
Переходим в "Типы событий" и включаем событие на "Входящие сообщения", этого нам хватит.
2) Переходим в раздел "Сообщения" и включаем сообщения группы.
Группа готова к использованию, перейдем к написанию кода, создаем JS файл и открываем его в любом редакторе.
Подключаем наши библиотеки:
JavaScript:
const vk = require("easyvk")
const QIWI = require("@qiwi/bill-payments-node-js-sdk")
Далее сделаем объект с настройками для VK, где будем хранить токен и версию API для EasyVK:
JavaScript:
const vk = require("easyvk")
const QIWI = require("@qiwi/bill-payments-node-js-sdk")
const VKSettings = {
token: "Token",
v: "5.103"
}
И подключимся к LongPoll нашей группы:
JavaScript:
// Передаем наш VK Settings
vk(VKSettings).then(async api => {
const longpoll = await api.bots.longpoll.connect() // Подключаемся к LongPoll
longpoll.on("message_new", async (msg) => {
// Это событие для входящего события, в "msg" хранится наш ответ от сервера
})
})
В "msg" будет храниться ответ от VK когда в группу кто-то напишет сообщение, давайте напишем в группу и выведем "msg"
JavaScript:
longpoll.on("message_new", async (msg) => {
console.log(msg)
})
Видим, что событие сработало и пришел ответ с нашим сообщением, давайте сделаем реакцию на определенную команду, к примеру "/qiwi" и ответим на эту команду:
JavaScript:
longpoll.on("message_new", async (msg) => {
if (msg.message.text == "/qiwi") { // Если написали боту /qiwi
api.call('messages.send', { // Обращаемся к методу messages.send и отправляем сообщение
random_id: vk.randomId(),
peer_id: msg.message.peer_id,
message: "Я отреагировал на твое сообщение!"
});
}
})
Теперь приступим к работе с QIWI, для оплаты мы будем использовать формы с оплатой.
Переходим на https://p2p.qiwi.com/, логинемся под свой кошелек.
Далее переходим в раздел "API" и создаем токен, сохраняем наш секретный ключ (не спутайте с PublicKey!), в скрипте можно создать переменную с нашим ключом.
Где-нибудь вверху скрипта пишем вот такое:
Теперь создадим такой же массив как мы делали с настройками для ВК, там мы будем храниться данные для создания формы оплаты:
Переходим на https://p2p.qiwi.com/, логинемся под свой кошелек.
Далее переходим в раздел "API" и создаем токен, сохраняем наш секретный ключ (не спутайте с PublicKey!), в скрипте можно создать переменную с нашим ключом.
Где-нибудь вверху скрипта пишем вот такое:
JavaScript:
const qiwiApi = new QIWI("СЕКРЕТНЫЙ КЛЮЧ")
JavaScript:
const QIWISettings = {
amount: null, // Сумма, пока оставим null
billId: "0", // Идентификатор платежа (он у каждого будет уникальный)
comment: "0", // Комментарий
currency: "RUB" // Валюта
}
Сделаем генерацию ссылки на форму по команде "/qiwi":
JavaScript:
longpoll.on("message_new", async (msg) => {
if (msg.message.text == "/qiwi") { // Если написали боту /qiwi
QIWISettings.amount = 1 // К примеру у нас продается товар за 1 рубль
QIWISettings.billId = qiwiApi.generateId() // Генерируем идентификатор с помощью встроенной в библиотеку функцию
QIWISettings.comment = "Оплата товара 'Клубника'" // К примеру мы покупаем Клубнику
qiwiApi.createBill(QIWISettings.billId, QIWISettings).then(data => { // Выставляем счет, передаем billId и другие данные
api.call('messages.send', { // Обращаемся к методу messages.send и отправляем сообщение
random_id: vk.randomId(),
peer_id: msg.message.peer_id,
message: `Сумма: ${QIWISettings.amount}\nДля оплаты перейдите по ссылке: ${data.payUrl}` // отправляем юзеру ссылку для оплаты
});
})
}
})
Теперь напишем боту команду "/qiwi", он должен прислать нам ссылку на оплату.
Как мы видим, все работает!
Теперь нам надо проверить платеж от пользователя, сделать это можно разными способами, но я делаю самый простой гайд и поэтому будем проверять платеж по команде юзера, к примеру ("/check")
Как мы видим, все работает!
Теперь нам надо проверить платеж от пользователя, сделать это можно разными способами, но я делаю самый простой гайд и поэтому будем проверять платеж по команде юзера, к примеру ("/check")
JavaScript:
if (msg.message.text == "/check") {
qiwiApi.getBillInfo(QIWISettings.billId).then(data => { // получаем данные о счете
if (data.status.value == "PAID") { // Если статус счета оплачен (PAID)
api.call('messages.send', { // Обращаемся к методу messages.send и отправляем сообщение
random_id: vk.randomId(),
peer_id: msg.message.peer_id,
message: "Оплата прошла успешно! Мы уже доставляем вам клубнику!" // Отправляем сообщение об удачной оплате!
});
}
else { // Если же нет.
api.call('messages.send', { // Обращаемся к методу messages.send и отправляем сообщение
random_id: vk.randomId(),
peer_id: msg.message.peer_id,
message: "Вы не оплатили счет!" // Отправляем сообщение об неудачной оплате
});
}
})
}
Теперь проверим:
Если счет не оплачен
Переведем рубль
Если счет не оплачен
Переведем рубль
На этом все. Я показал как сделать простую оплату через QIWI через бота VK. Если будут вопросы - задайте, постараюсь ответить