yoomoney-sdk
Version:
⭐ Typed YooMoney Wallet SDK for NodeJS. Supported API's: Auth, Wallet & Notifications
182 lines (181 loc) • 7.01 kB
TypeScript
import { RequestHandler } from 'express';
export type NotificationDTO = {
/**
* Для переводов из кошелька — `p2p-incoming`.
*
* Для переводов с произвольной карты — `card-incoming`.
*/
notification_type: "p2p-incoming" | "card-incoming";
/** Идентификатор операции в истории счета получателя. */
operation_id: string;
/** Сумма, которая зачислена на счет получателя. */
amount: number;
/** Сумма, которая списана со счета отправителя. */
withdraw_amount: number;
/** Код валюты — всегда `643` (рубль РФ согласно ISO 4217). */
currency: "643";
/** Дата и время совершения перевода. */
datetime: string;
/**
* Для переводов из кошелька — номер кошелька отправителя.
*
* Для переводов с произвольной карты — параметр содержит пустую
* строку.
*/
sender: string;
/**
* Признак того, что перевод защищен кодом протекции. В ЮMoney больше нельзя делать переводы с кодом протекции, поэтому параметр всегда имеет значение `false`.
*/
codepro: boolean;
/**
* Метка платежа. Если ее нет, параметр содержит пустую строку.
*/
label: string;
/** SHA-1 hash параметров уведомления. */
sha1_hash: string;
test_notification: boolean;
/**
* Перевод еще не зачислен. Получателю нужно освободить место
* в кошельке или использовать код протекции (если `codepro=true`).
*/
unaccepted: boolean;
/**
* Фамилия.
*
* @deprecated **Больше не предоставляется ЮMoney**
*/
lastname?: string;
/**
* Имя.
*
* @deprecated **Больше не предоставляется ЮMoney**
* */
firstname?: string;
/**
* Отчество.
*
* @deprecated **Больше не предоставляется ЮMoney**
* */
fathersname?: string;
/**
* Адрес электронной почты отправителя перевода. Если почта не
* запрашивалась, параметр содержит пустую строку.
*
* @deprecated **Больше не предоставляется ЮMoney**
*/
email?: string;
/**
* Телефон отправителя перевода. Если телефон не запрашивался,
* параметр содержит пустую строку.
*
* @deprecated **Больше не предоставляется ЮMoney**
*/
phone?: string;
/**
* Город.
*
* @deprecated **Больше не предоставляется ЮMoney**
**/
city?: string;
/**
* Улица.
*
* @deprecated **Больше не предоставляется ЮMoney**
* */
street?: string;
/**
* Дом.
*
* @deprecated **Больше не предоставляется ЮMoney**
* */
building?: string;
/**
* Корпус.
*
* @deprecated **Больше не предоставляется ЮMoney**
* */
suite?: string;
/**
* Квартира.
*
* @deprecated **Больше не предоставляется ЮMoney**
* */
flat?: string;
/**
* Индекс.
*
* @deprecated **Больше не предоставляется ЮMoney**
* */
zip?: string;
};
/**
* Ошибка проверки уведомления от YooMoney
*/
export declare class YMNotificationError extends Error {
constructor(message: string);
}
/**
* Класс, который реализует [механизм проверки уведомлений от YooMoney](https://yoomoney.ru/docs/wallet/using-api/notification-p2p-incoming#security)
*
* @see {@link https://yoomoney.ru/docs/wallet/using-api/notification-p2p-incoming#security|Описание механизма}
*/
export declare class NotificationChecker {
private readonly secret;
/**
* Creates an instance of NotificationChecker.
* @param {string} secret Секретное слово
*/
constructor(secret: string);
/**
* Проверяет полученное уведомление и возвращает типизированную версию
*
* @throws {YMNotificationError} Если хеш уведомления не совпадает
* @param {Object} notification Объект уведомления
* @return {NotificationDTO}
*/
check(notification: Record<keyof NotificationDTO, string>): NotificationDTO;
/**
*
* Упрощает интеграцию с `express`
* @deprecated **Экспресс морально устарел - вызывайте {@link check} самостоятельно**
*
* - Это middleware кидает ошибки, позаботьтесь об их обработке
*
* @param {Object} [options={}] Параметры обработки запроса
* @param {boolean} [options.memo=true] Флаг для включения/отключения пропуска повторяющихся запросов, если один из них был успешно обработан
* @param {RequestHandler<Record<string, string>, any, NotificationDTO>=} actualHandler
* @return {RequestHandler}
*
* ##### Пример:
* **В начале файла**
* ```js
* const nc = new YMNotificationChecker(process.env.YM_SECRET);
*
* ```
* *`Вариант 1 - Классический`*
*
* ```js
* app.post('/webhook/yoomoney', nc.middleware(), (req, res) => {
* req.body // Это `NotificationDTO`
* })
* ```
*
* *`Вариант 2 - Если нужны подсказки типов`*
*
* ```js
* app.post('/webhook/yoomoney', nc.middleware({}, (req, res) => {
* req.body // Это `NotificationDTO`
* }))
* ```
*
* **Обработка ошибок**
* ```js
* app.use((error, request, response, next) => {
* console.log(error); // [YMNotificationError: Notification hash mismatch]
* })
* ```
*/
middleware(options?: {
memo?: boolean;
}, actualHandler?: RequestHandler<Record<string, string>, any, NotificationDTO>): RequestHandler;
}