Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/vendor/yoomoney/yookassa-sdk-php/lib/ |
Upload File : |
<?php /* * The MIT License * * Copyright (c) 2025 "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 JsonException; 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\InvalidRequestException; 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\Invoice\InvoiceInterface; 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\Invoices\CreateInvoiceRequest; use YooKassa\Request\Invoices\CreateInvoiceRequestInterface; use YooKassa\Request\Invoices\CreateInvoiceRequestSerializer; use YooKassa\Request\Invoices\InvoiceResponse; 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\PersonalDataResponse; use YooKassa\Request\PersonalData\PersonalDataType\AbstractPersonalDataRequest; use YooKassa\Request\PersonalData\PersonalDataType\RecipientPersonalDataRequestFactory; 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.8.1'; /** * Получить список платежей магазина. * * Запрос позволяет получить список платежей, отфильтрованный по заданным критериям. * В ответ на запрос вернется список платежей с учетом переданных параметров. В списке будет информация о платежах, * созданных за последние 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($path, HttpVerb::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 $paymentData Запрос на создание платежа * @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 $paymentData, ?string $idempotenceKey = null): ?CreatePaymentResponse { $path = self::PAYMENTS_PATH; $headers = [self::IDEMPOTENCE_KEY_HEADER => $idempotenceKey ?: UUID::v4()]; $request = is_array($paymentData) ? CreatePaymentRequest::builder()->build($paymentData) : $paymentData; $serializer = new CreatePaymentRequestSerializer(); $serializedData = $serializer->serialize($request); $httpBody = $this->encodeData($this->addDefaultCmsName($serializedData)); $response = $this->execute($path, HttpVerb::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($path, HttpVerb::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 $captureData Запрос на создание подтверждения платежа * @param string $paymentId Идентификатор платежа * @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 */ public function capturePayment(array|CreateCaptureRequestInterface $captureData, string $paymentId, ?string $idempotenceKey = 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 = [self::IDEMPOTENCE_KEY_HEADER => $idempotenceKey ?: UUID::v4()]; $request = is_array($captureData) ? CreateCaptureRequest::builder()->build($captureData) : $captureData; $serializer = new CreateCaptureRequestSerializer(); $serializedData = $serializer->serialize($request); $httpBody = $this->encodeData($serializedData); $response = $this->execute($path, HttpVerb::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 $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 */ public function cancelPayment(string $paymentId, ?string $idempotenceKey = 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 = [self::IDEMPOTENCE_KEY_HEADER => $idempotenceKey ?: UUID::v4()]; $response = $this->execute($path, HttpVerb::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($path, HttpVerb::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 $refundData Запрос на создание возврата * @param null|string $idempotenceKey [Ключ идемпотентности](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 $refundData, ?string $idempotenceKey = null): ?CreateRefundResponse { $path = self::REFUNDS_PATH; $headers = [self::IDEMPOTENCE_KEY_HEADER => $idempotenceKey ?: UUID::v4()]; $request = is_array($refundData) ? CreateRefundRequest::builder()->build($refundData) : $refundData; $serializer = new CreateRefundRequestSerializer(); $serializedData = $serializer->serialize($request); $httpBody = $this->encodeData($serializedData); $response = $this->execute($path, HttpVerb::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($path, HttpVerb::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 $webhookData Запрос на создание вебхука * @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 */ public function addWebhook(array|Webhook $webhookData, ?string $idempotenceKey = null): ?Webhook { $path = self::WEBHOOKS_PATH; $headers = [self::IDEMPOTENCE_KEY_HEADER => $idempotenceKey ?: UUID::v4()]; $request = is_array($webhookData) ? new Webhook($webhookData) : $webhookData; if (!$request instanceof Webhook) { throw new InvalidArgumentException(); } $httpBody = $this->encodeData($request->jsonSerialize()); $response = $this->execute($path, HttpVerb::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, вам нужно передать в запросе его идентификатор. * * @param string $webhookId Идентификатор Webhook * @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 202 36 Удаление Webhook * */ public function removeWebhook(string $webhookId, ?string $idempotenceKey = null): ?Webhook { $headers = [self::IDEMPOTENCE_KEY_HEADER => $idempotenceKey ?: UUID::v4()]; $path = self::WEBHOOKS_PATH . '/' . $webhookId; $response = $this->execute($path, HttpVerb::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($path, HttpVerb::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($path, HttpVerb::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 $receiptData Запрос на создание чека * @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 $receiptData, ?string $idempotenceKey = null): ?AbstractReceiptResponse { $path = self::RECEIPTS_PATH; $headers = [self::IDEMPOTENCE_KEY_HEADER => $idempotenceKey ?: UUID::v4()]; $request = is_array($receiptData) ? CreatePostReceiptRequest::builder()->build($receiptData) : $receiptData; $serializer = new CreatePostReceiptRequestSerializer(); $serializedData = $serializer->serialize($request); $httpBody = $this->encodeData($serializedData); $response = $this->execute($path, HttpVerb::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($path, HttpVerb::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 $dealData Запрос на создание сделки * @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 $dealData, ?string $idempotenceKey = null): ?CreateDealResponse { $path = self::DEALS_PATH; $headers = [self::IDEMPOTENCE_KEY_HEADER => $idempotenceKey ?: UUID::v4()]; $request = is_array($dealData) ? CreateDealRequest::builder()->build($dealData) : $dealData; $serializer = new CreateDealRequestSerializer(); $serializedData = $serializer->serialize($request); $httpBody = $this->encodeData($serializedData); $response = $this->execute($path, HttpVerb::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($path, HttpVerb::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($path, HttpVerb::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> * * @example 01-client.php 376 26 Запрос на создание выплаты * * @param array|CreatePayoutRequestInterface $payoutData Запрос на создание выплаты * @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 */ public function createPayout(array|CreatePayoutRequestInterface $payoutData, ?string $idempotenceKey = null): ?CreatePayoutResponse { $path = self::PAYOUTS_PATH; $headers = [self::IDEMPOTENCE_KEY_HEADER => $idempotenceKey ?: UUID::v4()]; $request = is_array($payoutData) ? CreatePayoutRequest::builder()->build($payoutData) : $payoutData; $serializer = new CreatePayoutRequestSerializer(); $serializedData = $serializer->serialize($request); $httpBody = $this->encodeData($serializedData); $response = $this->execute($path, HttpVerb::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($path, HttpVerb::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($path, HttpVerb::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|AbstractPersonalDataRequest $personalData Запрос на создание персональных данных * @param null|string $idempotenceKey [Ключ идемпотентности](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|AbstractPersonalDataRequest $personalData, ?string $idempotenceKey = null): ?PersonalDataResponse { $path = self::PERSONAL_DATA_PATH; $headers = [self::IDEMPOTENCE_KEY_HEADER => $idempotenceKey ?: UUID::v4()]; $request = is_array($personalData) ? (new RecipientPersonalDataRequestFactory)->factoryFromArray($personalData) : $personalData; if (!$request->validate()) { throw new InvalidRequestException($request); } $httpBody = $this->encodeData($request->toArray()); $response = $this->execute($path, HttpVerb::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($path, HttpVerb::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($path, HttpVerb::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 = [self::IDEMPOTENCE_KEY_HEADER => $idempotenceKey ?: 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($path, HttpVerb::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($path, HttpVerb::GET, []); $result = null; if (200 === $response->getCode()) { $resultArray = $this->decodeData($response); $result = new SelfEmployedResponse($resultArray); } else { $this->handleError($response); } return $result; } /** * Создание счета. * * Используйте этот запрос, чтобы создать в ЮKassa [объект счета](https://yookassa.ru/developers/api?codeLang=bash#create_invoice). * * @example 01-client.php 484 69 Запрос на создание счёта * * @param array|CreateInvoiceRequestInterface $invoice * @param string|null $idempotenceKey * * @return InvoiceInterface|null * @throws ApiConnectionException * @throws ApiException * @throws AuthorizeException * @throws BadApiRequestException * @throws ExtensionNotFoundException * @throws ForbiddenException * @throws InternalServerError * @throws NotFoundException * @throws ResponseProcessingException * @throws TooManyRequestsException * @throws UnauthorizedException * @throws JsonException */ public function createInvoice(array|CreateInvoiceRequestInterface $invoice, ?string $idempotenceKey = null): ?InvoiceInterface { $path = self::INVOICES_PATH; $headers = [self::IDEMPOTENCE_KEY_HEADER => $idempotenceKey ?: UUID::v4()]; $request = is_array($invoice) ? CreateInvoiceRequest::builder()->build($invoice) : $invoice; $serializer = new CreateInvoiceRequestSerializer(); $serializedData = $serializer->serialize($request); $httpBody = $this->encodeData($serializedData); $response = $this->execute($path, HttpVerb::POST, [], $httpBody, $headers); $result = null; if (200 === $response->getCode()) { $resultArray = $this->decodeData($response); $result = new InvoiceResponse($resultArray); } else { $this->handleError($response); } return $result; } /** * Получить информацию о счете * * С помощью этого запроса вы можете получить информацию о текущем статусе счета по его уникальному идентификатору. * * @example 01-client.php 555 14 Получить информацию о счете * * @param string $invoiceId Идентификатор счета * * @return InvoiceInterface|null * @throws ApiConnectionException * @throws ApiException * @throws AuthorizeException * @throws BadApiRequestException * @throws ExtensionNotFoundException * @throws ForbiddenException * @throws InternalServerError * @throws JsonException * @throws NotFoundException * @throws ResponseProcessingException * @throws TooManyRequestsException * @throws UnauthorizedException */ public function getInvoiceInfo(string $invoiceId): ?InvoiceInterface { if (!TypeCast::canCastToString($invoiceId)) { throw new InvalidArgumentException('Invalid invoiceId value: string required'); } if (mb_strlen($invoiceId) < InvoiceInterface::MIN_LENGTH_ID || mb_strlen($invoiceId) > InvoiceInterface::MAX_LENGTH_ID) { throw new InvalidArgumentException('Invalid invoiceId value'); } $path = self::INVOICES_PATH . '/' . $invoiceId; $response = $this->execute($path, HttpVerb::GET, []); $result = null; if (200 === $response->getCode()) { $resultArray = $this->decodeData($response); $result = new InvoiceResponse($resultArray); } else { $this->handleError($response); } return $result; } /** * Добавляет в metadata метку cms_name, если она не была установлена * * @param array $requestArray * @return array */ private function addDefaultCmsName(array $requestArray): array { $defaultMetadata = ['cms_name' => 'yookassa_sdk_php_3']; $requestArray['metadata'] = array_merge($defaultMetadata, $requestArray['metadata'] ?? []); return $requestArray; } }