YooMoney NodeJS SDK
![last commit](https://img.shields.io/github/last-commit/AlexXanderGrib/yoomoney-sdk?style=flat-square)
Содержание
Почему именно эта библиотека?
- Есть поддержка TypeScript
- Покрывает большую часть https://yoomoney.ru/docs/wallet
- Документация прямо в коде
- Всего 2 зависимости:
node-fetch
и redirect-form-builder
(для генерации html форм) - Есть API генерации frontend форм перенаправления для Авторизации и Оплаты
📦 Установка
NPM:
npm i -S yoomoney-sdk
Yarn:
yarn add yoomoney-sdk
✏️ Примеры
🔎 Получение информации о владельце кошелька
import { YMApi } from "yoomoney-sdk";
const token = "...";
const api = new YMApi(token);
api.accountInfo().then(console.log);
Который в консоль выведет
{
account: '41xxxxxxxxxx848',
balance: 34.18,
currency: '643',
account_type: 'personal',
identified: true,
account_status: 'identified',
balance_details: { total: 34.18, available: 34.18 }
}
💸 Отправка перевода
import { YMApi, ymTypes } from "yoomoney-sdk";
const api = new YMApi(process.env.YM_TOKEN);
type PayoutMethod = "qiwi" | "yoomoney" | "card" | "mobile";
function getRequest(
method: PayoutMethod,
account: string,
amount: number
): ymTypes.RequestPaymentParams {
switch (method) {
case "yoomoney":
return {
amount,
pattern_id: "p2p",
to: account
};
case "qiwi":
return {
rapida_param1: account.slice(1),
netSum: amount.toString(),
pattern_id: "97186",
ShopID: "135960",
ShowCaseID: "44",
ShopArticleID: "434586"
};
case "mobile":
return {
pattern_id: "phone-topup",
"phone-number": account,
amount
};
case "card":
throw new Error("Метод недоступен");
}
}
async function sendPayment(method: PayoutMethod, account: string, amount: number) {
const request = await api.requestPayment(getRequest(method, account, amount));
const response = await api.processPayment({
money_source: "wallet",
request_id: request.request_id
});
console.log(response);
}
sendPayment("yoomoney", "410016348581848", 100);
Приём платежей
const express = require("express");
const app = express();
const { YMPaymentFromBuilder, YMFormPaymentType } = require("yoomoney-sdk");
const port = parseInt(process.env.PORT);
app.get("/pay", (_req, res) => {
const builder = new YMPaymentFromBuilder()
.setQuickPayForm("shop")
.setAmount((300 * 74.3).toFixed(2))
.requirePhone()
.setSuccessURL(`http://localhost:${port}/success`)
.setPaymentType(YMFormPaymentType.FromCard)
.setReceiver("410016348581848")
.setLabel("payment-001")
.setComment("За ♂️Fisting♂️");
res.whiteHead(200, "OK", {
"Content-Type": "text/html; charset=utf-8"
});
res.end(builder.buildHtml(true));
});
app.get("/success", (_req, res) => {
res.end("Спасибо за покупку!");
});
app.listen(port);
Небольшое НО
Если API возвращает ошибку (то-есть поле error
в ответе), то библиотека кидает ошибку YMApiError
, которая содержит поля:
code
- Значение поля error
в ответеresponse
- Ответ полностью
ℹ️ Доп. информация
🇬🇧: Additional info
🧑⚖️ Лицензия
🇬🇧: License
MIT
❤️ Контрибьютинг
🇬🇧: Contributing
Что делаем?:
- ⁉️ Не стесняемся писать Issue
- 🛠️ Если хотите что-то поправить следуйте гайду
CONTRIBUTING.md
- 💸 Донатим 👉 https://sobe.ru/na/yoomoney_sdk
- 🌟 Ставим звёздочки, если библиотека понравилась.
🙋 Поддержка
🇬🇧: Support
Библиотека - маленькая, я отвечаю быстро. Не стесняйтесь писать Issue, даже если кажется что они глупые. Если что, можете писать в
Telegram: @AlexXanderGrib
Интересует приём и отправка P2P платежей по РФ на NodeJS?
У нас есть точно такое-же типизированное SDK для QIWI 👉 github.com/AlexXanderGrib/node-qiwi-sdk