Уроки курса
1 Основы синтаксиса PHP 8
60 мин
2 Функции и управляющие конструкции
60 мин
3 Объектно-ориентированное программирование на PHP
60 мин
4 Наследование, интерфейсы и полиморфизм
60 мин
5 Основы баз данных MySQL и работа через PDO
60 мин
6 Архитектурный паттерн MVC
60 мин
7 Введение в Laravel и настройка окружения
60 мин
8 Маршрутизация и контроллеры в Laravel
60 мин
9 Шаблонизатор Blade и создание интерфейса
60 мин
10 Миграции баз данных и Eloquent ORM
60 мин
11 Связи моделей в Eloquent — Настройка связей 'один …
60 мин
12 Аутентификация и защита маршрутов
60 мин
13 Разработка каталога товаров и категорий
60 мин
14 Реализация корзины покупок через сессии
60 мин
15 Оформление заказа и транзакции базы данных
60 мин
16 Интеграция платежной системы Stripe
60 мин
17 Интеграция платежной системы Vipps
60 мин
18 Разработка панели администратора
60 мин
19 Оптимизация и подготовка к production
60 мин
20 Деплой Laravel-приложения на сервер
60 мин
21 Основы PHP 8: Синтаксис, переменные и управляющие конструкции
60 мин
22 Функции и массивы в PHP 8
60 мин
23 Объектно-ориентированное программирование: Классы и объекты
60 мин
24 Продвинутое ООП: Наследование, интерфейсы и полиморфизм
60 мин
25 Основы баз данных: Проектирование БД и работа с …
60 мин
26 Взаимодействие PHP с MySQL через PDO
60 мин
27 Архитектура MVC и введение в фреймворк Laravel
60 мин
28 Маршрутизация и контроллеры в Laravel
60 мин
29 Шаблонизатор Blade: Создание пользовательского интерфейса
60 мин
30 Миграции и Eloquent ORM: Создание таблиц товаров
60 мин
31 Связи в Eloquent ORM: Отношения между моделями
60 мин
32 Аутентификация и авторизация пользователей
60 мин
33 Разработка каталога товаров: Вывод, фильтрация и пагинация
60 мин
34 Реализация корзины покупок с использованием сессий
60 мин
35 Оформление заказа: Работа с формами и валидация
60 мин
36 Транзакции базы данных: Сохранение заказа
60 мин
37 Интеграция платежной системы Stripe
60 мин
38 Интеграция платежной системы Vipps
60 мин
39 Создание панели администратора
60 мин
40 Подготовка к production и деплой приложения
60 мин
41 Основы PHP 8 и синтаксис
60 мин
42 Объектно-ориентированное программирование на PHP
60 мин
43 Продвинутое ООП и интерфейсы
60 мин
44 Основы баз данных и MySQL
60 мин
45 Архитектурный паттерн MVC
60 мин
46 Введение в Laravel и маршрутизация
60 мин
47 Шаблонизатор Blade и верстка интерфейса
60 мин
48 Миграции и структура базы данных
60 мин
49 Eloquent ORM и модели
60 мин
50 Отношения в Eloquent ORM
60 мин
51 Авторизация и защита маршрутов
60 мин
52 Создание каталога товаров
60 мин
53 Реализация корзины покупок
60 мин
54 Оформление заказа и транзакции БД
60 мин
55 Интеграция платежной системы Stripe
60 мин
56 Интеграция платежной системы Vipps
60 мин
57 Панель администратора: управление товарами
60 мин
58 Панель администратора: управление заказами
60 мин
59 Подготовка к production и деплой
60 мин
60 Запуск и тестирование готового интернет-магазина
60 мин

Интеграция платежной системы Stripe

Студент подключит Stripe Checkout Session для приема платежей по банковским картам и настроит обработку успешной оплаты.

Прогресс урока: 0%

Введение в платежные шлюзы и Stripe

Наш интернет-магазин умеет собирать товары в корзину и сохранять заказы в БД со статусом 'pending' (в ожидании). Пришло время получить реальные деньги! Для обработки транзакций по банковским картам мы не будем (и не имеем права по стандартам PCI DSS) сохранять номера карт на нашем сервере. Вместо этого мы делегируем этот процесс платежному шлюзу — Stripe. Stripe предоставляет готовые, безопасные формы оплаты. Наш план, основанный на Project-Based Learning: мы установим PHP SDK для Stripe, сгенерируем специальную ссылку на платежную сессию (Checkout Session) и перенаправим туда пользователя. Пользователь введет данные карты на защищенном сервере Stripe. После оплаты Stripe вернет пользователя обратно на наш сайт по специальному 'success_url', и мы сможем поменять статус заказа на 'paid'.

Подготовка конфигурации (Environment)

Перед написанием кода необходимо установить пакет stripe/stripe-php через Composer. Затем нужно получить ключи API. У Stripe есть два ключа: Публичный (Public/Publishable Key) — используется на фронтенде, и Секретный (Secret Key) — используется на бэкенде. Секретный ключ дает полный доступ к вашему аккаунту Stripe (списания, возвраты). Типичная и очень опасная ошибка новичков — захардкодить этот ключ прямо в PHP-файле и отправить в GitHub. Хакеры сканируют публичные репозитории и могут украсть ваши деньги. По правилам безопасности (и из Упражнения 3.2), мы должны хранить ключи в файле `.env`. Добавьте в .env строку: STRIPE_SECRET=sk_test_ваши_цифры. В коде контроллера мы будем получать этот ключ через функцию env('STRIPE_SECRET'). Обратите внимание на префикс 'sk_test' — он означает, что мы работаем в безопасном тестовом окружении, где можно использовать фейковые карты для проверки.

php
use Stripe\Stripe;
use Stripe\Checkout\Session;

// Этот код добавляется в конец метода process() из предыдущего урока,
// вместо redirect()->route('orders.success');

Stripe::setApiKey(env('STRIPE_SECRET'));

$checkout_session = Session::create([
    'line_items' => [[
        'price_data' => [
            'currency' => 'usd',
            'product_data' => [
                'name' => 'Заказ #' . $order->id,
            ],
            'unit_amount' => $order->total_price * 100, // Stripe принимает сумму в центах!
        ],
        'quantity' => 1,
    ]],
    'mode' => 'payment',
    'success_url' => route('checkout.success', ['order' => $order->id]),
    'cancel_url' => route('checkout.cancel', ['order' => $order->id]),
]);

return redirect($checkout_session->url);

Создание Stripe Checkout Session

Разберем код инициализации платежа. Сначала мы передаем секретный ключ в класс Stripe. Затем вызываем Session::create(). Мы передаем массив параметров. 'line_items' — это то, за что платит клиент. Мы формируем один пункт, называя его 'Заказ #ID'. Критически важный момент: параметр 'unit_amount' принимает сумму в минимальных единицах валюты (центах для USD, копейках для RUB). Если ваш заказ стоит 20 долларов ($order->total_price = 20), вы обязаны умножить это на 100, передав число 2000. В противном случае Stripe спишет с клиента 20 центов! Параметр 'mode' установлен в 'payment', что означает разовый платеж (в отличие от 'subscription' для подписок). Наконец, мы указываем 'success_url' и 'cancel_url'. Это адреса на НАШЕМ сайте, куда Stripe перенаправит клиента после успешной или отмененной оплаты. В конце мы делаем redirect() на сгенерированный $checkout_session->url, передавая управление серверам Stripe.

Обработка возврата и Вебхуки (Webhooks)

Когда клиент возвращается на 'success_url', мы показываем ему страницу 'Спасибо за заказ'. Но можно ли в этот момент менять статус заказа в БД на 'Оплачен'? Строго говоря — НЕТ. Продвинутый хакер может узнать ваш success_url и просто перейти по нему напрямую в браузере, не заплатив ни копейки. Надежный способ подтверждения платежа — это Webhooks (Вебхуки). Stripe отправляет POST-запрос с сервера на сервер (напрямую на ваш бэкенд) с криптографической подписью, сообщая: 'Транзакция ID такая-то успешно завершена'. Ваш сервер проверяет подпись, находит заказ по ID и меняет его статус. В рамках базового курса мы реализуем простую проверку на success_url, но для production-окружения (как описано в разделе 3 архива) интеграция вебхуков обязательна. Для локального тестирования вебхуков используется утилита Stripe CLI, которая пробрасывает запросы на ваш localhost.

Как Stripe принимает сумму к оплате в параметре 'unit_amount'?

Как называется переменная окружения, в которой, согласно лучшим практикам и архивным материалам, должен храниться секретный ключ API Stripe? Укажите точное название из примера.

Задание

Сценарий: Интеграция Stripe.

  • Зарегистрируйтесь на сайте stripe.com и получите тестовые ключи API.
  • Добавьте STRIPE_SECRET и STRIPE_KEY в файл .env.
  • Установите библиотеку через терминал: composer require stripe/stripe-php.
  • Добавьте код генерации Stripe Session в конец метода process() вашего CheckoutController.
  • Создайте маршруты и методы для 'checkout.success' и 'checkout.cancel'.
  • Проведите тестовый платеж, используя реквизиты тестовой карты Stripe (4242 4242...).
10 баллов