Авторизация
Проекты NetPay используют стандартную схему JWT авторизации (документация: https://jwt.io/ и https://tools.ietf.org/html/rfc7519), то есть для работы с методами API вначале нужно запросить у сервера JWT токен, который уже будет использоваться в Bearer аутентификации.
Полученный токен нужно сохранить и использовать его для запросов. Не нужно создавать новый токен на каждый запрос! Время жизни JWT токена ограничено, и после его истечения токен становится недействительным.
Время жизни JWT определяется параметрами API ключа, и может быть изменено в настройках для каждого API ключа. Минимальное время жизни JWT 30 минут, максимальное 24 часа. По умолчанию значение TTL 24 часа.
Параметры JWT запроса:
exp - опциональный, время жизни JWT запроса. Не устанавливать его слишком большим и не оставляйте пустым, если вы не планируете переиспользовать запрос многократно.
jti - обязательный, уникальный идентификатор запроса.
алгоритм подписи JWT - RS256
все остальные опциональные параметры не используются и устанавливать их не обязательно.
Ниже приведены примеры кода для получения токена на Ruby, PHP и NodeJS, Python
<?php
// composer require lcobucci/jwt
// require __DIR__ . '/vendor/autoload.php';
use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Signer\Key;
use Lcobucci\JWT\Signer\Rsa\Sha256;
$host = '{HOST, уточнить у поддержки}';
$private_key = '{приватный ключ, полученный на этапе создания API ключей}';
$uid = '{UID, полученный на этапе создания API ключей}';
$time = time();
$signer = new Sha256();
$privateKey = new Key(base64_decode($private_key, true));
$token = (new Builder())->identifiedBy(bin2hex(random_bytes(12)))
->expiresAt($time + 1 * 3600) // JWT Request TTL in seconds since epoch
->getToken($signer, $privateKey);
$post_data = ['kid' => $uid, 'jwt_token' => strval($token)];
$ch = curl_init("https://$host/api/papi/session/jwt/");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($post_data)
]);
$response = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) != 200)
die('Server error: ' . $response);
$token_data = json_decode($response, true);
var_dump(['$token_data' => $token_data]);
$token = $token_data['token'];Last updated