UNPKG

yoomoney-sdk

Version:

⭐ Typed YooMoney Wallet SDK for NodeJS. Supported API's: Auth, Wallet & Notifications

182 lines (181 loc) 7.01 kB
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; }