Leyla №42 sifarişini açır və «Ödə» düyməsini basır. Serveriniz nə etməlidir? Kartı qəbul etməməli (niyə — 038-ci dərsdə gördük), əvəzinə Stripe-da Checkout Session yaradıb müştərini hazır ödəniş səhifəsinə göndərməlidir. Bu dərsdə hadisələr layihəsindəki mağazaya Stripe qoşacağıq: açarları hazırlayacağıq, məhsulu və qiyməti təsvir edəcəyik, sessiya yaradacağıq, müştəridən gələn qiymətə güvənməməyi öyrənəcəyik və «Təşəkkürlər» səhifəsinin niyə heç nəyi sübut etmədiyini anlayacağıq.

Checkout necə işləyir

Stripe Checkout — Stripe tərəfindəki hazır ödəniş səhifəsidir: kartları və digər ödəniş üsullarını qəbul edir, 3-D Secure-u özü göstərir, alıcıların dillərinə tərcümə olunur və telefonda rahatdır. Sizə yalnız Checkout Session yaratmaq qalır — müştərinin nəyi ödədiyini (məhsullar, məbləğ, valyuta, qayıdış ünvanları) təsvir edən obyekt — və müştərini session.url ünvanına göndərmək.

Bənzətmə: ofisiant (sizin serveriniz) hesabı rəsmiləşdirir və qonağı Stripe kassasına aparır. Qonaq ödəyir və əlində çekle qayıdır, amma qonağın əlindəki çek pulun çatdığı demək deyil.

Checkout ardıcıllığı: brauzer, sizin server, Stripe, success_url-a qayıdış və ayrıca webhook
Checkout ardıcıllığı: brauzer, sizin server, Stripe, success_url-a qayıdış və ayrıca webhook

1–4-cü addımlar: düymə marşrutunuzu çağırır, server Stripe-da sessiya yaradır və url alır. 5–6-cı addımlar: brauzer Stripe səhifəsinə keçir, müştəri ödəyir və Stripe onu success_url ünvanına qaytarır. 7-ci addım brauzerdən ayrıca gedir: Stripe sizin webhook-u çağırır (040-cı dərs).

Açarlar və hazırlıq

Dashboard-da (sandbox) Developers → API keys bölməsini açın. Orada iki açar var: publishable pk_test_… (brauzerdə göstərmək təhlükəsizdir; Checkout-a yönləndirmə üçün lazım deyil) və secret sk_test_… (yalnız server üçün). Prodakşn mühitində Stripe minimum səlahiyyətli restricted açarları rk_… məsləhət görür. Açarı .env faylında saxlayın:

bash
# .env  (never commit this file)
STRIPE_SECRET_KEY=sk_test_51...
APP_URL=http://localhost:3000

SDK-nı npm install stripe əmri ilə quraşdırın (Node.js 20+ lazımdır). 22-ci versiyadan Stripe sinifdir və obyekt yalnız new ilə yaradılır:

js
// src/stripe.js
import Stripe from 'stripe';

export const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);

Products və Prices

Stripe-da məhsulu iki obyektlə təsvir edirlər. Product — nə satdığınız (ad, təsvir, şəkil). Price — nə qədər və nə tezlikdə: ən kiçik vahidlərlə məbləğ, valyuta, birdəfəlik və ya təkrarlanan ödəniş. Bir məhsulun bir neçə qiyməti ola bilər. Qiymət redaktə edilmir: yeni məbləğ üçün yeni qiymət yaradır, köhnəni arxivləşdirirlər, çünki köhnə qiymət keçmiş ödənişlərin qeydi olaraq qalır.

Onları Dashboard-da (Product catalog bölməsi) və ya API vasitəsilə yaratmaq olar:

js
// scripts/create-price.js  (run once)
import { stripe } from '../src/stripe.js';

const product = await stripe.products.create({ name: 'Node.js Handbook' });

await stripe.prices.create({
  product: product.id,
  currency: 'azn',
  unit_amount: 2500, // 25.00 AZN in minor units
});

prod_… və price_… identifikatorları sonra line_items-ə qoyulur: { price: 'price_…', quantity: 2 }.