QIWI SDK for node: P2P Payments & Wallet management
π ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π° Π ΡΡΡΠΊΠΎΠΌ π·πΊ π
Language: Π ΡΡΡΠΊΠΈΠΉ | English
- Full. Covers the following APIs: Wallet Personal, P2P Payments;
- Simple. All methods are named as in QIWI documentation and collected into subclasses. All methods have JSDoc comments. Lot of examples.
- Reliable. The library is written in TypeScript and covered by tests.
- Secure. The library has only 1 dependency (axios) and is constantly scanned by Code QL and Snyk for vulnerabilities.
- Compatible. Code from version
1.1.0
(18 Jan. 2020) will work on version4.0.0
(26 May 2022) with little changes. Alsoqiwi-sdk
provides classes to make migration from similar libs effortless.
Language: Π ΡΡΡΠΊΠΈΠΉ | English
- Using
npm
npm i qiwi-sdk
- Using
Yarn
yarn add qiwi-sdk
- Using
pnpm
pnpm add qiwi-sdk
Language: Π ΡΡΡΠΊΠΈΠΉ | English
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 Modules
import { P2p, Wallet, Detector } from "qiwi-sdk";
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.
Class (v3) | Documentation by QIWI | Recommended var name | |
---|---|---|---|
Wallet |
Personal |
https://developer.qiwi.com/en/qiwi-wallet-personal | wallet (or qiwi ) |
P2p |
P2P |
https://developer.qiwi.com/en/p2p-payments | p2p |
P2p |
- | https://developer.qiwi.com/en/bill-payments | p2p (or payments ) |
Detector |
DetectorCompat |
https://developer.qiwi.com/en/qiwi-wallet-personal/#search-providers | detector |
To see detailed documentation on a class, click on its name.
- Migration from version 2 to 3;
- Migration from version 1 to 2 (just in case);
- Migration from
node-qiwi
; - Migration from
@qiwi/bill-payments-node-js-sdk
.
const { Wallet, P2p, Detector } = require("qiwi-sdk");
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();
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.
Name | Type | Description |
---|---|---|
QIWI_TOKEN |
String(32 chars) - Hex | Qiwi token got on https://qiwi.com/api |
QIWI_WALLET |
String(10-16 chars) - Digits | Wallet's phone number |
QIWI_SECRET_KEY ΠΈ QIWI_PUBLIC_KEY |
Strings | Key pair created on 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 RUB from RUB account to QIWI (99) `79123456789` including commission
// All above can be configured
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");
// do work here
// Remember to dispose agent
wallet.agent = undefined;
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();
});
- π₯ Getting info about wallet
- π¬ Sending payment
- π οΈ Using P2P api
- π Getting wallet limits (using ESM)
- π€ Telegram bot with direct payments (by wallet phone number)
- π₯οΈ Shop on Express
- π Using proxy
Language: Π ΡΡΡΠΊΠΈΠΉ | English
Distributed under the MIT License. See LICENSE.txt for more information.
βοΈ Do not hesitate to create Issues- π οΈ If you want to contribute to code, follow
CONTRIBUTING.md
- πΈ Also please donate π https://qiwi.com/n/ALEXXGRIB
- π Or give this repo a star, if you liked this lib
You can write issue, or if i am slow to answer it, you can DM me in
Telegram: @AlexXanderGrib
Interested in P2P acquiring in Russia?
Check out my other SDK for YooMoney (formerly Yandex.Money) π github.com/AlexXanderGrib/yoomoney-sdk
Language: Π ΡΡΡΠΊΠΈΠΉ | English