Типизированный SDK для API QIWI Кошелька для NodeJS
Язык: Русский | English
- Полная. Покрывает следующие API:
- API Кошелька - Wallet Personal;
- P2P Счетов - P2P Payments.
- Простая. Все методы названы как в документации QIWI и собраны в подклассы. Ко всем методам есть комментарии JSDoc.
- Много примеров.
- Надёжная. Библиотека написана на TypeScript и покрыта тестами.
- Безопасная. У библиотеки всего
1
зависимость (axios), и она постоянно сканируется Code QL и Snyk на наличие уязвимостей. - Совместимая. Код с версии
1.1.0
(18 янв. 2020) будет работать на версии3.1.0
(26 апр. 2022) с незначительными изменениями. Так-жеqiwi-sdk
предоставляет классы совместимости для упрощения миграции с похожих библиотек. - Мощная. Поддерживается работа с прокси, и даже редко используемые API:
- Персональные WebHook'и;
- Блокировка метода оплаты P2P;
- API работы с картами Qiwi Master.
- Интеграция с
Express
из коробки
- Кроссплатформенная. Поддерживает работу в браузере
Язык: Русский | English
- Используя
npm
npm i qiwi-sdk
- Используя
Yarn
yarn add qiwi-sdk
- Используя
pnpm
pnpm add qiwi-sdk
Язык: Русский | English
Из библиотеки можно импортировать все API по отдельности, так как случаи их применения разные.
- CommonJS (способ по умолчанию для Node JS)
const { P2p, Wallet, Detector } = require("qiwi-sdk");
- TypeScript или ES Модули
import { P2p, Wallet, Detector } from "qiwi-sdk";
В таблице указанны текущие реализованные API.
Класс (Legacy v2) - это класс совместимости только для тех, кто переходит с версии 2. Остальным рекомендуется использовать новый вариант работы с API - Класс v3.
Класс (v3) | Документация от QIWI | Рекомендованное название переменной | |
---|---|---|---|
Wallet |
Personal |
https://developer.qiwi.com/ru/qiwi-wallet-personal | wallet (или qiwi ) |
P2p |
P2P |
https://developer.qiwi.com/ru/p2p-payments | p2p |
P2p |
- | https://developer.qiwi.com/ru/bill-payments | p2p (или payments ) |
Detector |
DetectorCompat |
https://developer.qiwi.com/ru/qiwi-wallet-personal/#search-providers | detector |
Чтобы посмотреть детальную документацию по классу, нажмите на его название.
- Миграция с версии 2 на 3;
- Миграция с версии 1 на 2 (на всякий случай);
- Миграция c
node-qiwi
; - Миграция с
@qiwi/bill-payments-node-js-sdk
.
const { Wallet, P2p, Detector } = require("qiwi-sdk");
// ✅ - Правильный способ (с версии 3.0.0)
const wallet = Wallet.create(process.env.QIWI_TOKEN, process.env.QIWI_WALLET);
const p2p = P2p.create(process.env.QIWI_SECRET_KEY, process.env.QIWI_PUBLIC_KEY);
const detect = Detector.create();
// ✅ - Тоже правильный способ (с версии 3.2.0)
const wallet = new Wallet({
token: process.env.QIWI_TOKEN,
walletId: process.env.QIWI_WALLET
});
const p2p = new P2p({
secretKey: process.env.QIWI_SECRET_KEY,
publicKey: process.env.QIWI_PUBLIC_KEY
});
const detect = new Detector();
В этом примере использовались следующие переменные окружения. Все данные для доступа к API рекомендуется хранить в переменных окружения либо в другом защищённом месте, но не в коде.
Название | Тип | Описание |
---|---|---|
QIWI_TOKEN |
Строка(32 сим) - Hex | Токен киви, полученный на https://qiwi.com/api |
QIWI_WALLET |
Строка(10-16 сим) - только цифры | Номер телефона кошелька, к которому привязан |
QIWI_SECRET_KEY и QIWI_PUBLIC_KEY |
Строки | Пара ключей, созданные на https://qiwi.com/p2p-admin/transfers/api |
const wallet = Wallet.create(process.env.QIWI_TOKEN);
wallet.personProfile.getCurrent().then(console.log);
// => { contractInfo: {...}, authInfo: {...}, userInfo: {...} }
const wallet = Wallet.create(process.env.QIWI_TOKEN);
// 100 руб. с рублёвого счёта на QIWI (99) `79123456789` включая комиссию
// Всё вышеописанное настраивается
wallet.payments.quickPay({
amount: 100,
account: "79123456789"
});
const p2p = P2p.create(process.env.QIWI_SECRET_KEY);
p2p.bills
.create({
amount: {
value: 1000,
currency: P2p.Currency.RUB
},
successUrl: "https://youtu.be/dQw4w9WgXcQ"
})
.then(console.log);
// => { payUrl: 'https://oplata.qiwi.com/...' }
const { SocksProxyAgent } = require("socks-proxy-agent");
const wallet = Wallet.create(process.env.QIWI_TOKEN);
wallet.agent = new SocksProxyAgent("socks://login:password@host:port");
// Тут делаем что то с кошельком
// Не забываем очистить объект от агента
wallet.agent = undefined;
const p2p = P2p.create(process.env.QIWI_SECRET_KEY);
const app = express();
app.post(
"/webhook/qiwi",
p2p.notificationMiddleware({}, (req, res) => {
// Тело запроса
console.log(req.body);
// { "siteId": "9hh4jb-00", "billId": "cc961e8d-d4d6-4f02-b737-2297e51fb48e", ... }
})
);
app.use((error, req, res, next) => {
if (error instanceof P2pBillNotificationError) {
// Кто то отправил невалидное уведомление
console.log(error);
}
return next();
});
- 🥝 Получение информации о кошельке
- 📬 Отправка платежа куда угодно
- 🛠️ Создание ключей P2P и создание счёта
- 🔐 Получение лимитов (на ESM)
- 🤖 Телеграм бот с оплатой напрямую (по номеру кошелька)
- 🖥️ Магазин на Express
- 🌐 Использование прокси
Язык: Русский | English
Проект распространяется под лицензией MIT. Смотрите LICENSE.txt
- Покрыть все API QIWI (в том числе для юридических лиц)
- API QIWI Кошелька - (все API)
- Прием платежей
- Денежные выплаты
- Сохранять обратную совместимость
- v2 и v3
- v1 и v2
- Обеспечить максимальную надёжность и качество кода
- Типы: TypeScript
- Тесты: Jest, Codecov
- Авто-тесты в репозитории: Github Actions
- Статический анализ: Eslint, Prettier, Editorconfig
- Безопасность: Eslint Плагин, Code QL, ручная проверка в Snyk
⁉️ Не стесняйтесь писать Issues- 🛠️ Если хотите что-то поправить в коде, следуйте
CONTRIBUTING.md
- 💸 Так-же можете отправить донат 👉 https://qiwi.com/n/ALEXXGRIB
- 🌟 Или поставить библиотеке звёздочку, если она вам понравилась
Вы можете написать Issue
, а если я долго не отвечаю пишите в
Telegram: @AlexXanderGrib
Интересует приём платежей от физ. лиц по РФ?
Попробуйте мою другую библиотеку - SDK для ЮMoney 👉 github.com/AlexXanderGrib/yoomoney-sdk
Язык: Русский | English