UNPKG

@exact-team/freekassa-sdk-nestjs

Version:
214 lines (161 loc) 7.49 kB
# NestJS FreeKassa SDK Module ![GitHub top language](https://img.shields.io/github/languages/top/exact01/freekassa-sdk-nestjs) ![GitHub Repo stars](https://img.shields.io/github/stars/exact01/freekassa-sdk-nestjs) ![npm version](https://img.shields.io/npm/v/@exact-team/freekassa-sdk-nestjs) ![GitHub Tag](https://img.shields.io/github/v/tag/exact01/freekassa-sdk-nestjs) ![Build Status](https://img.shields.io/github/actions/workflow/status/exact01/freekassa-sdk-nestjs/.github/workflows/deploy-lib.yml) ![Downloads](https://img.shields.io/npm/dt/@exact-team/freekassa-sdk-nestjs) ![License](https://img.shields.io/npm/l/@exact-team/freekassa-sdk-nestjs) ![NPM Last Update](https://img.shields.io/npm/last-update/%40exact-team%2Ffreekassa-sdk-nestjs) ![Known Vulnerabilities](https://snyk.io/test/github/exact01/freekassa-sdk-nestjs/badge.svg) ![Coverage Status](https://img.shields.io/codecov/c/github/exact01/freekassa-sdk-nestjs) ## Описание FreeKassa SDK Module для NestJS - это модуль для интеграции платежной системы FreeKassa в ваши NestJS приложения. Модуль предоставляет удобный интерфейс для работы с API FreeKassa и автоматически управляет жизненным циклом SDK. ## Установка ```bash npm install @exact-team/freekassa-sdk-nestjs @exact-team/freekassa-sdk ``` ## Структура проекта ``` src/ ├── common/ # Общие утилиты и константы ├── decorators/ # Декораторы для внедрения зависимостей ├── interfaces/ # Интерфейсы и типы ├── freekassa-sdk-nestjs.module.ts # Основной модуль └── freekassa-sdk-nestjs.builder.ts # Билдер для конфигурации ``` ## Основные возможности - 🚀 Простая интеграция с NestJS приложениями - ⚡ Поддержка синхронной и асинхронной конфигурации - 🔄 Автоматическая очистка при завершении работы приложения - 🌐 Глобальная доступность модуля - 🎯 Пользовательский декоратор для простого внедрения зависимостей - 🔒 Типизация всех параметров и ответов API - 📦 Поддержка всех методов API FreeKassa ## Конфигурация ### Обязательные параметры - `key` - API ключ для подписи запросов - `secretWord1` - Первое секретное слово для подписи платежных форм - `secretWord2` - Второе секретное слово для проверки уведомлений - `shopId` - ID вашего магазина - `lang` - Язык интерфейса (`ru` или `en`) - `currency` - Валюта платежей (`RUB`, `USD`, `EUR`, `UAH`, `KZT`) - `payUrl` - URL платежной формы (по умолчанию: `https://pay.fk.money/`) - `apiUrl` - URL API (по умолчанию: `https://api.fk.life/v1/`) ## Использование ### Синхронная конфигурация ```typescript import { FreeKassaSdkNestjsModule } from '@exact-team/freekassa-sdk-nestjs'; @Module({ imports: [ FreeKassaSdkNestjsModule.forRoot({ key: 'your-api-key', secretWord1: 'your-secret-word-1', secretWord2: 'your-secret-word-2', shopId: 12345, lang: 'ru', currency: 'RUB', payUrl: 'https://pay.fk.money/', apiUrl: 'https://api.fk.life/v1/', }), ], }) export class AppModule {} ``` ### Асинхронная конфигурация ```typescript import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { ConfigService } from '@nestjs/config'; import { FreeKassaSdkNestjsModule } from '@exact-team/freekassa-sdk-nestjs'; import { IFreekassaModuleOptions } from '@exact-team/freekassa-sdk-nestjs'; @Module({ imports: [ FreeKassaSdkNestjsModule.forRootAsync({ imports: [ConfigModule], useFactory: async (configService: ConfigService): Promise<IFreekassaModuleOptions> => ({ key: configService.getOrThrow('FREEKASSA_API_KEY'), secretWord1: configService.getOrThrow('FREEKASSA_SECRET_WORD_1'), secretWord2: configService.getOrThrow('FREEKASSA_SECRET_WORD_2'), shopId: Number(configService.getOrThrow('FREEKASSA_SHOP_ID')), lang: 'ru', currency: 'RUB', payUrl: 'https://pay.fk.money/', apiUrl: 'https://api.fk.life/v1/', }), inject: [ConfigService], }), ], }) export class AppModule {} ``` ### Использование в сервисах ```typescript import { Injectable } from '@nestjs/common'; import { InjectFreeKassa } from '@exact-team/freekassa-sdk-nestjs'; import { FreeKassa } from '@exact-team/freekassa-sdk'; @Injectable() export class PaymentService { constructor(@InjectFreeKassa() private readonly freekassa: FreeKassa) {} async createPayment(amount: number, currency: string) { return this.freekassa.createPayment({ methodId: 1, email: 'customer@example.com', ip: '127.0.0.1', amount, paymentId: new Date().getTime().toString(), }); } async verifyNotification(notification: any) { return this.freekassa.verifyNotification(notification); } } ``` ## API ### FreeKassaSdkNestjsModule - `forRoot(options: IFreekassaModuleOptions)`: Статический метод для синхронной конфигурации модуля - `forRootAsync(options: AsyncModuleOptions)`: Статический метод для асинхронной конфигурации модуля ### Декораторы - `@InjectFreeKassa()`: Декоратор для внедрения экземпляра FreeKassa SDK ## Обработка ошибок Модуль предоставляет типизированные ошибки для всех возможных ситуаций: ```typescript try { await this.freekassa.createPayment({ methodId: 1, email: 'example@mail.ru', ip: '127.0.0.1', amount: 10, paymentId: new Date().getTime().toString(), }); } catch (error) { // Обработка ошибок FreeKassa console.error(error); } ``` ## Требования - Node.js 20+ - NestJS 10+ - TypeScript 5.0+ ## Разработка ### Сборка ```bash # Сборка проекта npm run build # Запуск линтера npm run lint ``` ### Линтинг Проект использует ESLint и Prettier для поддержания качества кода. ### Тестирование Для тестирования модуля рекомендуется: 1. Использовать тестовые API-ключи 2. Проверять все сценарии обработки ошибок 3. Верифицировать подписи платежных форм 4. Тестировать обработку уведомлений ## Лицензия ISC ## Автор exact01 ## Поддержка Для получения поддержки или сообщения об ошибках, пожалуйста, создайте issue в репозитории проекта.