Меню

Особенности подключения API Paypal

logo
Мы рассмотрим REST API, далее просто API, которое позволяет удобно взаимодействовать с необходимыми сущностями.
Особенности подключения API Paypal

Paypal предоставляет два API: REST и IPN.

Мы рассмотрим REST API, далее просто API, которое позволяет удобно взаимодействовать с необходимыми сущностями.

API Paypal это JSON API. Paypal предоставляет два окружения, основное, https://api.paypal.com/, и песочницу, https://api.sandbox.paypal.com/.

Для защиты запросов Paypal использует OAuth 2.0 аутентификацию. Таким образом для взаимодействия с API необходимо получить токен доступа. Для получения токена нужно отправить POST-запрос на "v1/oauth2/token" с параметром "grant_type" со значением "client_credentials" и с передачей заголовка "Authorization" со значением "Basic " . base64_encode("$clientId:$secret").

Полученный токен можно использовать для подписи всех последующих запросов в течении некоторого времени. $clientId и $secret можно получить непосредственно в кабинете Paypal. Также в кабинете можно переключить режим работы приложения. Для всех запросов кроме запроса на токен доступа данные можно отправлять в виде json.

Полученного токена в том числа достаточно для работы с платежами. Так, можно отправлять платежи, смотреть историю платежей и т.д. История платежей по умолчанию недоступна, ёё нужно разрешить использовать в личном кабинете Paypal. Тестовая среда по-умолчанию имеет пустую историю платежей и для манипуляций с существующими платежами их нужно создать (провести, make).

Для некоторых запросов уровень защиты повышен и чтобы, например, провести возврат платежа необходимо подписать запрос еще одной подписью. Необходимо передать заголовок "PayPal-Auth-Assertion" со значением конкатенированых точкой base64-зашифрованных json-строк, полученных из массивов ['alg' => 'none'] и ['iss' => $clientId, 'email' => $email]. Параметр $clientId встречался ранее, а $email - это почта пользователя Paypal, на которую зарегистрирован аккаунт. Будьте внимательны, если вы используете среду "песочница", то для нее Paypal генерирует тестовый email.

Кроме того вместо email во втором массиве можно использовать 'payer_id' со значением payer_id аккаунта пользователя. Стоит отдельно уточнить, что в результирующей строке между двумя шифрованными строками должна быть точка, которую Paypal будет использовать как разделитель.

Например на языке программирования PHP генерация второй подписи будет выглядеть следующим образом:

private function getPaypalAuthAssertion($email, $clientId) {
   $joseHeader = base64_encode(json_encode(['alg' => 'none']));
   $payload = base64_encode(json_encode([
   'iss' => $clientId,
    'email' => $email,
   ]));
   return $joseHeader . '.' . $payload;
}

Чтобы правильно реализовать обработку ошибок стоит учесть два типа ошибок: ошибки доступа, возвращаемые при неудачном получении токена, и ошибки валидации. Поэтому в вашей системе вам понадобится два механизма по переформатированию ошибок.

Ключевые отличия между Laravel и Symfony 07.09.2019 Ключевые отличия между Laravel и Symfony
Какой из двух фреймворков Laravel и Symfony лучше выбрать для реализации проекта? Под какие конкретные нужды использовать тот или иной фреймворк? Характеристика функциональных возможностей фреймворков

Реализация структуры база продуктов с сервиса sql-ex.ru с помощью Doctrine2 16.09.2019 Реализация структуры база продуктов с сервиса sql-ex.ru с помощью Doctrine2
Расширяйте проект на прочной основе с использованием встроенного функционала Doctrine2, попробуйте добавить свои классы и таблицы. Характеристика базы продуктов

Возврат к списку