Гид по технологиям

Интеграция PayPal в React — пошаговое руководство

9 min read Электронная коммерция Обновлено 02 Jan 2026
Интеграция PayPal в React — шаг за шагом
Интеграция PayPal в React — шаг за шагом

Логотип PayPal на iPhone

В сфере электронной коммерции цифровые платёжные решения помогают увеличить выручку и упростить работу с международными платежами. PayPal предоставляет гибкий и проверенный механизм для обработки онлайн‑транзакций. Интегрируя PayPal в веб‑приложение, вы обеспечиваете клиентам удобный и безопасный путь оплаты, что повышает вероятность покупки и доверие к бренду.

Ниже — подробная инструкция по интеграции PayPal в React‑приложение, плюс дополнительные рекомендации по тестированию, безопасности и приёмке.

Что вам понадобится

  • Аккаунт PayPal (для доступа к панели разработчика).
  • React‑проект (create‑react‑app или аналог).
  • Базовые знания React: хуки useState, useEffect, useRef.
  • Доступ к файлу public/index.html для подключения SDK.

Настройка PayPal Sandbox аккаунта

PayPal Sandbox — тестовая среда PayPal, позволяющая безопасно тестировать интеграции без реальных денег. В песочнице доступны те же возможности, что и в продакшн‑окружении, но все кошельки виртуальные.

Логотип PayPal

  1. Перейдите в PayPal Developer Console и войдите под своим PayPal‑аккаунтом.
  2. На панели разработчика выберите «Sandbox Accounts».

Кнопка настроек Sandbox Accounts

Для полноты тестирования потребуется два sandbox‑аккаунта: бизнес‑аккаунт и личный (покупатель). Так вы сможете прогонять сценарии с обеих сторон — как покупатель и как продавец.

  1. Нажмите «Create account» и создайте один личный (Personal) и один коммерческий (Business) аккаунт.

Страница создания sandbox аккаунтов

На странице настроек создайте сначала personal, затем business. Личные учётные данные используются для входа как покупатель; бизнес‑учётная запись потребуется для создания приложения и получения client ID.

Страница создания личного и бизнес аккаунтов

Примечание: вы можете использовать и стандартные sandbox‑аккаунты, которые предоставляет PayPal по умолчанию.

Создание PayPal проекта (App) в панели разработчика

На панели разработчика откройте «Apps and Credentials», нажмите «Create App», укажите имя приложения, в качестве аккаунта выберите Merchant (или Business) и привяжите ранее созданный бизнес‑аккаунт. Скопируйте client ID приложения — он понадобится на клиенте.

Создание приложения в PayPal

Настройка React‑клиента

Откройте public/index.html и вставьте подключение PayPal SDK в секцию , подставив ваш client ID. Пример:

        `      
`

Скрипт подгружает PayPal JavaScript SDK — клиентскую библиотеку для взаимодействия с API PayPal. SDK предоставляет возможности создания кнопки оплаты и работы с потоками платежа.

Язык SDK и валюта задаются через параметры запроса (здесь — currency=USD). При необходимости замените USD на нужную валюту.

Код проекта доступен в репозитории проекта (указывать ссылку можно в вашей документации).

Создание компонент в React

Создайте в /src папку components и добавьте два файла: Product.js и PayPalCheckout.js. Ниже — объяснение, как устроены эти файлы и какие хуки используются.

Product.js — компонент товара

Файл Product.js рендерит карточку товара с изображением, описанием и ценой. В исходном примере используется локальная картинка и CSS‑класс.

        `import React, { useState } from "react";  
import "./product.style.css";  
import "../assests/laptop.jpg";  
function App() {  
  return (  
    
      
        
          laptop         
        
          

MacBook Pro

          

            Lorem ipsum dolor sit amet consectetur adipisicing elit.            Maxime mollitia,molestiae quas vel sint commodi repudiandae            consequuntur.           

          

Price: $350.00

        
      
    
  ); } export default App;`

Пояснение: компонент прост — он показывает товар и цену. В реальном проекте цену и описание лучше передавать через props или получать с сервера.

PayPalCheckout.js — компонент оформления

PayPalCheckout.js содержит логику создания и рендеринга кнопки PayPal, обработки событий onApprove и onError, а также переключения статуса транзакции.

        `import React, { useRef, useEffect, useState } from "react";  
import PaymentFailure from "./PaymentFailure";  
import PaymentSuccess from "./PaymentSuccess";  
  
function PayPalCheckout() {  
  const paypal = useRef();  
  const [transactionStatus, setTransactionStatus] = useState(null);  
  
  useEffect(() => {  
    window.paypal  
      .Buttons({  
        createOrder: (data, actions, err) => {  
          return actions.order.create({  
            intent: "CAPTURE",  
            purchase_units: [  
              {  
                description: "MacBook Laptop",  
                amount: {  
                  currency_code: "USD",  
                  value: 350.00,  
                },  
              },  
            ],  
          });  
        },  
        onApprove: async (data, actions) => {  
          const order = await actions.order.capture();  
  
          console.log("success", order);  
          setTransactionStatus("success");  
        },  
        onError: (err) => {  
          console.log(err);  
          setTransactionStatus("failure");  
        },  
      })  
      .render(paypal.current);  
  }, []);  
  
  if (transactionStatus === "success") {  
    return ;  
  }  
  
  if (transactionStatus === "failure") {  
    return ;  
  }  
  
  return (  
    
      
    
  ); } export default PayPalCheckout; `

Ключевые моменты:

  • useRef — контейнер для кнопки PayPal.
  • useEffect — инициализация и рендер кнопки один раз при монтировании.
  • createOrder — формирует заказ, включая описание и сумму.
  • onApprove — выполняется после успешной авторизации/захвата оплаты.
  • onError — обработка ошибок и переключение статуса.

Создайте простые компоненты PaymentSuccess.js и PaymentFailure.js, которые выводят сообщение о результате транзакции.

Обновление App.js

В src/App.js используйте условный рендеринг: сначала показывайте карточку товара, затем по клику — компонент оформления заказа.

        `import React, { useState } from "react";  
import Product from "./components/Product";  
import PayPalCheckout from "./components/PayPalCheckout";  
import "./App.css";  
  
function App() {  
  const [checkout, setCheckOut] = useState(false);  
  
  return (  
      
        
          {checkout ? (                        ) : (             
                                          
          )}         
      
  ); } export default App; `

Поведение: при нажатии на кнопку происходит переключение на компонент PayPalCheckout, где и запускается виджет оплаты.

Интеграция PayPal

Пояснения и рекомендации по коду

  • Не храните client ID и секреты в публичных местах. Client ID можно оставить на клиенте; секретный ключ храните только на сервере.
  • Для создания заказа и финального подтверждения платежа в боевом окружении рекомендуется делать capture платежа на сервере (server‑side capture) для большей безопасности и гибкости.
  • Обрабатывайте ошибки надежно: логируйте ошибки (без секретов), показывайте пользователю понятные сообщения и предлагайте альтернативный путь оплаты на случай проблем.

Дополнительные возможности PayPal

PayPal предлагает фичи: One Touch (быстрая оплата без повторного ввода данных), PayPal Credit (оплата в кредит), подписки (subscriptions) и рекуррентные платежи. Если ваш бизнес использует подписки, изучите отдельные API для Subscriptions.

Когда встроенный PayPal‑виджет не подходит

  • Если нужен полностью кастомный UX или платежи через локальные методы, которые не поддерживаются PayPal.
  • Если требуется сложная логика split‑payments или marketplace‑распределение — возможно, стоит рассмотреть специализированные решения (Stripe Connect, Adyen, локальные эквайеры).

Альтернативные подходы

  • Server‑side Orders API: создавайте заказ на сервере, возвращайте order ID клиенту, подтверждайте capture на сервере.
  • Использовать Webhooks PayPal для асинхронной обработки событий (оплата, возврат, отмена).
  • Если нужна локальная валюта и способы оплаты (например, для России/ЕАЭС) — комбинировать PayPal с локальными платежными провайдерами.

Мини‑методология внедрения (быстрый план)

  1. Подготовка: создать sandbox‑аккаунты и приложение (client ID).
  2. Клиентская интеграция: подключить SDK в index.html, реализовать компонент кнопки.
  3. Тестирование: прогнать сценарии покупки/отказа/ошибки.
  4. Серверная логика (по необходимости): создать endpoint для создания/подтверждения заказов.
  5. QA и безопасность: проверить обработку ошибок, webhooks, XSS/CSRF.
  6. Выкат: переключиться на production client ID, повторно протестировать.

Роли и чеклисты

Разделённый чеклист по ролям поможет ускорить внедрение.

Разработчик (frontend):

  • Подключил PayPal SDK в public/index.html.
  • Реализовал компонент PayPalCheckout с корректным createOrder/onApprove/onError.
  • Обеспечил пользовательские сообщения при успехе/ошибке.
  • Не сохранил секреты в клиентском коде.

Разработчик (backend):

  • При необходимости реализовал серверные endpoint для создания и подтверждения заказов.
  • Реализовал безопасное хранение секретов (env, vault).
  • Поддержал webhooks и обработку статусов транзакций.

QA / Тестировщик:

  • Протестировал сценарий успешной оплаты (personal → business sandbox).
  • Протестировал отказ оплаты, сетевые ошибки и некорректные суммы.
  • Проверил поведение при повторном нажатии кнопки и при долгой задержке сети.

Продукт / PM:

  • Утвердил поток UX (кнопка, подтверждение, письма, уведомления).
  • Убедился, что политика возвратов и уведомлений соответствует требованиям бизнеса.

Критерии приёмки

  • Платёж проходит успешно в sandbox и статус транзакции фиксируется в приложении.
  • При неуспешной оплате пользователь получает понятное сообщение и возможность повторить попытку.
  • Все секреты находятся на сервере; client ID — в публичном HTML.
  • Включены логирование ошибок и мониторинг webhooks.

Тестовые сценарии и случаи приёмки

  • TC‑01: Успешная оплата — buyer совершает покупку, merchant получает capture, интерфейс показывает успех.
  • TC‑02: Отказ авторизации — симулировать отклонение платежа, проверить обработку onError.
  • TC‑03: Сетевая ошибка — прервать соединение во время capture, проверить откат/сообщение.
  • TC‑04: Повторная оплата — нажать кнопку дважды — убедиться, что не создаются дублирующие заказы.

Безопасность и конфиденциальность

Important: храните секреты (Client Secret) только на сервере и в защищённых хранилищах. Если вы собираете персональные данные пользователей, проверьте соответствие законодательству о защите данных (в т.ч. GDPR для ЕС). Используйте HTTPS для всех запросов и валидируйте входящие webhook‑запросы по подписи.

Отладка и распространённые ошибки

  • Скрипт не загружается: проверьте URL SDK и отсутствие блокировщиков рекламы.
  • window.paypal undefined: SDK не успел загрузиться — убедитесь, что script подключён в head и выполнится до попытки render.
  • Некорректная валюта: проверьте параметр currency в URL SDK и currency_code в createOrder.
  • Дубли транзакций: создавайте order один раз и блокируйте повторные клики.

Модель принятия решений: когда делать server‑side capture

  • Сделайте server‑side capture, если нужно:
    • хранить и проверять сумму на сервере;
    • применять скидки/купоны в момент подтверждения;
    • интегрироваться с ERP/биллингом;
    • соответствовать правилам безопасности и аудита.

Mermaid‑диаграмма (путь принятия решения):

flowchart TD
  A[Начало интеграции] --> B{Нужна ли серверная логика?}
  B -- Да --> C[Реализовать endpoints для Orders и Capture]
  B -- Нет --> D[Клиентская интеграция с client‑only]
  C --> E[Тестировать в Sandbox]
  D --> E
  E --> F{Прошли тесты?}
  F -- Да --> G[Переключиться на Production client ID]
  F -- Нет --> H[Исправить ошибки и повторить тесты]

FAQ

Q: Нужен ли сервер для базовой интеграции PayPal в React?

A: Нет, для простых платежей можно использовать client‑only подход (client ID в index.html). Однако для повышенной безопасности, сложной логики заказов и соответствия бизнес‑требованиям рекомендуется реализовать server‑side flow.

Q: Как тестировать возвраты и chargeback в sandbox?

A: Sandbox поддерживает симуляцию возвратов и некоторых сценариев chargeback — используйте панель разработчика PayPal и виртуальные аккаунты для имитации таких событий.

Q: Могу ли я использовать PayPal для подписок?

A: Да. PayPal имеет отдельные API и интерфейсы для Subscriptions (подписок) — изучите документацию PayPal Subscriptions.

Заключение

Интеграция PayPal в React‑приложение — относительно простой и надежный способ добавить проверенный платёжный инструмент. Для боевого запуска уделите внимание серверной части, обработке webhooks, логированию и тестированию. Используйте sandbox‑аккаунты для отработки всех сценариев до миграции на production client ID.

Проверочные пункты перед релизом:

  • Пройти все тестовые сценарии (успех, ошибка, сетевые сбои).
  • Настроить мониторинг и алёрты для платежей.
  • Подключить webhooks и проверить подписи.
  • Обновить client ID на production и повторно протестировать.

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

Часто задаваемые вопросы (коротко)

  • Можно ли использовать локальную валюту? Да — укажите currency в SDK и в createOrder.
  • Где хранить client secret? Только на сервере.
  • Поддерживаются ли возвраты в sandbox? Да, через панель разработчика.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как открыть Steps Recorder в Windows 11
Windows

Как открыть Steps Recorder в Windows 11

Отключить закрепление приложений на панели задач в Windows 11
Windows 11

Отключить закрепление приложений на панели задач в Windows 11

Ограничение пропускной способности Windows Update
Windows

Ограничение пропускной способности Windows Update

Как просмотреть и редактировать EXIF в Windows 11
Фото/Софт

Как просмотреть и редактировать EXIF в Windows 11

Dynamic Island на Windows — установка и настройка
Руководство

Dynamic Island на Windows — установка и настройка

Код ошибки 0x800F0909 — исправление в Windows 11
Windows

Код ошибки 0x800F0909 — исправление в Windows 11