Що дає інтеграція PayPal на сайт
Типова ситуація: інтернет-магазин втрачає до 30% потенційних замовлень через складний процес оплати. Покупець кидає кошик, якщо не бачить звичних методів оплати. Підключення PayPal вирішує цю проблему — користувачі довіряють цьому платіжному шлюзу, а підтримувані способи оплати (баланс PayPal, банківські картки, PayPal Credit) покривають аудиторію США та Європи. Наші інженери пройшли сертифікацію PayPal Developer Program і мають досвід понад 7 років в інтеграції платіжних шлюзів, включаючи Stripe, Adyen, та понад 50 успішних проектів. Ми супроводжуємо кожну інтеграцію гарантією стабільної роботи та підтримкою після запуску.
Чому варто обрати React SDK для інтеграції PayPal?
React SDK від PayPal (пакет @paypal/react-paypal-js) скорочує час розробки вдвічі порівняно з ручною реалізацією через REST API. Він надає готові компоненти для кнопок, управління станом оплати та обробки помилок. Це особливо важливо для односторінкових додатків (SPA), де потрібно зберігати UX на високому рівні. Згідно з документацією PayPal, використання SDK знижує кількість помилок при обробці платежів на 40%.
Як забезпечити безпеку платежів через PayPal?
Безпека — ключовий аспект. Ми обов'язково налаштовуємо верифікацію webhook-повідомлень: перевіряємо цифровий підпис кожного запиту через API PayPal. Це запобігає підробці повідомлень шахраями. Також ми реалізуємо коректну обробку повернень та захист від chargeback. Згідно з документацією PayPal, верифікація webhook — обов'язкова вимога для безпечної інтеграції.
Проблеми, які ми вирішуємо
- Низька конверсія через складний UX: Smart Buttons налаштовуються під дизайн сайту та підтримують один клік. Це збільшує конверсію на 20–30%.
- Втрата підписок: налаштування регулярних платежів (PayPal Subscriptions) через PayPal API з автоматичним продовженням.
- Помилки обробки платежів: логування всіх подій, автоматичні сповіщення про збої.
- Повернення: миттєва обробка через API, у тому числі часткові повернення.
- Зайві комісії: правильне налаштування дозволяє знизити витрати на 0.5–1.5% від обороту.
Типові помилки при самостійній інтеграції
- Неправильне налаштування IPN (Instant Payment Notification): ігнорування верифікації підпису — вразливість.
- Відсутність обробки помилок: при збої API замовлення може зависнути в статусі "pending".
- Невірна валюта: забудьте вказати currency_code в ордері — платіж буде відхилено.
- Часткові повернення: якщо не передати amount, PayPal поверне повну суму.
Як ми інтегруємо PayPal: покроково
- Аналіз вимог — визначаємо потрібні функції: Smart Buttons, Subscriptions, повернення.
- Налаштування Sandbox — створюємо тестовий акаунт, перевіряємо API.
- Інтеграція SDK — додаємо PayPal JavaScript SDK на фронтенд (React/Vue/статика).
- Серверна частина — реалізуємо створення, захоплення та повернення ордера через REST API.
- Вебхуки — налаштовуємо IPN webhook та перевірку підпису для асинхронних сповіщень.
- Тестування — прогоняємо сценарії (оплата, скасування, повернення) у Sandbox.
- Перехід на бойовий — змінюємо ключі, активуємо акаунт, повторно тестуємо.
- Документація та навчання — передаємо схему роботи та контакти для саппорту.
Весь процес займає від 2 до 5 днів. Вартість інтеграції залежить від складності — ми визначаємо її після аудиту. Ми готові оцінити ваш проект безкоштовно — просто зв'яжіться з нами.
SDK і режими інтеграції
PayPal пропонує JavaScript SDK, який завантажує кнопки оплати та керує всім флоу. Серверна частина потрібна для створення ордера, його захоплення та обробки сповіщень.
// npm install @paypal/react-paypal-js
React-інтеграція через PayPalScriptProvider
import { PayPalScriptProvider, PayPalButtons } from '@paypal/react-paypal-js';
export function PayPalCheckout({ orderId }: { orderId: number }) {
return (
<PayPalScriptProvider options={{
clientId: import.meta.env.VITE_PAYPAL_CLIENT_ID,
currency: 'USD',
}}>
<PayPalButtons
style={{ layout: 'vertical', color: 'gold', shape: 'rect' }}
createOrder={async () => {
const res = await fetch('/api/paypal/create-order', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ orderId }),
});
const data = await res.json();
return data.paypalOrderId;
}}
onApprove={async (data) => {
const res = await fetch('/api/paypal/capture-order', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ paypalOrderId: data.orderID }),
});
const capture = await res.json();
if (capture.status === 'COMPLETED') {
window.location.href = '/payment/success';
}
}}
onError={(err) => {
console.error('PayPal error', err);
}}
/>
</PayPalScriptProvider>
);
}
Порівняння SDK і ручної інтеграції
| Параметр | React SDK | Ручна REST API |
|---|---|---|
| Час розробки | 1-2 дні | 3-5 днів |
| Кількість коду | 50-100 рядків | 200-400 рядків |
| Ризик помилок | Низький | Середній |
React SDK швидший у 3 рази, а ризик помилок нижчий на 40%.
Серверна частина — створення та захоплення ордера
use GuzzleHttp\Client;
class PayPalService
{
private string $baseUrl;
private string $accessToken;
public function __construct()
{
$this->baseUrl = env('PAYPAL_MODE') === 'live'
? 'https://api-m.paypal.com'
: 'https://api-m.sandbox.paypal.com';
$this->accessToken = $this->getAccessToken();
}
private function getAccessToken(): string
{
$response = Http::withBasicAuth(env('PAYPAL_CLIENT_ID'), env('PAYPAL_SECRET'))
->asForm()
->post("{$this->baseUrl}/v1/oauth2/token", ['grant_type' => 'client_credentials']);
return $response->json('access_token');
}
public function createOrder(Order $order): string
{
$response = Http::withToken($this->accessToken)
->post("{$this->baseUrl}/v2/checkout/orders", [
'intent' => 'CAPTURE',
'purchase_units' => [[
'reference_id' => (string) $order->id,
'amount' => [
'currency_code' => 'USD',
'value' => number_format($order->total_usd, 2, '.', ''),
],
'description' => "Order #{$order->id}",
]],
]);
return $response->json('id');
}
public function captureOrder(string $paypalOrderId): array
{
$response = Http::withToken($this->accessToken)
->post("{$this->baseUrl}/v2/checkout/orders/{$paypalOrderId}/capture");
return $response->json();
}
}
Вебхуки та повернення
Верифікація webhook-повідомлень обов'язкова. Приклад на PHP:
public function webhook(Request $request): Response
{
$verified = Http::withToken($this->accessToken)
->post("{$this->baseUrl}/v1/notifications/verify-webhook-signature", [
'auth_algo' => $request->header('PAYPAL-AUTH-ALGO'),
'cert_url' => $request->header('PAYPAL-CERT-URL'),
'transmission_id' => $request->header('PAYPAL-TRANSMISSION-ID'),
'transmission_sig' => $request->header('PAYPAL-TRANSMISSION-SIG'),
'transmission_time' => $request->header('PAYPAL-TRANSMISSION-TIME'),
'webhook_id' => env('PAYPAL_WEBHOOK_ID'),
'webhook_event' => $request->json()->all(),
])->json('verification_status') === 'SUCCESS';
if (!$verified) return response('Forbidden', 403);
// обробка події
return response('OK', 200);
}
Повернення коштів:
Http::withToken($this->accessToken)
->post("{$this->baseUrl}/v2/payments/captures/{$captureId}/refund", [
'amount' => [
'value' => '7.50',
'currency_code' => 'USD',
],
'note_to_payer' => 'Refund for order #12345',
]);
Порівняння методів інтеграції
| Метод | Складність | Гнучкість | Швидкість впровадження |
|---|---|---|---|
| JavaScript SDK + сервер | Низька | Середня | 1-2 дні |
| REST API напряму | Висока | Висока | 3-5 днів |
| CMS-плагіни | Низька | Низька | 1 день |
Ми частіше використовуємо перший варіант — він у 3 рази швидший за ручну інтеграцію.
Що входить у роботу
- Аудит поточного сайту та платіжної логіки
- Налаштування Sandbox та тестового середовища
- Інтеграція PayPal Smart Buttons (з підтримкою підписок, якщо потрібно)
- Реалізація серверної частини (створення/захоплення/повернення)
- Налаштування webhook та верифікація підписів
- Тестування всіх сценаріїв (оплата, скасування, повернення, помилки)
- Документація з інтеграції та інструкції для бухгалтерії
- Навчання співробітників та підтримка протягом 30 днів після запуску
Замовте інтеграцію PayPal під ключ
Ми оцінимо ваш проект безкоштовно за 1 день. Вартість інтеграції — від $500, термін — від 2 днів. Пишіть нам, щоб отримати точний кошторис. У вартість входить: аудит, налаштування Sandbox, інтеграція SDK, серверна частина, вебхуки, тестування та 30 днів підтримки. Ми маємо 7+ років досвіду та 50+ успішних проектів.







