Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

qiwi-sdk

Package Overview
Dependencies
Maintainers
1
Versions
95
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

qiwi-sdk

⭐ Typed QIWI Wallet SDK. Supported API's: Personal & P2P Bill Payments

  • 3.6.11
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
1.4K
increased by58.31%
Maintainers
1
Weekly downloads
 
Created
Source

QIWI SDK

Typed QIWI Wallet SDK for NodeJS. Supported API's: Personal & P2P Bill Payments

QIWI SDK

Test Status Downloads last commit codecov GitHub qiwi-sdk Known Vulnerabilities Quality npm license MIT Size

👅 Язык

Весь JSDoc библиотеки на русском языке, как и большая часть документации. Основной README.md файл на английском потому что:

  1. NPM лучше индексирует текст на английском + хочется чтобы не русскоговорящие люди, нашедшие эту библиотеку на NPM не пугались того, что всё на Русском.
  2. Английский - это язык из которого пошли программистские термины, в том числе те, что нельзя перевести. (например: Contributing)

👉 Документация на Русском 🇷🇺 👈

Language: Русский | English

🍬 Why use this lib?

  1. Full. Covers the following APIs:
  2. Simple. All methods are named as in QIWI documentation and collected into subclasses. All methods have JSDoc comments.
  3. Reliable. The library is written in TypeScript and covered by tests.
  4. Secure. The library has only 3 dependencies and is constantly scanned by Code QL and Snyk for vulnerabilities.
  5. Compatible. Code from version 1.1.0 (18 Jan. 2020) will work on version 3.1.0 (26 Apr. 2022) with little changes. Also qiwi-sdk provides classes to make migration from similar libs effortless.
  6. Powerful. Supports http & socks proxy out of the box, and rarely used APIs:
    • Personal Webhooks;
    • P2P payment method blocking;
    • "Qiwi Master" Card API.
    • Express integration out of the box

Language: Русский | English

📦 Installation

  • Using npm
    npm i qiwi-sdk
    
  • Using Yarn
    yarn add qiwi-sdk
    
  • Using pnpm
    pnpm add qiwi-sdk
    

Language: Русский | English

🛠️ Usage

Import

From the library you can import all the APIs separately, because use cases are different.

  • CommonJS (default for Node JS)

    const { P2p, Wallet, Detector } = require("qiwi-sdk");
    
  • TypeScript or ES Модули

    import { P2p, Wallet, Detector } from "qiwi-sdk";
    

Documentation

👉 View API Reference 👈

The table shows the currently implemented APIs.

Class (Legacy v2) is a compatible class only for those who are upgrading from version 2. The rest are advised to use the new version of the API - Class v3.

API Overview

Class (v3)Class (Legacy v2)Documentation by QIWIRecommended var name
WalletPersonalhttps://developer.qiwi.com/en/qiwi-wallet-personalwallet (or qiwi)
P2pP2Phttps://developer.qiwi.com/en/p2p-paymentsp2p
P2p-https://developer.qiwi.com/en/bill-paymentsp2p (or payments)
DetectorDetectorCompathttps://developer.qiwi.com/en/qiwi-wallet-personal/#search-providersdetector

To see detailed documentation on a class, click on its name.

Migration
  1. Migration from version 2 to 3;
  2. Migration from version 1 to 2 (just in case);
  3. Migration from node-qiwi;
  4. Migration from @qiwi/bill-payments-node-js-sdk.

Instantiation

const { Wallet, P2p, Detector } = require("qiwi-sdk");

// ✅ - The right way (since v3.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();

// ✅ - Also right way (but since v3.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();
Environment variables

The following environment variables were used in this example. It's recommended to store all data for API access in environment variables or in another protected place, but not in the code.

NameTypeDescription
QIWI_TOKENString(32 chars) - HexQiwi token got on https://qiwi.com/api
QIWI_WALLETString(10-16 chars) - DigitsWallet's phone number
QIWI_SECRET_KEY и QIWI_PUBLIC_KEYStringsKey pair created on https://qiwi.com/p2p-admin/transfers/api

Examples

Getting info about wallet
const wallet = Wallet.create(process.env.QIWI_TOKEN);

wallet.personProfile.getCurrent().then(console.log);
// => { contractInfo: {...}, authInfo: {...}, userInfo: {...} }
Sending payment
const wallet = Wallet.create(process.env.QIWI_TOKEN);

// 100 RUB from RUB account to QIWI (99) `79123456789` including commission
// All above can be configured
wallet.payments.quickPay({
  amount: 100,
  account: "79123456789"
});
Using P2P
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/...' }
Using Proxy
const { SocksProxyAgent } = require("socks-proxy-agent");

const wallet = Wallet.create(process.env.QIWI_TOKEN);
wallet.agent = new SocksProxyAgent("socks://login:password@host:port");

// do work here

// Remember to dispose agent
wallet.agent = undefined;

Express integration

const p2p = P2p.create(process.env.QIWI_SECRET_KEY);
const app = express();

app.post(
  "/webhook/qiwi",
  p2p.notificationMiddleware({}, (req, res) => {
    // Bill body
    console.log(req.body);

    // { "siteId": "9hh4jb-00", "billId": "cc961e8d-d4d6-4f02-b737-2297e51fb48e", ... }
  })
);

app.use((error, req, res, next) => {
  if (error instanceof P2pBillNotificationError) {
    // Somebody sent invalid notification
    console.log(error);
  }

  return next();
});
Full examples
  1. 🥝 Getting info about wallet
  2. 📬 Sending payment
  3. 🛠️ Using P2P api
  4. 🔐 Getting wallet limits (using ESM)
  5. 🤖 Telegram bot with direct payments (by wallet phone number)
  6. 🖥️ Shop on Express
  7. 🌐 Using proxy

Language: Русский | English

🎩 About the Project

License

Distributed under the MIT License. See LICENSE.txt for more information.

FOSSA Status

Project Goals

  • Cover all APIs (both for persons & legal entities)
    • API QIWI Wallet
    • Payments
    • Payouts
  • Keep versions backwards compatible
    • v2 и v3
    • v1 и v2
  • Ensure maximum reliability and code quality
    • Types: TypeScript
    • Tests: Jest, Codecov
    • Auto-tests in the repository: Github Actions
    • Linking: Eslint, Prettier, Editorconfig
    • Security: Eslint Plugin, Code QL, manual check in Snyk

Contributing

  1. ⁉️ Do not hesitate to create Issues
  2. 🛠️ If you want to contribute to code, follow CONTRIBUTING.md
  3. 💸 Also please donate 👉 https://qiwi.com/n/ALEXXGRIB
  4. 🌟 Or give this repo a star, if you liked this lib

Support

You can write issue, or if i am slow to answer it, you can DM me in

Telegram: @AlexXanderGrib

💜 YooMoney package

Interested in P2P acquiring in Russia?

Check out my other SDK for YooMoney (formerly Yandex.Money) 👉 github.com/AlexXanderGrib/yoomoney-sdk

Language: Русский | English

Keywords

FAQs

Package last updated on 22 May 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc