README.md

phpunit tests

Клиент для работы с 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
Конвейеры
0 успешных
0 с ошибкой
Разработчики