Пример конфигурации
HPD
В этом плагине нестандартный путь для подтверждения платежа (вебхуков): /sber_sbp/<instance_name>/notify
plugins:
sber_sbp:
main:
bank_code: sber_sbp
bank_account: sber_sbp_account
currency: RUB
currency_number: 643
member_id: "00001234"
terminal_id: 12345678 # он же TID
description: ''
secret_key: secret
certificate_path: /opt/hydra/hpd/cert_sber.pem
api:
url: https://mc.api.sberbank.ru:443/prod/
username: client_id
password: client_secret
listeners:
http:
plain:
plugins: [sber_sbp/main]
workers:
- listeners: [http/plain]
URL для подтверждения платежа в гидре в данном случае: <hpd_base_url>/, причём Сберу принципиально, чтобы этот урл оканчивался на /notify, следует учесть это при настройке.sber_sbp/main/notify
Сбер принимает запросы только со своим сертификатом, поэтому нужно сложить его формате .pem в certificate_path при этом не забыв выдать пользователю HPD (UID можно посмотреть в статье: Докеризация приложений) права на чтение файла сертификата.
Сертификат генерируется в формате pkc12 для преобразования используется команда:
openssl pkcs12 -in certificate_name.p12 -out cert_sber.pem -nodes
Если при генерации сертификата получаем сообщение вида
Error outputting keys and certificates 8032BFF6167F0000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:crypto/evp/evp_fetch.c:355:Global default library context, Algorithm (RC2-40-CBC : 0), Properties ()
то в команду генерации добавляем ключ legacy
openssl pkcs12 -in certificate_name.p12 -out cert_sber.pem -nodes -legacy
Промышленный стенд: https://mc.api.sberbank.ru:443/prod/qr/order/v3/creation
Тестовый: https://mc.api.sberbank.ru:443/prod/qr/order/stub/v3/creation
URL до точки авторизации не меняется. Только сам запрос.(https://mc.api.sberbank.ru:443/prod/tokens/v3/oauth - не меняется)
HUPO
payments:
gateways:
sber_sbp:
default:
hpd_url: http://127.0.0.1:9080
hpd_plugin_name: sber_sbp
hpd_plugin_instance: main
hpd_secret: secret
available_payment_gateways:
- sber_sbp
Проверка статуса платежа
Проверка статуса платежа через curl
1) Получить Base64 кодировку логина-пароля для авторизации
echo -n "API_USERNAME:API_PASSWORD" | base64
2) Получить токен. Здесь и далее URL для продакшн среды. Для тестовой среды https://dev.api.sberbank.ru/prod/ (но это не точно)
curl -X POST "https://mc.api.sberbank.ru:443/prod/tokens/v3/oauth" \ -H "Content-Type: application/x-www-form-urlencoded" \ -H "Accept: application/json" \ -H "Authorization: Basic $BASE64$" \ -H "rquid: 9b4e7a1d3c6f8025e9b2d5a7c1f08e34" \ --cert cert_sber.pem \ --key cert_sber.pem \ -d "grant_type=client_credentials" \ -d "scope=https://api.sberbank.ru/qr/order.status" -k
Где:
$BASE64$ - логин и пароль в кодироке Base64
rquid - Строка в 32 символа ([0-9]|[a-f]|[A-F]){32})
cert и key - Путь до сертификата Сбера
3) Получить статус платежа
curl -X POST "https://mc.api.sberbank.ru:443/prod/qr/order/v3/status" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "RqUID: 3d8c1f6a9e2b4d70c5a8f1e3b7d90c46" \
-H "Authorization: Bearer %TOKEN%" \
--cert cert_sber.pem \
--key cert_sber.pem \
-d '{
"rq_uid": "3d8c1f6a9e2b4d70c5a8f1e3b7d90c46",
"rq_tm": "2026-04-02T17:34:03Z",
"tid": "12345678",
"partner_order_number": "22595020701"
}' -k
Где:
RqUID и rq_uid - Строка в 32 символа ([0-9]|[a-f]|[A-F]){32})
%TOKEN% - Токен полученный на этапе 2
cert и key - Путь до сертификата Сбера
rq_tm - Текущая дата в фомарте %Y-%m-%dT%H:%M:%SZ
tid - ID терминала
partner_order_number - ID платежного поручения в Гидре
Скрипт для проверки статуса платежа
Можно использовать скрипт, куда передается только ID платежного поручения. В самом скрипте задаются логины-пароли, ID терминала и путь до сертификата: