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 с ошибкой