Внимание: Платежная система 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 периодически будет отправлять запрос на указанный адрес.