برنامه نویسی

مدیریت ماژول پرداخت در NestJS

ادغام یک ماژول پرداخت در برنامه NestJS شما می تواند تراکنش های یکپارچه را برای کاربران شما فعال کند. در این راهنما، شما را از طریق یکپارچه سازی راهنمایی می کنیم راه راه به برنامه NestJS شما.

1. برنامه NestJS خود را راه اندازی کنید

با راه اندازی پروژه NestJS خود شروع کنید. اگر قبلاً این کار را انجام نداده اید، آن را نصب کنید NestJS CLI و یک برنامه جدید ایجاد کنید:

npm i -g @nestjs/cli
nest new my-app
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به دایرکتوری پروژه جدید ایجاد شده بروید:

cd my-app
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

2. Stripe و Necessary Packages را نصب کنید

برای ادغام Stripe، باید بسته Stripe و سایر وابستگی های ضروری را نصب کنیم:

npm install stripe @nestjs/config
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • راه راه: بسته رسمی Stripe برای Node.js.
  • @nestjs/config: برای مدیریت پیکربندی در NestJS.

3. کلیدهای Stripe API را پیکربندی کنید

هنگامی که وابستگی های لازم را دارید، باید کلیدهای API خود را پیکربندی کنید. برای دریافت خود به داشبورد Stripe بروید تست کنید و زندگی می کنند کلیدهای API

a ایجاد کنید .env برای ذخیره کلیدهای Stripe خود در ریشه پروژه خود فایل کنید:

STRIPE_SECRET_KEY=your_stripe_secret_key_here
STRIPE_WEBHOOK_SECRET=your_stripe_webhook_secret_here
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

4. Webhooks در Stripe

وب هوک چیست؟

الف وب هوک در Stripe راهی برای Stripe است تا برنامه شما را در مورد رویدادهایی که در حساب Stripe شما رخ می دهد مطلع کند. این مکانیزمی است که به شما امکان می‌دهد به‌روزرسانی‌های بلادرنگ از Stripe درباره رویدادهای خاص مانند پرداخت‌های موفق، تمدید اشتراک، اختلافات و غیره دریافت کنید.

وب هوک برای چه مواردی استفاده می شود؟

  • اعلان های زمان واقعی: یک وب هوک به Stripe این امکان را می دهد که در صورت وقوع رویدادهای خاصی مانند پرداخت موفق یا وضعیت پرداخت به روز، برنامه شما را مطلع کند.

  • رسیدگی به موفقیت یا شکست پرداخت: به عنوان مثال، هنگامی که پرداخت کامل می شود، Stripe رویدادی را به نقطه پایانی وب هوک شما ارسال می کند تا به شما اطلاع دهد. این به شما کمک می‌کند رابط کاربری را به‌روزرسانی کنید یا اقدامات مناسب (مانند ارسال ایمیل تأیید یا به‌روزرسانی وضعیت سفارش) انجام دهید.

  • امنیت: Webhook ها اطمینان حاصل می کنند که شما در مورد تغییرات در سمت Stripe مطلع می شوید، بنابراین می توانید به طور ایمن اقدامات حساس مربوط به پرداخت را در باطن خود انجام دهید.

  • پردازش ناهمزمان: پردازش برخی از اقدامات، مانند مجوز پرداخت، ممکن است به زمان نیاز داشته باشد. Webhooks اطمینان حاصل می کند که پس از نهایی شدن وضعیت پرداخت، حتی اگر کاربر قبلاً سایت را ترک کرده باشد یا پرداخت را از طریق روش دیگری (مانند کیف پول تلفن همراه) انجام داده باشد، به شما اطلاع داده می شود.

چرا وب هوک ها مهم هستند؟

  • به روز رسانی در زمان واقعی: آنها به سیستم شما اجازه می دهند تا بلافاصله به رویدادها واکنش نشان دهد، حتی اگر کاربر به طور فعال با برنامه شما تعامل نداشته باشد.
  • دقت: Webhook ها اطمینان حاصل می کنند که سیستم شما همیشه با Stripe همگام است، به خصوص زمانی که وضعیت پرداخت ها یا اشتراک تغییر می کند.
  • مقیاس پذیری: می‌توانید برای اطلاع‌رسانی به سیستم خود در مورد رویدادهای کلیدی، به Stripe اعتماد کنید و نیاز به نظرسنجی مکرر از Stripe برای به‌روزرسانی‌ها را از بین ببرید.

به طور خلاصه، وب هوک ها برای مدیریت پرداخت ها و اقدامات مرتبط به شیوه ای مقیاس پذیر، بلادرنگ و ایمن در ادغام Stripe شما ضروری هستند.

5. سرویس Stripe را راه اندازی کنید

اکنون، بیایید یک سرویس برای رسیدگی به درخواست های پرداخت Stripe، از جمله تأیید وب هوک ایجاد کنیم.

یک سرویس Stripe ایجاد کنید

nest generate service stripe
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در stripe.service.ts، سرویس Stripe را پیکربندی کنید و منطق مدیریت وب هوک را پیاده سازی کنید:

import { Injectable, Logger } from '@nestjs/common';
import Stripe from 'stripe';
import { ConfigService } from '@nestjs/config';

@Injectable()
export class StripeService {
  private stripe: Stripe;
  private readonly logger = new Logger(StripeService.name);

  constructor(private configService: ConfigService) {
  const secretKey = this.configService.get('STRIPE_SECRET_KEY');
  this.stripe = new Stripe(secretKey, {
    apiVersion: '2022-08-01',
  });
  }

  async createPaymentIntent(amount: number) {
  return this.stripe.paymentIntents.create({
    amount,
    currency: 'usd',
  });
  }

  async handleWebhook(payload: any, sig: string) {
  const webhookSecret = this.configService.get('STRIPE_WEBHOOK_SECRET');

  try {
    const event = this.stripe.webhooks.constructEvent(payload, sig, webhookSecret);

    switch (event.type) {
    case 'payment_intent.succeeded':
      this.logger.log('Payment Intent was successful!', event.data.object);
      break;
    case 'payment_intent.failed':
      this.logger.log('Payment Intent failed!', event.data.object);
      break;
    // Handle other events
    default:
      this.logger.warn(`Unhandled event type: ${event.type}`);
    }

  } catch (err) {
    this.logger.error('Error verifying webhook signature', err);
    throw new Error('Webhook verification failed');
  }
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح:

  • راه اندازی راه راه: Stripe را با استفاده از کلید مخفی از پیکربندی محیط مقداردهی اولیه می کنیم.
  • ایجاد قصد پرداخت: createPaymentIntent تابع یک هدف پرداخت جدید ایجاد می کند که می توانیم برای پردازش پرداخت استفاده کنیم.
  • مدیریت وب هوک: handleWebhook تابع به رویدادهای Stripe مانند گوش می دهد payment_intent.succeeded یا payment_intent.failed و بر این اساس با آنها برخورد می کند. صحت رویداد با استفاده از راز webhook تأیید می شود.

6. یک کنترل کننده پرداخت ایجاد کنید

برای رسیدگی به درخواست‌های پرداخت، یک کنترل‌کننده ایجاد کنید:

nest generate controller stripe
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در stripe.controller.ts، یک نقطه پایانی برای شروع پرداخت و دیگری برای دریافت وب هوک از Stripe ایجاد کنید:

import { Controller, Post, Body, Headers } from '@nestjs/common';
import { StripeService } from './stripe.service';

@Controller('payments')
export class StripeController {
  constructor(private readonly stripeService: StripeService) {}

  @Post('create-payment-intent')
  async createPaymentIntent(@Body() body: { amount: number }) {
  return this.stripeService.createPaymentIntent(body.amount);
  }

  @Post('webhook')
  async handleWebhook(@Body() payload: any, @Headers() headers: any) {
  const sig = headers['stripe-signature'];
  return this.stripeService.handleWebhook(payload, sig);
  }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

7. تست ماژول پرداخت

برای آزمایش عملکرد پرداخت، سرور NestJS را اجرا کنید:

npm run start
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون می توانید درخواست POST را به /payments/create-payment-intent نقطه پایانی با بدنه JSON حاوی مقدار (به سنت):

{
  "amount": 5000
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این یک قصد پرداخت 50 دلاری ایجاد می کند. می توانید از ابزارهایی مانند پستچی یا CURL برای تست API

8. یکپارچه سازی Frontend

هنگامی که backend راه اندازی شد، می توانید از Stripe استفاده کنید Stripe.js و عناصر برای رسیدگی به فرم های پرداخت پیشخوان برای جزئیات بیشتر در مورد ادغام Stripe در سمت مشتری، به مستندات رسمی Stripe مراجعه کنید.

نتیجه گیری

در این آموزش، سیستم پرداخت Stripe را با موفقیت در یک برنامه NestJS ادغام کردیم. این راه‌اندازی یک نقطه شروع است و می‌توانید آن را بیشتر بر اساس نیازهای کسب‌وکار خود سفارشی کنید. با این راه‌اندازی، اکنون راهی ساده و ایمن برای پرداخت‌ها در برنامه‌های NestJS خود دارید.


کد نویسی مبارک!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا