# Безопасность

> Как защитить токен и баланс приложения PS Wallet Pay: хранение и перевыпуск токена, разрешённые методы, белый список IP, проверка вебхуков.

Токен приложения даёт полный доступ к API, а с включёнными `transfer` и `createCheck` — и к деньгам на балансе приложения. Эти правила помогут защитить их.

## Коротко

- Храните токен только на сервере. Не вставляйте его в код мини-приложений, сайтов и мобильных клиентов.
- Включайте `transfer` и `createCheck`, только если они действительно нужны: эти методы выводят деньги с баланса приложения.
- Включите белый список IP, чтобы API принимало запросы только с ваших серверов.
- Проверяйте подпись каждого вебхука.
- Держите на балансе приложения только то, что нужно для работы, а остальное регулярно выводите.

## API-токен

Токен выглядит как `<ID приложения>:<секрет>` и передаётся в заголовке `PSWallet-Pay-API-Token`. Посмотреть его можно в кабинете приложения в разделе «API-токен» — с подтверждением PIN-кодом.

- Храните токен в переменных окружения или хранилище секретов сервера, а не в коде и репозитории.
- Не передавайте токен в браузер, мини-приложение или мобильный клиент: любой пользователь сможет его извлечь. Запросы к API делайте только со своего сервера.
- Не пересылайте токен в чатах и не публикуйте в логах.

### Перевыпуск токена

Если токен утёк или вы в этом сомневаетесь, нажмите «Перевыпустить» в разделе «API-токен» (понадобится PIN-код).

> [!WARNING]
> Старый токен перестаёт работать сразу — обновите его на сервере, иначе запросы будут получать `401 UNAUTHORIZED`. Вебхуки после перевыпуска подписываются новым токеном.

## Разрешённые методы

Методы `transfer` и `createCheck` по умолчанию выключены. Включить их можно в кабинете: «Безопасность» → «Разрешённые методы»:

- «Переводы пользователям через API» — метод `transfer`;
- «Создание чеков через API» — метод `createCheck`.

Включение подтверждается PIN-кодом, выключить метод можно без него. Если метод выключен, API отвечает ошибкой `403 METHOD_DISABLED`.

## Белый список IP

Включите белый список IP («Безопасность» → «Белый список IP»), чтобы API принимало запросы только с ваших серверов. Запросы с других адресов получат ошибку `403 IP_NOT_ALLOWED`.

- Поддерживаются отдельные адреса и подсети IPv4 и IPv6, например `203.0.113.0/24` или `2001:db8::/32`.
- Подсеть IPv4 — от `/8` до `/32`, IPv6 — от `/16` до `/128`.
- В списке может быть до 20 записей.
- Пустой список — ограничений нет.
- Изменение списка подтверждается PIN-кодом.

> [!TIP]
> Если сервер выходит в интернет через NAT или прокси, добавьте в список внешний адрес, с которого уходят запросы.

## Вебхуки

- Проверяйте подпись `PSWallet-Pay-API-Signature` каждого вебхука и отвечайте `401`, если она не совпала — подробнее в разделе [Вебхуки](https://help.pswallet.org/ru/pay-api/webhooks#проверка-подписи).
- Отклоняйте запросы, у которых `request_date` старше нескольких минут.
- Обрабатывайте события идемпотентно: одно событие может прийти несколько раз.
- Не доверяйте сумме и статусу из запроса без проверки подписи. При сомнениях запросите счёт через `getInvoices` по `invoice_ids`.

## Баланс приложения

Держите на балансе приложения только то, что нужно для работы (например, для переводов и чеков), а остальное регулярно выводите на свой счёт кнопкой «Вывести» в кабинете.

## Заморозка и удаление приложения

Если приложение заморожено администрацией PS Wallet, API отвечает ошибкой `403 APP_FROZEN`, а вывод с баланса недоступен. Обратитесь в поддержку.

Приложение можно удалить в настройках: «Удалить приложение». Токен перестанет работать, а неоплаченные счета — приниматься. Отменить удаление нельзя, а баланс приложения перед удалением должен быть нулевым.

---
Источник: https://help.pswallet.org/ru/pay-api/security
