Настройка приема платежей через PayPal

Внимание: Платежная система PayPal с 31 июля 2021 г. прекратил осуществления клиентских внутренних переводов и платежей по России. Об этом говорится в заявлении компании. При этом пользователи системы в России по-прежнему смогут осуществлять перевод за рубеж или получать перевод из-за границы.

Прием платежей реализован через NodeJS и библиотеки express. Создаем проект и добавляем в зависимость npm модуль @paypal/checkout-server-sdk.

npm i @paypal/checkout-server-sdk

Прием платежей через PayPal реализуется в два этапа:

  1. создание (формирование) платежа клиентом.
  2. подтверждение приема платежа.

Создание платежа

Для создание платежа требуется следующие входные данные:

  • сумма платежа
  • тип валюты
  • адрес сайта, куда требуется перейти после успешной операции

Внимание: пример ниже описывает реализацию на тестовом стенде 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. Для тестирования используется тестовые данные.

Получить тестовый аккаунт для PayPal можно по ссылке https://developer.paypal.com/developer/accounts SANDBOX -> Accounts

Тестовые аккаунты для PayPal
Интерфейс тестового платежа
  • 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 периодически будет отправлять запрос на указанный адрес.

Print Friendly, PDF & Email

Добавить комментарий