UNPKG

payme-integration

Version:

NestJS integration module for Payme payment system

155 lines (126 loc) 3.18 kB
# payme-integration NestJS module for integrating Payme payment system into your NestJS applications. ## Installation ```bash npm install payme-integration ``` ## Features - Full Payme Merchant API implementation - Built-in authentication guard - MongoDB integration - TypeScript support - Error handling - Transaction state management ## Usage 1. Create PaymeStrategy: ```typescript import { Injectable } from '@nestjs/common' import { InjectModel } from '@nestjs/mongoose' import { Model, Types } from 'mongoose' import { IPaymeStrategy, Order, OrderStatus, PaymeTransaction, } from 'payme-integration' import { Donation, DonationDocument, PaymentProvider, } from 'src/models/donation.schema' @Injectable() export class PaymeStrategy implements IPaymeStrategy { constructor( @InjectModel(Donation.name) private readonly donationModel: Model<DonationDocument>, ) {} async getOrderByAccount(account: { user_id: string }): Promise<Order | null> { const donation = await this.donationModel.findOne({ user: account.user_id, status: OrderStatus.ReadyForPayment, }) if (donation) { return { id: donation.user.toString(), status: donation.status, amount: donation.amount, } } return null } async successPayment(transaction: PaymeTransaction): Promise<void> { const account = transaction.account as { user_id: string } await this.donationModel.findOneAndUpdate( { user: new Types.ObjectId(account.user_id), status: OrderStatus.ReadyForPayment, }, { status: transaction.status, paid_time: new Date(transaction.create_time), payment_provider: PaymentProvider.PAYME, }, ) } } ``` 2. Configure Module: ```typescript import { Module } from '@nestjs/common'; import { PaymeModule } from '@globalmove/payme-integration'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { MongooseModule } from '@nestjs/mongoose'; @Module({ imports: [ ConfigModule.forRoot(), MongooseModule.forRoot('mongodb://localhost/your-db'), MongooseModule.forFeature([ { name: YourModel.name, schema: YourModelSchema }, ]), PaymeModule.forRootAsync({ paymeStrategy: PaymeStrategy, imports: [ ConfigModule, MongooseModule.forFeature([ { name: YourModel.name, schema: YourModelSchema }, ]), ], inject: [ConfigService], useFactory: async (configService: ConfigService) => ({ username: configService.get('PAYME_LOGIN'), password: configService.get('PAYME_PASSWORD'), }), isGlobal: true, }), ], }) export class AppModule {} ``` ## Environment Variables ```env PAYME_LOGIN=Paycom PAYME_PASSWORD=YOUR_MERCHANT_KEY ``` ## API Methods - CheckPerformTransaction - CreateTransaction - PerformTransaction - CancelTransaction - CheckTransaction - GetStatement ## Transaction States ```typescript enum TransactionState { STATE_NEW = 1, STATE_IN_PROGRESS = 2, STATE_DONE = 3, STATE_CANCELLED = 4, STATE_POST_CANCELLED = 5 } ``` ## Author Globalmove ## License MIT