Внимание: Платежная система PayPal с 31 июля 2021 г. прекратил осуществления клиентских внутренних переводов и платежей по России. Об этом говорится в заявлении компании. При этом пользователи системы в России по-прежнему смогут осуществлять перевод за рубеж или получать перевод из-за границы.
Прием платежей реализован через NodeJS и библиотеки express. Создаем проект и добавляем в зависимость npm модуль @paypal/checkout-server-sdk.
npm i @paypal/checkout-server-sdk
Прием платежей через PayPal реализуется в два этапа:
- создание (формирование) платежа клиентом.
- подтверждение приема платежа.
Создание платежа
Для создание платежа требуется следующие входные данные:
- сумма платежа
- тип валюты
- адрес сайта, куда требуется перейти после успешной операции
Внимание: пример ниже описывает реализацию на тестовом стенде PayPal. Для переключения на рабочую среду следует изменить класс SandboxEnvironment на LiveEnvironment
Пример формирования платежа в PayPal:
const paypal = require('@paypal/checkout-server-sdk'); ... let environment = new paypal.core.SandboxEnvironment(paypal_client_id, paypal_client_secret); let client = new paypal.core.PayPalHttpClient(environment); let request = new paypal.orders.OrdersCreateRequest(); request.requestBody({ "intent": "CAPTURE", "application_context": { "return_url": "https://domain.com" }, "purchase_units": [ { "amount": { "currency_code": "USD", "value": 100 }, "description": "your description" } ] }); client.execute(request).then(function(payment) { ... var transactionID = payment.result.id; // запоминаем его ... var links = payment.result.links; var approve = null; for(var i = 0; i < links.length; i++) { if(links[i].rel == 'approve') { approve = links[i]; break; } } if(approve) { // эта ссылка для вывода интерфейса для платежа console.log(approve.href); } }).catch(function(err) { ... });
Получить тестовый аккаунт для PayPal можно по ссылке https://developer.paypal.com/developer/accounts SANDBOX -> Accounts
- paypal_client_id — идентификатор пользователя, на счет которого должны быть переведены денежные средства.
- paypal_client_secret — строка для авторизации
Получить выше указанную информацию для авторизации можно на сайте paypal.
Внимание: данная статья написана с условием, что у Вас уже есть учетная запись в paypal.
После авторизации на сайте https://developer.paypal.com/developer/accounts в меню Dashboard -> My Apps & Credentials находим Default Application. В интерфейсе должны быть поля:
- Client ID
- Secret
После оплаты требуется реализовать ожидание ответа от paypal о том, что платеж прошел успешно.
Подтверждение платежа
Переходим на сайт https://developer.paypal.com/developer/accounts и в меню DASHBOARD -> My Apps & Credentials переходим в настройки приложения Default Application
После нажатия находим SANDBOX WEBHOOKS
И добавляем адрес сайта, который будет обрабатывать ответ от PayPal
Примечание: я по умолчанию установил все обработчики, но нам нужен будет только CHECKOUT ORDER APPROVED
Внимание: для тестирования будет удобно использовать ngrok
Ниже код для обработчика:
if(req.body) { body = req.body; if(body.event_type != 'CHECKOUT.ORDER.APPROVED') { // я пропускаю все остальные статусы return res.send('SUCCESS'); } ... var transactionID = body.resource.id; // а это то что мы заполнили ... return res.send('SUCCESS'); }
Ссылка должна принимать POST запрос и возвращать статус 200 если все хорошо и 500 если есть ошибка.
Примечание: PayPal периодически будет отправлять запрос на указанный адрес.