Клиент для работы с API SberPay QR/Плати QR
Оплата по QR - современный способ приёма платежей с помощью графического кода. Сервис оплаты по QR позволяет проводить оплату по SberPay QR (в приложении СберБанк Онлайн), Плати QR (в приложениях банков-партнёров) и СБП QR (Система Быстрых Платежей) подробнее о сервисе.
Данный клиент реализует сервисы платформы QR.API (QR продавца):
- creation - создание заказа и формирование Динамического QR-кода под создаваемый заказ (по запросу Клиента): QR код уже содержит сумму данного заказа.
- status - запрос статуса заказа: получение статуса оплаты и детализации по операциям.
- revocation - отмена неоплаченного заказа: Покупатель не произвел оплату в установленное время (как правило на сайтах до 20 минут ожидания), либо выбрал другой способ оплаты.
- cancel - отмена/возврат финансовой операции.
- registry - запрос реестра операций.
Установка библиотеки
Добавить в composer.json
"repositories": [
{
"type": "git",
"url": "https://gitflic.ru/project/nii-mko/sber-pay-qr-api-client.git"
}
],
"require": {
"nii-mko/sber-pay-qr-api-client": "dev-main"
}
composer update
Получение сертификата
Официальная документация:
Подготовка сертификата
Скачать корневой сертификат и выпускающие сертификаты по Сертификаты МинЦифры
# for Linux Mint
sudo mkdir /usr/local/share/ca-certificates/russian_trusted
sudo cp ~/Downloads/russian_trusted_root_ca_pem.crt /usr/local/share/ca-certificates/russian_trusted/
sudo cp ~/Downloads/russian_trusted_sub_ca_pem.crt /usr/local/share/ca-certificates/russian_trusted/
sudo update-ca-certificates -v
Выполнить шаги из Настройки сервиса вызова API, т.е. получить файлы:
- client_cert.crt
- private.key
Получить CLIENT_ID, CLIENT_SECRET в соответствии с подпиской к сервису
Работа с API
Конфигурация ApiClient
В конструкторе ClientConfig
$config = new ClientConfig(
certPath: 'path/cert',
sslKeyPath: 'path/ssl_key',
clientId: 'client-id',
clientSecret: 'client_secret',
host: 'https://mc.api.sberbank.ru:443'
);
$serializer = SerializerFactory::create();
$apiClient = new ApiClient($config, $serializer);
Создание заказа
use Niimko\SberPayQrApiClient\Entity\ApiEndpoint;
use Niimko\SberPayQrApiClient\Entity\RequestCreation;
use Niimko\SberPayQrApiClient\Entity\RequestCreationOrderParamsType;
use Niimko\SberPayQrApiClient\Exception\ApiException;
use Niimko\SberPayQrApiClient\Factory\ApiClientFactory;
use Niimko\SberPayQrApiClient\Date;
// Описание блока с параметрами заказа
$orderParamsType = RequestCreationOrderParamsType::build()
// Наименование товарной позиции (Спец.символы требуется экранировать)
->setPositionName('Капитал. Том I')
// Количество штук товарной позиции
->setPositionCount(1)
// Сумма товарной позиции в минимальных единицах валюты
->setPositionDescription('Книга по политэкономии')
// Описание товарной позиции (Спец.символы требуется экранировать)
->setPositionSum(2000);
// Запрос Создание заказа
$requestCreation = RequestCreation::build()
// Идентификатор клиента
->setMemberId('00000002')
// Номер заказа в CRM Клиента
->setOrderNumber('1288986419035')
// Дата/время формирования заказа
->setOrderCreateDate(Date::now())
->setOrderParamsType([$orderParamsType])
// Идентификатор устройства, на котором сформирован заказ для операции "QR-код СБП": tid (Уникальный идентификатор терминала)
->setIdQr('20188357')
// Сумма заказа в минимальных единицах Валюты
->setOrderSum(3)
// Валюта операции, цифровой код по ISO 4217 [RUB (643) — российский рубль после деноминации 1998 года]
->setCurrency('643')
// Описание заказа (Спец.символы требуется экранировать)
->setDescription('Товар со склада')
// Идентификатор банка-участника "ПАО СберБанк" в СБП. Используется в случае проведения операции через платежную систему СБП/НСПК.
// Константа: "100000000111"
->setSbpMemberId('100000000111');
try {
/** @var \Niimko\SberPayQrApiClient\Entity\ResponseCreation $responseCreation */
$responseCreation = $apiClient->send(
ApiEndpoint::CREATION,
$requestCreation,
);
} catch (ApiException $exception) {
echo $exception->getMessage();
exit();
}
// Идентификатор заказа на стороне эквайера.
// Необходим для дальнейшей работы с API.
echo $responseCreation->getOrderId();
// Ссылка на форму оплаты - QR-код.
echo $responseCreation->getOrderFormUrl();
Все методы объекта ответа см. ResponseCreation
Запрос статуса заказа
use Niimko\SberPayQrApiClient\Entity\ApiEndpoint;
use Niimko\SberPayQrApiClient\Entity\RequestStatus;
use Niimko\SberPayQrApiClient\Exception\ApiException;
$requestStatus = RequestStatus::build()
// Номер заказа (в бэк системе Сбербанка)
->setOrderId('b88f87f0c5e44f90946f135383c88313')
// Уникальный идентификатор терминала Идентификатор устройства, на котором сформирован заказ [id_qr]
->setTid('20188357')
// Номер заказа в CRM Клиента
->setPartnerOrderNumber('456');
try {
/** @var \Niimko\SberPayQrApiClient\Entity\ResponseStatus $responseStatus */
$responseStatus = $this->apiClient->send(
ApiEndpoint::STATUS,
$requestStatus,
);
} catch (ApiException $exception) {
echo $exception->getMessage();
exit();
}
// Состояние заказа на стороне эквайера.
echo $responseStatus->getOrderState()->value;
Все методы объекта ответа см. ResponseStatus
Работа с остальными методами производится аналогичным образом.
Описание
PHP библиотека для работы с API SberPay QR/Плати QR