Socket
Socket
Sign inDemoInstall

vkcoin-callback-api

Package Overview
Dependencies
9
Maintainers
1
Versions
22
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 3.0.0 to 4.0.0

177

index.js

@@ -1,8 +0,8 @@

const request = require("prequest");
const http = require("http");
const axios = require("axios");
const md5 = require('js-md5');
let pollingPort;
let port = 1234;
module.exports = class VKCOIN {
constructor(auth) {
constructor (auth) {
this.key = auth.key;

@@ -12,133 +12,86 @@ this.id = auth.id;

async startServer(props) {
if (!props.server)
return console.error( "Start server Error: не указан сервер для получения событий!");
if (props.port) { port = props.port;}
async startServer (props) {
if (!props.server) throw new Error("Ошибка запуска сервера: не указан сервер для получения событий!");
pollingPort = props.port || 1234;
try {
let connect = await request({
return (await axios({
method: "POST",
url: "https://coin-without-bugs.vkforms.ru/merchant/set/",
form: {
callback: `http://${props.server}:${port}`,
merchantId: this.id,
key: this.key,
},
headers: { "Content-type": "Content-Type: application/json" },
});
return connect
} catch (e) {
throw new Error(e.message || "Ошибка сервера!")
}
headers: { "Content-Type": "application/json" },
data: JSON.stringify({ callback: `http://${props.server}:${pollingPort}`, merchantId: this.id, key: this.key })
})).data;
} catch (e) { throw new Error(e.message || "Ошибка сервера!"); }
}
async startPolling(hand) {
async startPolling (hand) {
try {
http.createServer((req, res) => {
if (req.method === "POST") {
let body = "";
req.on("data", (chunk) => {
body += chunk.toString();
});
req.on("end", () => {
let event = JSON.parse(body);
res.writeHead(200, "OK");
res.end("OK");
hand(event);
});
}
}).listen(port);
} catch (err) {
throw new Error(e.message || "Ошибка сервера!")
}
if (req.method === "POST") {
let body = "";
req.on("data", chunk => {
body += chunk.toString();
if(body.length > 1e6) {
req.connection.destroy();
body = "";
};
});
req.on("end", () => {
const event = JSON.parse(body);
const key = md5(event.id + ';' + event.fromId + ';' + event.amount + ';' + event.payload + ';' + this.key);
if(event.key !== key) {
req.connection.destroy();
return;
};
res.writeHead(200, "OK");
res.end("OK");
hand(event);
});
}
}).listen(pollingPort);
} catch (e) { throw new Error(e.message || "Ошибка сервера!"); }
}
async send(toId, amount, fromShop) {
if (!fromShop) {
try {
let req = await request({
method: "POST",
url: "https://coin-without-bugs.vkforms.ru/merchant/send/",
form: {
merchantId: this.id,
key: this.key,
toId: toId,
amount: amount,
},
headers: { "Content-type": "Content-Type: application/json" },
});
return req
} catch (e) {
console.error(e.message);
throw new Error(e.message || "Ошибка сервера!")
}
} else {
try {
let req = await request({
method: "POST",
url: "https://coin-without-bugs.vkforms.ru/merchant/send/",
form: {
merchantId: this.id,
key: this.key,
toId: toId,
amount: amount,
markAsMerchant: fromShop,
},
headers: { "Content-type": "Content-Type: application/json" },
});
return req
} catch (e) {
throw new Error(e.message || "Ошибка сервера!")
}
}
async send (toId, amount, fromShop) {
const dataJSON = fromShop ? { merchantId: this.id, key: this.key, toId, amount, markAsMerchant: true } : { merchantId: this.id, key: this.key, toId, amount };
try {
return (await axios({
method: "POST",
url: "https://coin-without-bugs.vkforms.ru/merchant/send/",
headers: { "Content-Type": "application/json" },
data: JSON.stringify(dataJSON)
})).data;
} catch (e) { throw new Error(e.message || "Ошибка сервера!"); }
}
async getBalance(id) {
async getBalance (id) {
try {
let balance = await request({
id = Array.isArray(id) ? id : [id];
if (id.length > 100) throw new Error("Ошибка: Длина массива должна быть не более 100!");
return (await axios({
method: "POST",
url: "https://coin-without-bugs.vkforms.ru/merchant/score/",
form: {
merchantId: this.id,
key: this.key,
userIds: id,
},
headers: { "Content-type": "Content-Type: application/json" },
});
return balance;
} catch (e) {
throw new Error(e.message || "Ошибка сервера!")
}
headers: { "Content-Type": "application/json" },
data: JSON.stringify({ merchantId: this.id, key: this.key, userIds: id })
})).data;
} catch (e) { throw new Error(e.message || "Ошибка сервера!"); }
}
async shopName(name) {
async shopName (name) {
try {
let req = await request({
return (await axios({
method: "POST",
url: "https://coin-without-bugs.vkforms.ru/merchant/set/",
form: {
merchantId: this.id,
key: this.key,
name: name,
},
headers: { "Content-type": "Content-Type: application/json" }
});
return req
} catch (e) {
throw new Error(e.message || "Ошибка сервера!")
}
headers: { "Content-Type": "application/json" },
data: JSON.stringify({ merchantId: this.id, key: this.key, name })
})).data;
} catch (e) { throw new Error(e.message || "Ошибка сервера!"); }
}
getLink(amount, payload, fixed) {
if (!this.id)
throw new Error(`Ошибка: Для начала необходимо авторизироваться!`)
if (isNaN(+amount))
throw new Error(`Ошибка: Недопустимый формат VK Coin!`)
let link = `vk.com/coin#x${this.id}_${+amount}_${payload}`
if (fixed) { link += "_1" }
return link
getLink (amount, payload, isFixed) {
if (!this.id) throw new Error("Ошибка: Для начала необходимо авторизироваться!");
if (isNaN(Number(amount))) throw new Error("Ошибка: Недопустимый формат VK Coin!");
return `vk.com/coin#x${this.id}_${Number(amount)}_${payload}${isFixed ? "" : "_1"}`;
}
format(amount) {
return (amount / 1000).toLocaleString('de-DE').replace(/\./g, " ")
}
format (amount) { return (Number(amount) / 1000).toLocaleString("ru-RU"); }
}
{
"name": "vkcoin-callback-api",
"version": "3.0.0",
"version": "4.0.0",
"description": "Модуль для работы с методами VK Coin api",

@@ -16,3 +16,4 @@ "main": "index.js",

"dependencies": {
"prequest": "^1.0.0"
"axios": "^0.27.2",
"js-md5": "^0.7.3"
},

@@ -19,0 +20,0 @@ "author": "XOP EHOTOB <хор-енотов.рф>",

# vkcoin-callback-api
Модуль для работы с методами VK Coin api
Модуль для работы с методами VK Coin API
<p align="center">
<h1>VKCOIN-CALLBACK-API</h1>
<a href="https://www.npmjs.com/package/vkcoin-callback-api"><img src="https://img.shields.io/npm/v/vkcoin-callback-api.svg?style=flat-square" alt="NPM version"></a>
<a href="https://www.npmjs.com/package/vkcoin-callback-api"><img src="https://img.shields.io/npm/dt/vkcoin-callback-api.svg?style=flat-square" alt="NPM downloads"></a>
<h1>VKCOIN-CALLBACK-API</h1>
<a href="https://www.npmjs.com/package/vkcoin-callback-api"><img src="https://img.shields.io/npm/v/vkcoin-callback-api.svg?style=flat-square" alt="NPM version"></a>
<a href="https://www.npmjs.com/package/vkcoin-callback-api"><img src="https://img.shields.io/npm/dt/vkcoin-callback-api.svg?style=flat-square" alt="NPM downloads"></a>
</p>

@@ -14,13 +14,11 @@

<p>
Для начала работы, необходимо получить Merchant Key от аккаунта <a href="https://vk.com/@hs-marchant-api">здесь</a>
После того как мы получили платежный ключ, необходимо авторезироваться
Для начала работы, необходимо получить Merchant Key от аккаунта <a href="https://vk.com/@hs-marchant-api">здесь</a>.
После того как мы получили платежный ключ, необходимо авторизоваться
</p>
```js
let VKCOIN = require(`vkcoin-callback-api`);
let vkcoin = new VKCOIN({
id: 1111111111, // Ваш id
key: "5rgpokeK[AQL,zZv6q6d!YJb_uiiOIIuhC![,#uzx4AoT#.reV21", // Ваш Merchant Key
const VKCOIN = require("vkcoin-callback-api");
const vkcoin = new VKCOIN({
id: 0, // Ваш ID
key: "" // Ваш Merchant Key
});

@@ -31,7 +29,7 @@ ```

Ваш id (19039187)
1. Ваш ID (19039187)
2. Сумма перевода в тысячных долях (1000 = 1 VK Coin)
3. Payload – любое число от -2000000000 до 2000000000, вернется вам в списке транзаций
3. Payload – любое число от -2000000000 до 2000000000, вернется Вам в списке транзаций

@@ -49,5 +47,10 @@ Далее их надо объединить в такую ссылку: vk.com/coin#x19039187*1000* 2000000000

```js
vkcoin.getLink(amount, payload, fixed); // Первым параметром передаем количество коинов по дефолту, вторым параметром payload котовый вернет VK Coin при пополнении по ссылке (любое число от -2000000000 до 2000000000), третий параметр не обязательный (Устанавливает фиксированную сумму в поле для оплаты)
/*
* amount — количество койнов по умолчанию (число).
* payload — параметр, который вернет VK Coin при пополнении по ссылке (число от -2000000000 до 2000000000).
* isFixed — параметр, отвечающий за изменение суммы пополнения (если поставить true то сумму можно будет менять, не ставьте, если нужна фиксированная сумма).
*/
vkcoin.getLink(amount, payload, isFixed);
console.log(vkcoin.getLink(100500, 123456789)); // Ссылку в свободном формате с дефолтным значением 100,500 и payload 123456789 vk.com/coin#x19039187_100500_123456789
console.log(vkcoin.getLink(100500, 123456789)); // vk.com/coin#x19039187_100500_123456789
```

@@ -60,7 +63,5 @@

```js
let port = 3223;
vkcoin.startServer({
server: "132.123.238.45", // Сервер (Обязательное поле)
port: port, // Порт (По умолчанию 1234)
port: 3223 // Порт (По умолчанию 1234)
});

@@ -72,5 +73,5 @@ ```

```js
vkcoin.startPolling(async (event) => {
vkcoin.startPolling(event => {
console.log(event);
// Здесь обрабатывем транзакцию
console.log(event);
});

@@ -93,5 +94,5 @@ ```

Где 431035213 - ID получателя, 5000 - Количество коинов для перевода (ВНИМАНИЕ! Количество указывается в тысячных долях, то еcть 5000 = 5 VK Coin)
Где 431035213 - ID получателя, 5000 - Количество коинов для перевода (ВНИМАНИЕ! Количество указывается в тысячных долях, то еcть 5000 = 5 VK Coin).
Для того чтобы платеж был от имени магазина, необхоимо отправить третий параметр
Для того чтобы платеж был от имени магазина, необходимо отправить третий параметр.

@@ -104,11 +105,10 @@ ```js

Для проверки баланса необходимо обратится к методу getBalance и передать массив содержащий не более 100 id получателей
Для проверки баланса необходимо обратиться к методу getBalance и передать массив, содержащий не более 100 ID получателей.
```js
async function get() {
let bal = await vkcoin.getBalance([431035213]);
console.log(bal);
async function getBalance() {
console.log(await vkcoin.getBalance([431035213]));
}
get();
getBalance();
```

@@ -118,3 +118,3 @@

Для обработки этого ответа console.log(bal.response[431035213]) в таком случае мы поучим баланс пользователя 431035213 в тысячных долях 10991024280
Для обработки этого ответа console.log(bal.response[431035213]), в таком случае мы получим баланс пользователя 431035213 в тысячных долях 10991024280.

@@ -124,10 +124,7 @@ ## Получим баланс нескольких пользователей

```js
let users = [431035213, 237435213, 237435783];
const usersId = [431035213, 237435213, 237435783];
async function get() {
let bal = await vkcoin.getBalance(users); // Получаем баланс пользователей
// Выведем их в консоль по одному
for (let i = 0; i < users.length; i++) {
console.log(bal.response[users[i]] / 1000); // В таком случае мы выведем в консоль баланс всех пользователей в привычном нам формате.
}
async function getBalance() {
const balRes = await vkcoin.getBalance(usersId); // Получаем баланс пользователей
Object.values(balRes.response).map(balance => console.log(balance / 1000)); // Выведем их в консоль по одному
}

@@ -145,23 +142,14 @@ ```

```js
let VKCOIN = require(`vkcoin-callback-api`);
const { VK } = new require("vk-io");
const vk = new VK();
const VKCOIN = require("vkcoin-callback-api");
const { VK, getRandomId } = require("vk-io");
let link = "vk.com/coin#x${ID}_${amount}_${payload}_1" // Собираем ссылку по которой нам будут переводить коины
vk.setOptions({
token: "Ваш токен сообщества",
pollingGroupId: 1111, // id паблика
apiMode: "parallel", // execute api mode для отправки до 50 сообщний в секунду
const vk = new VK({ token: "token" });
const vkcoin = new VKCOIN({
id: 0, // Ваш ID
key: "" // Ваш Merchant Key
});
let vkcoin = new VKCOIN({
id: 1111111111, // Ваш id
key: "5rgpokeK[AQL,zZv6q6d!YJb_uiiOIIuhC![,#uzx4AoT#.reV21", // Ваш Merchant Key
});
vkcoin.startServer({
server: "188.323.22.11", // Сервер (Обязательное поле)
port: 1111, // Порт (По умолчанию 1234)
port: 1111 // Порт (По умолчанию 1234)
});

@@ -171,41 +159,32 @@

vkcoin.startPolling(async (event) => {
console.log(event); // Выводим в консоль то что нам вернет вк коин при переводе на нашего бота
vkcoin.startPolling(async event => {
console.log(event); // Выводим в консоль то, что нам вернет VK Coin при поступлении баланса
/*
response возвращаемый при поплнении бота по ссылке:
{
id: 418034787, (id транзакции)
fromId: 431035213, (id пользователя отправившего нам коины)
toId: 354673884, (id нашего бота)
amount: 5000, (Сумма пополнения * в тысячных долях, тоесть нам перевели 5 VK Coin)
payload: -944320189, (payload перевода * указывается в ссылке на пополнение)
created_at: 1595181763, (Дата события)
from_id: 431035213, (id пользователя отправившего нам коины)
to_id: 354673884, (id нашего бота)
key: 'dbd9579344cdc9d22e912219a3801e34' (хэш)
}
*/
response — объект, возвращаемый при пополнении бота по ссылке:
{
id: 418034787, (id транзакции)
fromId: 431035213, (id пользователя, отправившего нам коины)
toId: 354673884, (id нашего бота)
amount: 5000, (Сумма пополнения * в тысячных долях, то есть нам перевели 5 VK Coin)
payload: -944320189, (payload перевода * указывается в ссылке на пополнение)
created_at: 1595181763, (Дата события)
from_id: 431035213, (id пользователя, отправившего нам коины)
to_id: 354673884, (id нашего бота)
key: 'dbd9579344cdc9d22e912219a3801e34' (хэш)
}
*/
// Далее обробатываем
// Далее обрабатываем
let balance = await vkcoin.getBalance([event.fromId]) // Проверяем баланс пользователя отправившего нам коины
if (balance[event.fromId] / 1000 < 5000000) {
vkcoin.send(event.fromId, 5000000 - balance[event.fromId] / 1000) // Отправляем пользователю коины для того чтобы его баланс был равен 5 000 000
const balance = await vkcoin.getBalance([event.fromId]); // Проверяем баланс пользователя, отправившего нам коины
if ((balance[event.fromId] / 1000) < 5000000) {
vkcoin.send(event.fromId, 5000000 - (balance[event.fromId] / 1000)); // Отправляем пользователю коины для того, чтобы его баланс был равен 5 000 000
vk.api.messages.send({
user_id: event.fromId,
message: `Мы отправили тебе ${5000000 - balance[event.fromId] / 1000}
Теперь твой баланс 5 000 000` // Отправляем пользователю сообщение о том что его баланс пополнен
});
} else {
vk.api.messages.send({
user_id: event.fromId,
message: `Твой баланс ${vkcoin.format(balance[event.fromId] / 1000)}, так как твой баланс больше 5 000 000
мы тебе ничего не отправим` // Отправляем пользователю сообщение о том что его баланс более 5 000 000 VK Coin
});
}
vk.api.messages.send({ user_id: event.fromId, message: `Мы отправили тебе ${5000000 - balance[event.fromId] / 1000}\nТеперь твой баланс 5 000 000`, random_id: getRandomId() }); // Отправляем пользователю сообщение о том, что его баланс пополнен
} else {
vk.api.messages.send({ user_id: event.fromId, message: `Твой баланс ${vkcoin.format(balance[event.fromId] / 1000)}, т.к. твой баланс больше 5 000 000 VK Coin мы тебе ничего не отправим`, random_id: getRandomId() }); // Отправляем пользователю сообщение о том, что его баланс более 5 000 000 VK Coin
}
});
```
<p align='center'>Made by <a href="https://хор-енотов.рф">ХОР ЕНОТОВ</a></p>
<p align='center'>Made by <a href="https://хор-енотов.рф">ХОР ЕНОТОВ</a></p>
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc