vlsv/sber-pay-qr-api-client

用于操作 SberPay QR API 的客户端

v1.0.1 2022-12-22 20:01 UTC

This package is auto-updated.

Last update: 2024-09-22 23:39:49 UTC


README

phpunit tests

用于操作 SberPay QR API/Плати QR 的客户端

通过 QR 码支付是一种使用图形码的现代支付接收方式。QR 码支付服务允许使用 SberPay QR(在 СберБанк Онлайн 应用中)、Плати QR(在银行合作伙伴的应用中)和 СБП QR(快速支付系统)进行支付。[了解更多关于此服务](https://api.developer.sber.ru/product/PlatiQR/doc/v1/QR_API_doc1)。

该客户端实现了 QR.API(卖家 QR)平台的服务

  • creation - 创建订单并生成用于该订单的动态 QR 码(根据客户要求):QR 码已包含该订单的金额。
  • status - 查询订单状态:获取支付状态和操作详情。
  • revocation - 取消未付款订单:买家未在规定时间内付款(通常网站上有 20 分钟的等待时间),或选择了其他支付方式。
  • cancel - 取消/退款财务操作。
  • registry - 查询操作登记册。

依赖项

向 API 发送请求需要 Sber API Registry access_token。获取它的方法之一是使用库 vlsv/sber-api-registry-oauth-client

安装库

composer require vlsv/sber-pay-qr-api-client

获取证书

官方文档

准备证书

openssl pkcs12 -in {path_to_certificate}/cert.p12 -out {path_to_certificate}/cert.pem -nodes

或者,作为替代方案,可以以 .p12 格式传递证书,在这种情况下,还需要指定其密码。

使用 API

创建订单

请参考 TestCaseBase.php 查看客户端配置示例

$orderParamsType = (new \Vlsv\SberPayQrApiClient\Entity\RequestCreationOrderParamsType())
    ->setPositionName('some_position_name')
    ->setPositionCount(1)
    ->setPositionDescription('some_position_description')
    ->setPositionSum(190000);

$requestCreation = (new \Vlsv\SberPayQrApiClient\Entity\RequestCreation())
    ->setMemberId('some_member_id')
    ->setOrderCreateDate(new DateTimeImmutable())
    ->setOrderParamsType([$orderParamsType]);

try {
    /** @var \Vlsv\SberPayQrApiClient\Entity\ResponseCreation $responseCreation */
    $responseCreation = $this->apiClient->makeRequest(
        accessToken: 'personal_temporary_access_token',
        apiEndpoint: \Vlsv\SberPayQrApiClient\Entity\ApiEndpoint::CREATION,
        requestObject: $requestCreation,
    );
} catch (ApiException $exception) {
    echo $exception->getMessage();

    exit();
}

// Идентификатор заказа на стороне эквайера.
// Необходим для дальнейшей работы с API.
echo $responseCreation->getOrderId();

// Ссылка на форму оплаты - QR-код.
echo $responseCreation->getOrderFormUrl();

请参阅 ResponseCreation 了解对象响应的所有方法

查询订单状态

$requestStatus = (new \Vlsv\SberPayQrApiClient\Entity\RequestStatus())
    ->setOrderId('5cf8cb8b-37e3-42e9-8f69-306fa72e106f')
    ->setTid('83457dda-332c-46f4-b928-8d4bd9ee3afe');

try {
    /** @var \Vlsv\SberPayQrApiClient\Entity\ResponseStatus $responseStatus */
    $responseStatus = $this->apiClient->makeRequest(
        accessToken: 'personal_temporary_access_token',
        apiEndpoint: \Vlsv\SberPayQrApiClient\Entity\ApiEndpoint::STATUS,
        requestObject: $requestStatus,
    );
} catch (\Vlsv\SberPayQrApiClient\Entity\ApiException $exception) {
    echo $exception->getMessage();

    exit();
}

// Состояние заказа на стороне эквайера.
echo $responseStatus->getOrderState()->value;

请参阅 ResponseStatus 了解对象响应的所有方法

其他方法以类似方式操作。

测试

所有组。

composer tests

功能测试和单元测试。

composer tests-feature && composer tests-unit