Документация
Платежи

PayPal

PayPal охватывает более 200 стран и регионов, поддерживает PayPal, Venmo, банковские карты и другие способы оплаты, а также имеет более 400 миллионов активных пользователей

В разработке

Адаптер PayPal сейчас разрабатывается и пока недоступен. Вы можете заранее выполнить настройки ниже, а после выхода адаптера сразу начать использовать его.

Быстрый старт

Создание аккаунта разработчика PayPal

Перейдите на PayPal Developer и зарегистрируйте аккаунт. После входа откройте Dashboard.

Создание REST API приложения

  1. Откройте страницу Apps & Credentials и нажмите Create App
  2. Укажите название приложения, выберите тип Merchant и создайте приложение
  3. Скопируйте Client ID и Client Secret в .env PayPal Client ID and Client Secret
PAYPAL_CLIENT_ID=your_client_id
PAYPAL_CLIENT_SECRET=your_client_secret

Их также можно указать в панели настроек.

Внимание

PAYPAL_CLIENT_SECRET — это чувствительная информация, не отправляйте ее в репозиторий.

Настройка Webhook

  1. На странице Apps & Credentials перейдите в Applications PayPal Applications
  2. Прокрутите вниз до вкладки Webhooks и нажмите Add Webhook
  3. Укажите адрес callback:
https://your-domain.com/api/payment/webhook/paypal
  1. Выберите события, которые нужно отслеживать:
  • CHECKOUT.ORDER.APPROVED
  • CHECKOUT.ORDER.COMPLETED
  • BILLING.SUBSCRIPTION.ACTIVATED
  • BILLING.SUBSCRIPTION.CANCELLED
  • BILLING.SUBSCRIPTION.PAYMENT.FAILED
  • PAYMENT.SALE.COMPLETED
  • PAYMENT.CAPTURE.REFUNDED
  • PAYMENT.SALE.REFUNDED
  1. После создания скопируйте Webhook ID в .env или укажите его в панели настроек: PayPal Webhook ID
PAYPAL_WEBHOOK_ID=your_webhook_id

Режим песочницы

PayPal предоставляет отдельную среду Sandbox для тестирования, в которой не выполняются реальные списания.

  1. На странице PayPal Dashboard переключитесь на вкладку Sandbox PayPal Sandbox

  2. PayPal автоматически предоставляет тестовые аккаунты, которые можно посмотреть на странице Sandbox Accounts. Тестовый аккаунт покупателя можно использовать для имитации оплаты

PayPal Sandbox Accounts

Подсказка

Для Webhook в песочнице нужен публично доступный адрес callback. При локальной разработке можно использовать обратный прокси, например Ngrok. Способ настройки описан в разделе про обратный прокси в документации Stripe.

Проверка конфигурации

Откройте главную страницу, прокрутите до блока pricing и нажмите кнопку покупки. Если вы переходите на страницу оплаты PayPal, значит настройка выполнена успешно.

Настройка цен

Для подписок PayPal сначала нужно создать Product и Plan в панели управления.

  1. Откройте PayPal Subscriptions и создайте Product
  2. Создайте Plan внутри Product и задайте цену и период биллинга
  3. Скопируйте Plan ID (формат P-xxx) в .env. При необходимости можно изменить имена переменных окружения, но они должны совпадать с кодом:
VITE_PAYPAL_PRO_MONTHLY_PRICE_ID=P-xxx
VITE_PAYPAL_PRO_YEARLY_PRICE_ID=P-xxx
VITE_PAYPAL_LIFETIME_PRICE_ID=P-xxx
  1. Измените src/config/payment-config.ts, чтобы суммы и периоды совпадали с настройками в PayPal:
export const paymentConfig: PlanWithPrice[] = [
  {
    id: "pro",
    planType: "subscription",
    credit: {
      amount: 100,
      expireDays: 31,
    },
    prices: [
      {
        priceId: import.meta.env.VITE_PAYPAL_PRO_MONTHLY_PRICE_ID!,
        amount: 990,              // значение в центах, 990 = $9.90
        currency,
        interval: "month",
        trialPeriodDays: 7,
      },
      {
        priceId: import.meta.env.VITE_PAYPAL_PRO_YEARLY_PRICE_ID!,
        amount: 9900,
        currency,
        interval: "year",
      },
    ],
    display: {
      isRecommended: true,
      group: "subscription",
    },
  },
  {
    id: "lifetime",
    planType: "lifetime",
    prices: [
      {
        priceId: import.meta.env.VITE_PAYPAL_LIFETIME_PRICE_ID!,
        amount: 19900,
        currency,
      },
    ],
    display: {
      originalPrice: 29900,
      group: "one-time",
    },
  },
]

Описание полей

ПолеОписание
idИдентификатор плана, по нему код находит нужный план
planTypefree бесплатно / subscription подписка / lifetime разовая покупка
credit.amountКоличество кредитов, которые выдаются после активации подписки
credit.expireDaysСрок действия кредитов, если не задан, они не истекают
priceIdID плана PayPal, копируется из Dashboard
amountЦена, в центах: 990 = $9.90
intervalПериод подписки, month или year
trialPeriodDaysКоличество дней бесплатного пробного периода
display.isRecommendedПоказывать ли метку рекомендации
display.originalPriceИсходная цена, используется для отображения зачеркнутой цены
display.groupИдентификатор группы, используется для группировки в UI

Содержание