!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache. PHP/8.1.30 

uname -a: Linux server1.tuhinhossain.com 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC
2025 x86_64
 

uid=1002(picotech) gid=1003(picotech) groups=1003(picotech),0(root)  

Safe-mode: OFF (not secure)

/home/picotech/domains/smabpro.picotech.app/public_html/vendor/yoomoney/yookassa-sdk-php/lib/   drwxr-xr-x
Free 28.59 GB of 117.98 GB (24.24%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     Client.php (89.01 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

/**
 * The MIT License.
 *
 * Copyright (c) 2023 "YooMoney", NBСO LLC
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

namespace YooKassa;

use 
Exception;
use 
InvalidArgumentException;
use 
YooKassa\Client\BaseClient;
use 
YooKassa\Common\Exceptions\ApiConnectionException;
use 
YooKassa\Common\Exceptions\ApiException;
use 
YooKassa\Common\Exceptions\AuthorizeException;
use 
YooKassa\Common\Exceptions\BadApiRequestException;
use 
YooKassa\Common\Exceptions\ExtensionNotFoundException;
use 
YooKassa\Common\Exceptions\ForbiddenException;
use 
YooKassa\Common\Exceptions\InternalServerError;
use 
YooKassa\Common\Exceptions\InvalidPropertyValueException;
use 
YooKassa\Common\Exceptions\InvalidPropertyValueTypeException;
use 
YooKassa\Common\Exceptions\NotFoundException;
use 
YooKassa\Common\Exceptions\ResponseProcessingException;
use 
YooKassa\Common\Exceptions\TooManyRequestsException;
use 
YooKassa\Common\Exceptions\UnauthorizedException;
use 
YooKassa\Common\HttpVerb;
use 
YooKassa\Helpers\TypeCast;
use 
YooKassa\Helpers\UUID;
use 
YooKassa\Model\Deal\DealInterface;
use 
YooKassa\Model\Payment\PaymentInterface;
use 
YooKassa\Model\Payout\PayoutInterface;
use 
YooKassa\Model\PersonalData\PersonalDataInterface;
use 
YooKassa\Model\SelfEmployed\SelfEmployedInterface;
use 
YooKassa\Model\Webhook\Webhook;
use 
YooKassa\Request\Deals\CreateDealRequest;
use 
YooKassa\Request\Deals\CreateDealRequestInterface;
use 
YooKassa\Request\Deals\CreateDealRequestSerializer;
use 
YooKassa\Request\Deals\CreateDealResponse;
use 
YooKassa\Request\Deals\DealResponse;
use 
YooKassa\Request\Deals\DealsRequest;
use 
YooKassa\Request\Deals\DealsRequestInterface;
use 
YooKassa\Request\Deals\DealsRequestSerializer;
use 
YooKassa\Request\Deals\DealsResponse;
use 
YooKassa\Request\Payments\CancelResponse;
use 
YooKassa\Request\Payments\CreateCaptureRequest;
use 
YooKassa\Request\Payments\CreateCaptureRequestInterface;
use 
YooKassa\Request\Payments\CreateCaptureRequestSerializer;
use 
YooKassa\Request\Payments\CreateCaptureResponse;
use 
YooKassa\Request\Payments\CreatePaymentRequest;
use 
YooKassa\Request\Payments\CreatePaymentRequestInterface;
use 
YooKassa\Request\Payments\CreatePaymentRequestSerializer;
use 
YooKassa\Request\Payments\CreatePaymentResponse;
use 
YooKassa\Request\Payments\PaymentResponse;
use 
YooKassa\Request\Payments\PaymentsRequest;
use 
YooKassa\Request\Payments\PaymentsRequestInterface;
use 
YooKassa\Request\Payments\PaymentsRequestSerializer;
use 
YooKassa\Request\Payments\PaymentsResponse;
use 
YooKassa\Request\Payouts\CreatePayoutRequest;
use 
YooKassa\Request\Payouts\CreatePayoutRequestInterface;
use 
YooKassa\Request\Payouts\CreatePayoutRequestSerializer;
use 
YooKassa\Request\Payouts\CreatePayoutResponse;
use 
YooKassa\Request\Payouts\PayoutResponse;
use 
YooKassa\Request\Payouts\SbpBanksResponse;
use 
YooKassa\Request\PersonalData\CreatePersonalDataRequest;
use 
YooKassa\Request\PersonalData\CreatePersonalDataRequestInterface;
use 
YooKassa\Request\PersonalData\CreatePersonalDataRequestSerializer;
use 
YooKassa\Request\PersonalData\PersonalDataResponse;
use 
YooKassa\Request\Receipts\AbstractReceiptResponse;
use 
YooKassa\Request\Receipts\CreatePostReceiptRequest;
use 
YooKassa\Request\Receipts\CreatePostReceiptRequestInterface;
use 
YooKassa\Request\Receipts\CreatePostReceiptRequestSerializer;
use 
YooKassa\Request\Receipts\ReceiptResponseFactory;
use 
YooKassa\Request\Receipts\ReceiptResponseInterface;
use 
YooKassa\Request\Receipts\ReceiptsRequest;
use 
YooKassa\Request\Receipts\ReceiptsRequestInterface;
use 
YooKassa\Request\Receipts\ReceiptsRequestSerializer;
use 
YooKassa\Request\Receipts\ReceiptsResponse;
use 
YooKassa\Request\Refunds\CreateRefundRequest;
use 
YooKassa\Request\Refunds\CreateRefundRequestInterface;
use 
YooKassa\Request\Refunds\CreateRefundRequestSerializer;
use 
YooKassa\Request\Refunds\CreateRefundResponse;
use 
YooKassa\Request\Refunds\RefundResponse;
use 
YooKassa\Request\Refunds\RefundsRequest;
use 
YooKassa\Request\Refunds\RefundsRequestInterface;
use 
YooKassa\Request\Refunds\RefundsRequestSerializer;
use 
YooKassa\Request\Refunds\RefundsResponse;
use 
YooKassa\Request\SelfEmployed\SelfEmployedRequest;
use 
YooKassa\Request\SelfEmployed\SelfEmployedRequestInterface;
use 
YooKassa\Request\SelfEmployed\SelfEmployedRequestSerializer;
use 
YooKassa\Request\SelfEmployed\SelfEmployedResponse;
use 
YooKassa\Request\Webhook\WebhookListResponse;

/**
 * Класс клиента API.
 *
 * @example 01-client.php 3 7 Создание клиента
 */
class Client extends BaseClient
{
    
/**
     * Текущая версия библиотеки.
     */
    
public const SDK_VERSION '3.2.0';

    
/**
     * Получить список платежей магазина.
     *
     * Запрос позволяет получить список платежей, отфильтрованный по заданным критериям.
     * В ответ на запрос вернется список платежей с учетом переданных параметров. В списке будет информация о платежах,
     * созданных за последние 3 года. Список будет отсортирован по времени создания платежей в порядке убывания.
     * Если результатов больше, чем задано в `limit`, список будет выводиться фрагментами. В этом случае в ответе
     * на запрос вернется фрагмент списка и параметр `next_cursor` с указателем на следующий фрагмент.
     *
     * @example 01-client.php 240 24 Получить список платежей магазина с фильтрацией
     *
     * @param array|PaymentsRequestInterface|null $filter Параметры фильтрации
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     * @throws Exception
     */
    
public function getPayments(mixed $filter null): ?PaymentsResponse
    
{
        
$path self::PAYMENTS_PATH;

        if (
null === $filter) {
            
$queryParams = [];
        } else {
            if (
is_array($filter)) {
                
$filter PaymentsRequest::builder()->build($filter);
            }
            
$serializer = new PaymentsRequestSerializer();
            
$queryParams $serializer->serialize($filter);
        }

        
$response $this->execute($pathHttpVerb::GET$queryParams);

        
$paymentResponse null;
        if (
200 === $response->getCode()) {
            
$responseArray $this->decodeData($response);
            
$paymentResponse = new PaymentsResponse($responseArray);
        } else {
            
$this->handleError($response);
        }

        return 
$paymentResponse;
    }

    
/**
     * Создание платежа.
     *
     * Чтобы принять оплату, необходимо создать объект платежа — `Payment`. Он содержит всю необходимую информацию
     * для проведения оплаты (сумму, валюту и статус). У платежа линейный жизненный цикл, он последовательно
     * переходит из статуса в статус.
     *
     * Необходимо указать один из параметров:
     * <ul>
     * <li>payment_token — оплата по одноразовому PaymentToken, сформированному виджетом YooKassa JS;</li>
     * <li>payment_method_id — оплата по сохраненным платежным данным;</li>
     * <li>payment_method_data — оплата по новым платежным данным.</li>
     * </ul>
     *
     * Если не указан ни один параметр и `confirmation.type = redirect`, то в качестве `confirmation_url`
     * возвращается ссылка, по которой пользователь сможет самостоятельно выбрать подходящий способ оплаты.
     * Дополнительные параметры:
     * <ul>
     * <li>confirmation — передается, если необходимо уточнить способ подтверждения платежа;</li>
     * <li>recipient — указывается при наличии нескольких товаров;</li>
     * <li>metadata — дополнительные данные (передаются магазином).</li>
     * </ul>
     *
     * @example 01-client.php 21 28 Запрос на создание платежа
     *
     * @param array|CreatePaymentRequestInterface $payment Запрос на создание платежа
     * @param null|string $idempotenceKey [Ключ идемпотентности](https://yookassa.ru/developers/using-api/basics?lang=php#idempotence)
     *
     * @return CreatePaymentResponse|null
     * @throws ApiException Неожиданный код ошибки
     * @throws AuthorizeException
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ApiConnectionException
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     */
    
public function createPayment(CreatePaymentRequestInterface|array $payment, ?string $idempotenceKey null): ?CreatePaymentResponse
    
{
        
$path self::PAYMENTS_PATH;

        
$headers = [];

        if (
$idempotenceKey) {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = $idempotenceKey;
        } else {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = UUID::v4();
        }
        if (
is_array($payment)) {
            
$payment CreatePaymentRequest::builder()->build($payment);
        }

        
$serializer = new CreatePaymentRequestSerializer();
        
$serializedData $serializer->serialize($payment);
        
$httpBody $this->encodeData($serializedData);

        
$response $this->execute($pathHttpVerb::POST, [], $httpBody$headers);

        
$paymentResponse null;
        if (
200 === $response->getCode()) {
            
$resultArray $this->decodeData($response);
            
$paymentResponse = new CreatePaymentResponse($resultArray);
        } else {
            
$this->handleError($response);
        }

        return 
$paymentResponse;
    }

    
/**
     * Получить информацию о платеже.
     *
     * Запрос позволяет получить информацию о текущем состоянии платежа по его уникальному идентификатору.
     * Выдает объект платежа {@link PaymentInterface} в актуальном статусе.
     *
     * @example 01-client.php 173 8 Получить информацию о платеже
     *
     * @param string $paymentId Идентификатор платежа
     *
     * @return null|PaymentInterface Объект платежа
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API.
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов.
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     * @throws Exception
     */
    
public function getPaymentInfo(string $paymentId): ?PaymentInterface
    
{
        if (!
TypeCast::canCastToString($paymentId)) {
            throw new 
InvalidArgumentException('Invalid paymentId value: string required');
        }
        if (
36 !== mb_strlen($paymentId)) {
            throw new 
InvalidArgumentException('Invalid paymentId value');
        }

        
$path self::PAYMENTS_PATH '/' $paymentId;

        
$response $this->execute($pathHttpVerb::GET, []);

        
$result null;
        if (
200 === $response->getCode()) {
            
$resultArray $this->decodeData($response);
            
$result = new PaymentResponse($resultArray);
        } else {
            
$this->handleError($response);
        }

        return 
$result;
    }

    
/**
     * Подтверждение платежа.
     *
     * Подтверждает вашу готовность принять платеж. Платеж можно подтвердить, только если он находится
     * в статусе `waiting_for_capture`. Если платеж подтвержден успешно — значит, оплата прошла, и вы можете выдать
     * товар или оказать услугу пользователю. На следующий день после подтверждения платеж попадет в реестр,
     * и ЮKassa переведет деньги на ваш расчетный счет. Если вы не подтверждаете платеж до момента, указанного
     * в `expire_at`, по умолчанию он отменяется, а деньги возвращаются пользователю. При оплате банковской картой
     * у вас есть 7 дней на подтверждение платежа. Для остальных способов оплаты платеж необходимо подтвердить
     * в течение 6 часов.
     *
     * @example 01-client.php 51 35 Подтверждение платежа
     *
     * @param array|CreateCaptureRequestInterface $captureRequest Запрос на создание подтверждения платежа
     * @param string $paymentId Идентификатор платежа
     * @param null|string $idempotencyKey [Ключ идемпотентности](https://yookassa.ru/developers/using-api/basics?lang=php#idempotence)
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     * @throws Exception
     */
    
public function capturePayment(array|CreateCaptureRequestInterface $captureRequeststring $paymentId, ?string $idempotencyKey null): ?CreateCaptureResponse
    
{
        if (!
TypeCast::canCastToString($paymentId)) {
            throw new 
InvalidArgumentException('Invalid paymentId value: string required');
        }
        if (
36 !== mb_strlen($paymentId)) {
            throw new 
InvalidArgumentException('Invalid paymentId value');
        }

        
$path '/payments/' $paymentId '/capture';

        
$headers = [];

        if (
$idempotencyKey) {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = $idempotencyKey;
        } else {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = UUID::v4();
        }
        if (
is_array($captureRequest)) {
            
$captureRequest CreateCaptureRequest::builder()->build($captureRequest);
        }

        
$serializer = new CreateCaptureRequestSerializer();
        
$serializedData $serializer->serialize($captureRequest);
        
$httpBody $this->encodeData($serializedData);

        
$response $this->execute($pathHttpVerb::POST, [], $httpBody$headers);

        
$result null;
        if (
200 === $response->getCode()) {
            
$resultArray $this->decodeData($response);
            
$result = new CreateCaptureResponse($resultArray);
        } else {
            
$this->handleError($response);
        }

        return 
$result;
    }

    
/**
     * Отменить незавершенную оплату заказа.
     *
     * Отменяет платеж, находящийся в статусе `waiting_for_capture`. Отмена платежа значит, что вы
     * не готовы выдать пользователю товар или оказать услугу. Как только вы отменяете платеж, мы начинаем
     * возвращать деньги на счет плательщика. Для платежей банковскими картами отмена происходит мгновенно.
     * Для остальных способов оплаты возврат может занимать до нескольких дней.
     *
     * @example 01-client.php 88 10 Отменить незавершенную оплату заказа
     *
     * @param string $paymentId Идентификатор платежа
     * @param null|string $idempotencyKey [Ключ идемпотентности](https://yookassa.ru/developers/using-api/basics?lang=php#idempotence)
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов.
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     * @throws Exception
     */
    
public function cancelPayment(string $paymentId, ?string $idempotencyKey null): ?CancelResponse
    
{
        if (!
TypeCast::canCastToString($paymentId)) {
            throw new 
InvalidArgumentException('Invalid paymentId value: string required');
        }
        if (
36 !== mb_strlen($paymentId)) {
            throw new 
InvalidArgumentException('Invalid paymentId value');
        }

        
$path self::PAYMENTS_PATH '/' $paymentId '/cancel';
        
$headers = [];
        if (
$idempotencyKey) {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = $idempotencyKey;
        } else {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = UUID::v4();
        }

        
$response $this->execute($pathHttpVerb::POST, [], null$headers);

        
$result null;
        if (
200 === $response->getCode()) {
            
$resultArray $this->decodeData($response);
            
$result = new CancelResponse($resultArray);
        } else {
            
$this->handleError($response);
        }

        return 
$result;
    }

    
/**
     * Получить список возвратов платежей.
     *
     * Запрос позволяет получить список возвратов, отфильтрованный по заданным критериям.
     * В ответ на запрос вернется список возвратов с учетом переданных параметров. В списке будет информация о возвратах,
     * созданных за последние 3 года. Список будет отсортирован по времени создания возвратов в порядке убывания.
     * Если результатов больше, чем задано в `limit`, список будет выводиться фрагментами. В этом случае в ответе
     * на запрос вернется фрагмент списка и параметр `next_cursor` с указателем на следующий фрагмент.
     *
     * @example 01-client.php 290 24 Получить список возвратов платежей магазина с фильтрацией
     *
     * @param null|array|RefundsRequestInterface $filter Параметры фильтрации
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности.
     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов.
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     * @throws Exception
     */
    
public function getRefunds(mixed $filter null): ?RefundsResponse
    
{
        
$path self::REFUNDS_PATH;

        if (
null === $filter) {
            
$queryParams = [];
        } else {
            if (
is_array($filter)) {
                
$filter RefundsRequest::builder()->build($filter);
            }
            
$serializer = new RefundsRequestSerializer();
            
$queryParams $serializer->serialize($filter);
        }

        
$response $this->execute($pathHttpVerb::GET$queryParams);

        
$refundsResponse null;
        if (
200 === $response->getCode()) {
            
$resultArray $this->decodeData($response);
            
$refundsResponse = new RefundsResponse($resultArray);
        } else {
            
$this->handleError($response);
        }

        return 
$refundsResponse;
    }

    
/**
     * Проведение возврата платежа.
     *
     * Создает объект возврата — `Refund`. Возвращает успешно завершенный платеж по уникальному идентификатору
     * этого платежа. Создание возврата возможно только для платежей в статусе `succeeded`. Комиссии за проведение
     * возврата нет. Комиссия, которую ЮKassa берёт за проведение исходного платежа, не возвращается.
     *
     * @example 01-client.php 145 26 Запрос на создание возврата
     *
     * @param array|CreateRefundRequestInterface $request Запрос на создание возврата
     * @param null|string $idempotencyKey [Ключ идемпотентности](https://yookassa.ru/developers/using-api/basics?lang=php#idempotence)
     *
     * @return CreateRefundResponse|null
     *
     * @throws ApiConnectionException
     * @throws ApiException Неожиданный код ошибки
     * @throws AuthorizeException
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws Exception
     */
    
public function createRefund(array|CreateRefundRequestInterface $request, ?string $idempotencyKey null): ?CreateRefundResponse
    
{
        
$path self::REFUNDS_PATH;

        
$headers = [];

        if (
$idempotencyKey) {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = $idempotencyKey;
        } else {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = UUID::v4();
        }
        if (
is_array($request)) {
            
$request CreateRefundRequest::builder()->build($request);
        }

        
$serializer = new CreateRefundRequestSerializer();
        
$serializedData $serializer->serialize($request);
        
$httpBody $this->encodeData($serializedData);

        
$response $this->execute($pathHttpVerb::POST, [], $httpBody$headers);

        
$result null;
        if (
200 === $response->getCode()) {
            
$resultArray $this->decodeData($response);
            
$result = new CreateRefundResponse($resultArray);
        } else {
            
$this->handleError($response);
        }

        return 
$result;
    }

    
/**
     * Получить информацию о возврате.
     *
     * Запрос позволяет получить информацию о текущем состоянии возврата по его уникальному идентификатору.
     * В ответ на запрос придет объект возврата {@link RefundResponse} в актуальном статусе.
     *
     * @example 01-client.php 183 8 Получить информацию о возврате
     *
     * @param string $refundId Идентификатор возврата
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     * @throws Exception
     */
    
public function getRefundInfo(string $refundId): ?RefundResponse
    
{
        if (!
TypeCast::canCastToString($refundId)) {
            throw new 
InvalidArgumentException('Invalid refundId value: string required');
        }
        if (
36 !== mb_strlen($refundId)) {
            throw new 
InvalidArgumentException('Invalid refundId value');
        }
        
$path self::REFUNDS_PATH '/' $refundId;

        
$response $this->execute($pathHttpVerb::GET, []);

        
$result null;
        if (
200 === $response->getCode()) {
            
$resultArray $this->decodeData($response);
            
$result = new RefundResponse($resultArray);
        } else {
            
$this->handleError($response);
        }

        return 
$result;
    }

    
/**
     * Создание Webhook.
     *
     * Запрос позволяет подписаться на уведомления о событии (например, на переход платежа в статус successed).
     *
     * @example 01-client.php 202 36 Создание Webhook
     *
     * @param array|Webhook $request Запрос на создание вебхука
     * @param null|string $idempotencyKey [Ключ идемпотентности](https://yookassa.ru/developers/using-api/basics?lang=php#idempotence)
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     * @throws Exception
     */
    
public function addWebhook(array|Webhook $request, ?string $idempotencyKey null): ?Webhook
    
{
        
$path self::WEBHOOKS_PATH;

        
$headers = [];

        if (
$idempotencyKey) {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = $idempotencyKey;
        } else {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = UUID::v4();
        }
        if (
is_array($request)) {
            
$webhook = new Webhook($request);
        } else {
            
$webhook $request;
        }

        if (!
$webhook instanceof Webhook) {
            throw new 
InvalidArgumentException();
        }

        
$httpBody $this->encodeData($webhook->jsonSerialize());

        
$response $this->execute($pathHttpVerb::POST, [], $httpBody$headers);

        
$result null;
        if (
200 === $response->getCode()) {
            
$resultArray $this->decodeData($response);
            
$result = new Webhook($resultArray);
        } else {
            
$this->handleError($response);
        }

        return 
$result;
    }

    
/**
     * Удаление Webhook.
     *
     * Запрос позволяет отписаться от уведомлений о событии для переданного OAuth-токена.
     * Чтобы удалить webhook, вам нужно передать в запросе его идентификатор.
     *
     * @example 01-client.php 202 36 Удаление Webhook
     *
     * @param string $webhookId Идентификатор Webhook
     * @param null|string $idempotencyKey [Ключ идемпотентности](https://yookassa.ru/developers/using-api/basics?lang=php#idempotence)
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     * @throws Exception
     */
    
public function removeWebhook(string $webhookId, ?string $idempotencyKey null): ?Webhook
    
{
        
$headers = [];

        if (
$idempotencyKey) {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = $idempotencyKey;
        } else {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = UUID::v4();
        }
        
$path self::WEBHOOKS_PATH '/' $webhookId;

        
$response $this->execute($pathHttpVerb::DELETE, [], null$headers);

        
$result null;
        if (
200 === $response->getCode()) {
            
$resultArray $this->decodeData($response);
            
$result = new Webhook($resultArray);
        } else {
            
$this->handleError($response);
        }

        return 
$result;
    }

    
/**
     * Список созданных Webhook.
     *
     * Запрос позволяет узнать, какие webhook есть для переданного OAuth-токена.
     *
     * @example 01-client.php 202 36 Список созданных Webhook
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API.
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     * @throws AuthorizeException Ошибка авторизации. Не установлен заголовок
     */
    
public function getWebhooks(): ?WebhookListResponse
    
{
        
$path self::WEBHOOKS_PATH;

        
$response $this->execute($pathHttpVerb::GET, []);

        
$result null;
        if (
200 === $response->getCode()) {
            
$responseArray $this->decodeData($response);
            
$result = new WebhookListResponse($responseArray);
        } else {
            
$this->handleError($response);
        }

        return 
$result;
    }

    
/**
     * Получить список чеков магазина.
     *
     * Запрос позволяет получить список чеков, отфильтрованный по заданным критериям.
     * Можно запросить чеки по конкретному платежу, чеки по конкретному возврату или все чеки магазина.
     * В ответ на запрос вернется список чеков с учетом переданных параметров. В списке будет информация о чеках,
     * созданных за последние 3 года. Список будет отсортирован по времени создания чеков в порядке убывания.
     * Если результатов больше, чем задано в `limit`, список будет выводиться фрагментами.
     * В этом случае в ответе на запрос вернется фрагмент списка и параметр `next_cursor` с указателем на следующий фрагмент.
     *
     * @example 01-client.php 240 24 Получить список чеков магазина с фильтрацией
     *
     * @param null|array|ReceiptsRequestInterface $filter Параметры фильтрации
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     * @throws Exception
     */
    
public function getReceipts(mixed $filter null): ReceiptsResponse
    
{
        
$path self::RECEIPTS_PATH;

        if (
null === $filter) {
            
$queryParams = [];
        } else {
            if (
is_array($filter)) {
                
$filter ReceiptsRequest::builder()->build($filter);
            }
            
$serializer = new ReceiptsRequestSerializer();
            
$queryParams $serializer->serialize($filter);
        }

        
$response $this->execute($pathHttpVerb::GET$queryParams);

        
$receiptsResponse null;
        if (
200 === $response->getCode()) {
            
$responseArray $this->decodeData($response);
            
$receiptsResponse = new ReceiptsResponse($responseArray);
        } else {
            
$this->handleError($response);
        }

        return 
$receiptsResponse;
    }

    
/**
     * Отправка чека в облачную кассу.
     *
     * Создает объект чека — `Receipt`. Возвращает успешно созданный чек по уникальному идентификатору
     * платежа или возврата.
     *
     * @example 01-client.php 100 43 Запрос на создание чека
     *
     * @param array|CreatePostReceiptRequestInterface $receipt Запрос на создание чека
     * @param null|string $idempotenceKey [Ключ идемпотентности](https://yookassa.ru/developers/using-api/basics?lang=php#idempotence)
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     * @throws AuthorizeException Ошибка авторизации. Не установлен заголовок
     * @throws Exception
     */
    
public function createReceipt(array|CreatePostReceiptRequestInterface $receipt, ?string $idempotenceKey null): ?AbstractReceiptResponse
    
{
        
$path self::RECEIPTS_PATH;

        
$headers = [];

        if (
$idempotenceKey) {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = $idempotenceKey;
        } else {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = UUID::v4();
        }

        if (
is_array($receipt)) {
            
$receipt CreatePostReceiptRequest::builder()->build($receipt);
        }

        
$serializer = new CreatePostReceiptRequestSerializer();
        
$serializedData $serializer->serialize($receipt);
        
$httpBody $this->encodeData($serializedData);

        
$response $this->execute($pathHttpVerb::POST, [], $httpBody$headers);

        
$receiptResponse null;
        if (
200 === $response->getCode()) {
            
$resultArray $this->decodeData($response);
            
$factory = new ReceiptResponseFactory();
            
$receiptResponse $factory->factory($resultArray);
        } else {
            
$this->handleError($response);
        }

        return 
$receiptResponse;
    }

    
/**
     * Получить информацию о чеке.
     *
     * Запрос позволяет получить информацию о текущем состоянии чека по его уникальному идентификатору.
     * Выдает объект чека {@link ReceiptResponseInterface} в актуальном статусе.
     *
     * @example 01-client.php 173 8 Получить информацию о чеке
     *
     * @param string $receiptId Идентификатор чека
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     */
    
public function getReceiptInfo(string $receiptId): ?ReceiptResponseInterface
    
{
        if (!
TypeCast::canCastToString($receiptId)) {
            throw new 
InvalidArgumentException('Invalid receiptId value: string required');
        }
        if (
39 !== mb_strlen($receiptId)) {
            throw new 
InvalidArgumentException('Invalid receiptId value');
        }

        
$path self::RECEIPTS_PATH '/' $receiptId;

        
$response $this->execute($pathHttpVerb::GET, []);

        
$result null;
        if (
200 === $response->getCode()) {
            
$resultArray $this->decodeData($response);
            
$factory = new ReceiptResponseFactory();
            
$result $factory->factory($resultArray);
        } else {
            
$this->handleError($response);
        }

        return 
$result;
    }

    
/**
     * Создание сделки.
     *
     * Запрос позволяет создать сделку, в рамках которой необходимо принять оплату от покупателя и перечислить ее продавцу.
     *
     * Необходимо указать следующие параметры:
     * <ul>
     * <li>type — Тип сделки. Фиксированное значение: safe_deal — Безопасная сделка;</li>
     * <li>fee_moment — Момент перечисления вам вознаграждения платформы. Возможные значения: payment_succeeded — после успешной оплаты;</li>
     * <li>deal_closed — при закрытии сделки после успешной выплаты.</li>
     * </ul>
     *
     * Дополнительные параметры:
     * <ul>
     * <li>metadata — Любые дополнительные данные, которые нужны вам для работы (например, ваш внутренний идентификатор заказа);</li>
     * <li>description — Описание сделки (не более 128 символов). Используется для фильтрации при получении списка сделок.</li>
     * </ul>
     *
     * @example 01-client.php 316 18 Запрос на создание сделки
     *
     * @param array|CreateDealRequestInterface $deal Запрос на создание сделки
     * @param null|string $idempotenceKey [Ключ идемпотентности](https://yookassa.ru/developers/using-api/basics?lang=php#idempotence)
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     */
    
public function createDeal(CreateDealRequestInterface|array $deal, ?string $idempotenceKey null): ?CreateDealResponse
    
{
        
$path self::DEALS_PATH;

        
$headers = [];

        if (
$idempotenceKey) {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = $idempotenceKey;
        } else {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = UUID::v4();
        }
        if (
is_array($deal)) {
            
$deal CreateDealRequest::builder()->build($deal);
        }

        
$serializer = new CreateDealRequestSerializer();
        
$serializedData $serializer->serialize($deal);
        
$httpBody $this->encodeData($serializedData);

        
$response $this->execute($pathHttpVerb::POST, [], $httpBody$headers);

        
$dealResponse null;
        if (
200 === $response->getCode()) {
            
$resultArray $this->decodeData($response);
            
$dealResponse = new CreateDealResponse($resultArray);
        } else {
            
$this->handleError($response);
        }

        return 
$dealResponse;
    }

    
/**
     * Получить информацию о сделке.
     *
     * Запрос позволяет получить информацию о текущем состоянии сделки по её уникальному идентификатору.
     * Выдает объект чека {@link DealInteface} в актуальном статусе.
     *
     * @example 01-client.php 336 8 Получить информацию о сделке
     *
     * @param string $dealId Идентификатор сделки
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     */
    
public function getDealInfo(string $dealId): ?DealInterface
    
{
        if (!
TypeCast::canCastToString($dealId)) {
            throw new 
InvalidArgumentException('Invalid dealId value: string required');
        }
        if (
mb_strlen($dealId) < 36 || mb_strlen($dealId) > 50) {
            throw new 
InvalidArgumentException('Invalid dealId value');
        }

        
$path self::DEALS_PATH '/' $dealId;

        
$response $this->execute($pathHttpVerb::GET, []);

        
$result null;
        if (
200 === $response->getCode()) {
            
$resultArray $this->decodeData($response);
            
$result = new DealResponse($resultArray);
        } else {
            
$this->handleError($response);
        }

        return 
$result;
    }

    
/**
     * Получить список сделок магазина.
     *
     * Запрос позволяет получить список сделок, отфильтрованный по заданным критериям.
     * В ответ на запрос вернется список сделок с учетом переданных параметров. В списке будет информация о сделках,
     * созданных за последние 3 года. Список будет отсортирован по времени создания сделок в порядке убывания.
     * Если результатов больше, чем задано в `limit`, список будет выводиться фрагментами.
     * В этом случае в ответе на запрос вернется фрагмент списка и параметр `next_cursor` с указателем на следующий фрагмент.
     *
     * @example 01-client.php 346 28 Получить список сделок с фильтрацией
     *
     * @param null|array|DealsRequestInterface $filter Параметры фильтрации
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     * @throws Exception
     */
    
public function getDeals(mixed $filter null): ?DealsResponse
    
{
        
$path self::DEALS_PATH;

        if (
null === $filter) {
            
$queryParams = [];
        } else {
            if (
is_array($filter)) {
                
$filter DealsRequest::builder()->build($filter);
            }
            
$serializer = new DealsRequestSerializer();
            
$queryParams $serializer->serialize($filter);
        }

        
$response $this->execute($pathHttpVerb::GET$queryParams);

        
$dealsResponse null;
        if (
200 === $response->getCode()) {
            
$responseArray $this->decodeData($response);
            
$dealsResponse = new DealsResponse($responseArray);
        } else {
            
$this->handleError($response);
        }

        return 
$dealsResponse;
    }

    
/**
     * Создание выплаты.
     *
     * Запрос позволяет перечислить продавцу оплату за выполненную услугу или проданный товар в рамках Безопасной сделки.
     * Выплату можно сделать на банковскую карту или на кошелек ЮMoney.
     *
     * Обязательный параметр:
     * <ul>
     * <li>amount — сумма выплаты. Есть ограничения на минимальный и максимальный размер выплаты и сумму выплат за месяц.</li>
     * </ul>
     *
     * Необходимо указать один из параметров:
     * <ul>
     * <li>payout_destination_data — данные платежного средства, на которое нужно сделать выплату;</li>
     * <li>payout_token — токенизированные данные для выплаты. Например, синоним банковской карты.</li>
     * </ul>
     *
     * Дополнительные параметры:
     * <ul>
     * <li>description — описание транзакции (не более 128 символов);</li>
     * <li>deal — сделка, в рамках которой нужно провести выплату. Необходимо передавать, если вы проводите Безопасную сделку;</li>
     * <li>metadata — любые дополнительные данные, которые нужны вам для работы (например, ваш внутренний идентификатор заказа).</li>
     * </ul>
     *
     * @param array|CreatePayoutRequestInterface $payout Запрос на создание выплаты
     * @param null|string $idempotenceKey [Ключ идемпотентности](https://yookassa.ru/developers/using-api/basics?lang=php#idempotence)
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     * @throws Exception
     *
     * @example 01-client.php 376 26 Запрос на создание выплаты
     */
    
public function createPayout(array|CreatePayoutRequestInterface $payout, ?string $idempotenceKey null): ?CreatePayoutResponse
    
{
        
$path self::PAYOUTS_PATH;

        
$headers = [];

        if (
$idempotenceKey) {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = $idempotenceKey;
        } else {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = UUID::v4();
        }
        if (
is_array($payout)) {
            
$payout CreatePayoutRequest::builder()->build($payout);
        }

        
$serializer = new CreatePayoutRequestSerializer();
        
$serializedData $serializer->serialize($payout);
        
$httpBody $this->encodeData($serializedData);

        
$response $this->execute($pathHttpVerb::POST, [], $httpBody$headers);

        
$payoutResponse null;
        if (
200 === $response->getCode()) {
            
$resultArray $this->decodeData($response);
            
$payoutResponse = new CreatePayoutResponse($resultArray);
        } else {
            
$this->handleError($response);
        }

        return 
$payoutResponse;
    }

    
/**
     * Получить информацию о выплате.
     *
     * Запрос позволяет получить информацию о текущем состоянии выплаты по ее уникальному идентификатору.
     * Выдает объект выплаты {@link PayoutInterface} в актуальном статусе.
     *
     * @param string $payoutId Идентификатор выплаты
     *
     * @return null|PayoutInterface Объект выплаты
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     *
     * @example 01-client.php 405 9 Получить информацию о выплате
     */
    
public function getPayoutInfo(string $payoutId): ?PayoutInterface
    
{
        if (
TypeCast::canCastToString($payoutId)) {
            
$length mb_strlen($payoutId'utf-8');
            if (
$length 36 || $length 50) {
                throw new 
InvalidPropertyValueException('Invalid Payout id value'0'Payout.id'$payoutId);
            }
        } else {
            throw new 
InvalidPropertyValueTypeException('Invalid payoutId value: string required');
        }

        
$path self::PAYOUTS_PATH '/' $payoutId;

        
$response $this->execute($pathHttpVerb::GET, []);

        
$result null;
        if (
200 === $response->getCode()) {
            
$resultArray $this->decodeData($response);
            
$result = new PayoutResponse($resultArray);
        } else {
            
$this->handleError($response);
        }

        return 
$result;
    }

    
/**
     * Информация о магазине.
     *
     * Запрос позволяет получить информацию о магазине для переданного OAuth-токена.
     *
     * @example 01-client.php 12 7 Информация о магазине
     *
     * @param null|array|int|string $filter Параметры поиска. В настоящее время доступен только `on_behalf_of`
     *
     * @return null|array Массив с информацией о магазине
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов.
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     * @throws AuthorizeException Ошибка авторизации. Не установлен заголовок
     */
    
public function me(mixed $filter null): ?array
    {
        
$path self::ME_PATH;

        
$queryParams = [];
        if (
is_array($filter)) {
            
$queryParams $filter;
        } elseif (
is_string($filter) || is_int($filter)) {
            
$queryParams['on_behalf_of'] = $filter;
        }

        
$response $this->execute($pathHttpVerb::GET$queryParams);

        
$result null;
        if (
200 === $response->getCode()) {
            
$responseArray $this->decodeData($response);
            
$result $responseArray;
        } else {
            
$this->handleError($response);
        }

        return 
$result;
    }

    
/**
     * Создание персональных данных.
     *
     * Используйте этот запрос, чтобы создать в ЮKassa [объект персональных данных](#personal_data_object).
     * В запросе необходимо передать фамилию, имя, отчество пользователя и указать, с какой целью эти данные будут использоваться.
     * Идентификатор созданного объекта персональных данных необходимо использовать в запросе на проведение выплаты через СБП с проверкой получателя.
     * [Подробнее о выплатах с проверкой получателя](/developers/payouts/scenario-extensions/recipient-check)
     *
     * @example 01-client.php 416 17 Запрос на создание персональных данных
     *
     * @param array|CreatePersonalDataRequestInterface $request Запрос на создание персональных данных
     * @param null|string $idempotencyKey [Ключ идемпотентности](https://yookassa.ru/developers/using-api/basics?lang=php#idempotence)
     *
     * @return null|PersonalDataResponse Объект персональных данных
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     * @throws Exception
     */
    
public function createPersonalData(array|CreatePersonalDataRequestInterface $request, ?string $idempotencyKey null): ?PersonalDataResponse
    
{
        
$path self::PERSONAL_DATA_PATH;

        
$headers = [];

        if (
$idempotencyKey) {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = $idempotencyKey;
        } else {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = UUID::v4();
        }
        if (
is_array($request)) {
            
$request CreatePersonalDataRequest::builder()->build($request);
        }

        
$serializer = new CreatePersonalDataRequestSerializer();
        
$serializedData $serializer->serialize($request);
        
$httpBody $this->encodeData($serializedData);

        
$response $this->execute($pathHttpVerb::POST, [], $httpBody$headers);

        
$result null;
        if (
200 === $response->getCode()) {
            
$resultArray $this->decodeData($response);
            
$result = new PersonalDataResponse($resultArray);
        } else {
            
$this->handleError($response);
        }

        return 
$result;
    }

    
/**
     * Получить информацию о персональных данных.
     *
     * Запрос позволяет получить информацию о текущем состоянии персональных данных по их уникальному идентификатору.
     * Выдает объект платежа {@link PersonalDataInterface} в актуальном статусе.
     *
     * @example 01-client.php 435 9 Получить информацию о персональных данных
     *
     * @param string $personalDataId Идентификатор персональных данных
     *
     * @return null|PersonalDataInterface Объект персональных данных
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     */
    
public function getPersonalDataInfo(string $personalDataId): ?PersonalDataInterface
    
{
        if (!
TypeCast::canCastToString($personalDataId)) {
            throw new 
InvalidArgumentException('Invalid personalDataId value: string required');
        }
        if (
mb_strlen($personalDataId) < PersonalDataInterface::MIN_LENGTH_ID || mb_strlen($personalDataId) > PersonalDataInterface::MAX_LENGTH_ID) {
            throw new 
InvalidArgumentException('Invalid personalDataId value');
        }

        
$path self::PERSONAL_DATA_PATH '/' $personalDataId;

        
$response $this->execute($pathHttpVerb::GET, []);

        
$result null;
        if (
200 === $response->getCode()) {
            
$resultArray $this->decodeData($response);
            
$result = new PersonalDataResponse($resultArray);
        } else {
            
$this->handleError($response);
        }

        return 
$result;
    }

    
/**
     * Получить список участников СБП
     *
     * С помощью этого запроса вы можете получить актуальный список всех участников СБП.
     * Список нужно вывести получателю выплаты, идентификатор выбранного участника СБП необходимо использовать
     * в запросе на создание выплаты.
     *
     * @example 01-client.php 474 7 Получить список участников СБП
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     */
    
public function getSbpBanks(): ?SbpBanksResponse
    
{
        
$path self::SBP_BANKS_PATH;

        
$response $this->execute($pathHttpVerb::GET, []);

        
$result null;
        if (
200 === $response->getCode()) {
            
$resultArray $this->decodeData($response);
            
$result = new SbpBanksResponse($resultArray);
        } else {
            
$this->handleError($response);
        }

        return 
$result;
    }

    
/**
     * Создание самозанятого.
     *
     * Используйте этот запрос, чтобы создать в ЮKassa [объект самозанятого](https://yookassa.ru/developers/api?codeLang=bash#self_employed_object).
     *
     * В запросе необходимо передать ИНН или телефон самозанятого для идентификации в сервисе Мой налог,
     * сценарий подтверждения пользователем заявки ЮMoney на получение прав для регистрации чеков и описание самозанятого.
     *
     * Идентификатор созданного объекта самозанятого необходимо использовать в запросе на проведение выплаты.
     *
     * @example 01-client.php 446 15 Запрос на создание самозанятого
     *
     * @param array|SelfEmployedRequestInterface $selfEmployed Запрос на создание самозанятого
     * @param null|string $idempotenceKey [Ключ идемпотентности](https://yookassa.ru/developers/using-api/basics?lang=php#idempotence)
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     */
    
public function createSelfEmployed(array|SelfEmployedRequestInterface $selfEmployed, ?string $idempotenceKey null): ?SelfEmployedResponse
    
{
        
$path self::SELF_EMPLOYED_PATH;

        
$headers = [];

        if (
$idempotenceKey) {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = $idempotenceKey;
        } else {
            
$headers[self::IDEMPOTENCY_KEY_HEADER] = UUID::v4();
        }

        
$request is_array($selfEmployed) ? SelfEmployedRequest::builder()->build($selfEmployed) : $selfEmployed;

        
$serializer = new SelfEmployedRequestSerializer();
        
$serializedData $serializer->serialize($request);
        
$httpBody $this->encodeData($serializedData);

        
$response $this->execute($pathHttpVerb::POST, [], $httpBody$headers);

        
$result null;
        if (
200 === $response->getCode()) {
            
$resultArray $this->decodeData($response);
            
$result = new SelfEmployedResponse($resultArray);
        } else {
            
$this->handleError($response);
        }

        return 
$result;
    }

    
/**
     * Получить информацию о самозанятом
     *
     * С помощью этого запроса вы можете получить информацию о текущем статусе самозанятого по его уникальному идентификатору.
     *
     * @example 01-client.php 463 9 Получить информацию о самозанятом
     *
     * @param string $selfEmployedId Идентификатор самозанятого
     *
     * @throws ApiException Неожиданный код ошибки
     * @throws BadApiRequestException Неправильный запрос. Чаще всего этот статус выдается из-за нарушения правил взаимодействия с API
     * @throws ForbiddenException Секретный ключ или OAuth-токен верный, но не хватает прав для совершения операции
     * @throws InternalServerError Технические неполадки на стороне ЮKassa. Результат обработки запроса неизвестен. Повторите запрос позднее с тем же ключом идемпотентности
     * @throws NotFoundException Ресурс не найден
     * @throws ResponseProcessingException Запрос был принят на обработку, но она не завершена
     * @throws TooManyRequestsException Превышен лимит запросов в единицу времени. Попробуйте снизить интенсивность запросов
     * @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
     * @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
     */
    
public function getSelfEmployedInfo(string $selfEmployedId): ?SelfEmployedInterface
    
{
        if (!
TypeCast::canCastToString($selfEmployedId)) {
            throw new 
InvalidArgumentException('Invalid selfEmployedId value: string required');
        }
        if (
mb_strlen($selfEmployedId) < SelfEmployedInterface::MIN_LENGTH_ID || mb_strlen($selfEmployedId) > SelfEmployedInterface::MAX_LENGTH_ID) {
            throw new 
InvalidArgumentException('Invalid selfEmployedId value');
        }

        
$path self::SELF_EMPLOYED_PATH '/' $selfEmployedId;

        
$response $this->execute($pathHttpVerb::GET, []);

        
$result null;
        if (
200 === $response->getCode()) {
            
$resultArray $this->decodeData($response);
            
$result = new SelfEmployedResponse($resultArray);
        } else {
            
$this->handleError($response);
        }

        return 
$result;
    }
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0084 ]--