Добавлена поддержка платежных табличек pos_links. Добавлены loan_declined, loan_declined_by_payer, loan_application_expired в причинах отмены платежа

Добавлено поле `metadata` в сохраненных методах оплаты
Увеличено максимальное значение числа цифр параметра `oktmo` в данных платежных поручений `PaymentOrder`
This commit is contained in:
Александра Д. Спиридонова
2026-08-12 16:21:33 +03:00
parent 2dbe18f268
commit 7a7f5cafa8
579 changed files with 12016 additions and 540 deletions
+254 -6
View File
@@ -97,6 +97,15 @@ use YooKassa\Request\Payouts\PayoutsRequestInterface;
use YooKassa\Request\Payouts\PayoutsRequestSerializer;
use YooKassa\Request\Payouts\PayoutsResponse;
use YooKassa\Request\Payouts\SbpBanksResponse;
use YooKassa\Model\PosLink\PosLinkInfo;
use YooKassa\Request\PosLink\CreatePosLinkRequest;
use YooKassa\Request\PosLink\CreatePosLinkRequestInterface;
use YooKassa\Request\PosLink\CreatePosLinkRequestSerializer;
use YooKassa\Request\PosLink\CreatePosLinkResponse;
use YooKassa\Request\PosLink\PosLinkResponse;
use YooKassa\Request\PosLink\RecipientPosLinkRequest;
use YooKassa\Request\PosLink\RecipientPosLinkRequestInterface;
use YooKassa\Request\PosLink\RecipientPosLinkRequestSerializer;
use YooKassa\Request\PersonalData\PersonalDataResponse;
use YooKassa\Request\PersonalData\PersonalDataType\AbstractPersonalDataRequest;
use YooKassa\Request\PersonalData\PersonalDataType\RecipientPersonalDataRequestFactory;
@@ -135,7 +144,7 @@ class Client extends BaseClient
/**
* Текущая версия библиотеки.
*/
public const SDK_VERSION = '3.14.0';
public const SDK_VERSION = '3.15.0';
/**
* Получить список платежей магазина.
@@ -516,7 +525,7 @@ class Client extends BaseClient
* Запрос позволяет получить информацию о текущем состоянии возврата по его уникальному идентификатору.
* В ответ на запрос придет объект возврата {@link RefundResponse} в актуальном статусе.
*
* @example 01-client.php 183 7 Получить информацию о возврате
* @example 01-client.php 193 7 Получить информацию о возврате
*
* @param string $refundId Идентификатор возврата
*
@@ -607,6 +616,8 @@ class Client extends BaseClient
* Запрос позволяет отписаться от уведомлений о событии для переданного OAuth-токена.
* Чтобы удалить webhook, вам нужно передать в запросе его идентификатор.
*
* @example 01-client.php 202 36 Удаление Webhook
*
* @param string $webhookId Идентификатор Webhook
* @param null|string $idempotenceKey [Ключ идемпотентности](https://yookassa.ru/developers/using-api/basics?lang=php#idempotence)
*
@@ -620,8 +631,6 @@ class Client extends BaseClient
* @throws UnauthorizedException Неверное имя пользователя или пароль или невалидный OAuth-токен при аутентификации
* @throws ExtensionNotFoundException Требуемое PHP расширение не установлено
* @throws Exception
*@example 01-client.php 202 36 Удаление Webhook
*
*/
public function removeWebhook(string $webhookId, ?string $idempotenceKey = null): ?Webhook
{
@@ -686,7 +695,7 @@ class Client extends BaseClient
* Если результатов больше, чем задано в `limit`, список будет выводиться фрагментами.
* В этом случае в ответе на запрос вернется фрагмент списка и параметр `next_cursor` с указателем на следующий фрагмент.
*
* @example 01-client.php 240 24 Получить список чеков магазина с фильтрацией
* @example 01-client.php 266 22 Получить список чеков магазина с фильтрацией
*
* @param null|array|ReceiptsRequestInterface $filter Параметры фильтрации
*
@@ -782,7 +791,7 @@ class Client extends BaseClient
* Запрос позволяет получить информацию о текущем состоянии чека по его уникальному идентификатору.
* Выдает объект чека {@link ReceiptResponseInterface} в актуальном статусе.
*
* @example 01-client.php 173 7 Получить информацию о чеке
* @example 01-client.php 183 7 Получить информацию о чеке
*
* @param string $receiptId Идентификатор чека
*
@@ -973,6 +982,245 @@ class Client extends BaseClient
return $dealsResponse;
}
/**
* Создание кассовой ссылки.
*
* Запрос позволяет создать кассовую ссылку для проведения платежа в офлайне.
*
* @param array|CreatePosLinkRequestInterface $posLinkData Данные для создания кассовой ссылки
* @param null|string $idempotenceKey [Ключ идемпотентности](https://yookassa.ru/developers/using-api/basics?lang=php#idempotence)
*
* @return null|PosLinkInfo Объект ответа от API
*
* @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 644 18 Запрос на создание кассовой ссылки
*
*/
public function createPosLink(CreatePosLinkRequestInterface|array $posLinkData, ?string $idempotenceKey = null): ?PosLinkInfo
{
$path = self::POS_LINKS_PATH;
$headers = [self::IDEMPOTENCE_KEY_HEADER => $idempotenceKey ?: UUID::v4()];
$request = is_array($posLinkData) ? CreatePosLinkRequest::builder()->build($posLinkData) : $posLinkData;
$serializer = new CreatePosLinkRequestSerializer();
$serializedData = $serializer->serialize($request);
$httpBody = $this->encodeData($serializedData);
$response = $this->execute($path, HttpVerb::POST, [], $httpBody, $headers);
$posLinkResponse = null;
if (200 === $response->getCode()) {
$resultArray = $this->decodeData($response);
$posLinkResponse = new CreatePosLinkResponse($resultArray);
} else {
$this->handleError($response);
}
return $posLinkResponse;
}
/**
* Получить информацию о кассовой ссылке.
*
* Запрос позволяет получить информацию о кассовой ссылке по её уникальному идентификатору.
*
* @example 01-client.php 664 7 Получить информацию о кассовой ссылке
*
* @param string $posLinkId Идентификатор кассовой ссылки
*
* @return null|PosLinkInfo Объект ответа от API
*
* @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 getPosLinkInfo(string $posLinkId): ?PosLinkInfo
{
if (!TypeCast::canCastToString($posLinkId)) {
throw new InvalidArgumentException('Invalid posLinkId value: string required');
}
if (mb_strlen($posLinkId) < 36 || mb_strlen($posLinkId) > 50) {
throw new InvalidArgumentException('Invalid posLinkId value');
}
$path = self::POS_LINKS_PATH . '/' . $posLinkId;
$response = $this->execute($path, HttpVerb::GET, []);
$result = null;
if (200 === $response->getCode()) {
$resultArray = $this->decodeData($response);
$result = new PosLinkResponse($resultArray);
} else {
$this->handleError($response);
}
return $result;
}
/**
* Активировать кассовую ссылку.
*
* Запрос позволяет активировать кассовую ссылку, чтобы она стала доступна для приема платежей.
*
* @example 01-client.php 673 10 Активировать кассовую ссылку
*
* @param string $posLinkId Идентификатор кассовой ссылки
* @param null|string $idempotenceKey [Ключ идемпотентности](https://yookassa.ru/developers/using-api/basics?lang=php#idempotence)
*
* @return null|PosLinkInfo Объект ответа от API
*
* @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 activatePosLink(string $posLinkId, ?string $idempotenceKey = null): ?PosLinkInfo
{
if (!TypeCast::canCastToString($posLinkId)) {
throw new InvalidArgumentException('Invalid posLinkId value: string required');
}
if (mb_strlen($posLinkId) < 36 || mb_strlen($posLinkId) > 50) {
throw new InvalidArgumentException('Invalid posLinkId value');
}
$path = self::POS_LINKS_PATH . '/' . $posLinkId . '/activate';
$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 PosLinkResponse($resultArray);
} else {
$this->handleError($response);
}
return $result;
}
/**
* Деактивировать кассовую ссылку.
*
* Запрос позволяет деактивировать кассовую ссылку, прием платежей по ней будет недоступен.
*
* @example 01-client.php 685 10 Деактивировать кассовую ссылку
*
* @param string $posLinkId Идентификатор кассовой ссылки
* @param null|string $idempotenceKey [Ключ идемпотентности](https://yookassa.ru/developers/using-api/basics?lang=php#idempotence)
*
* @return null|PosLinkInfo Объект ответа от API
*
* @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 deactivatePosLink(string $posLinkId, ?string $idempotenceKey = null): ?PosLinkInfo
{
if (!TypeCast::canCastToString($posLinkId)) {
throw new InvalidArgumentException('Invalid posLinkId value: string required');
}
if (mb_strlen($posLinkId) < 36 || mb_strlen($posLinkId) > 50) {
throw new InvalidArgumentException('Invalid posLinkId value');
}
$path = self::POS_LINKS_PATH . '/' . $posLinkId . '/deactivate';
$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 PosLinkResponse($resultArray);
} else {
$this->handleError($response);
}
return $result;
}
/**
* Изменение торговой точки, привязанной к кассовой ссылке.
*
* Запрос позволяет привязать к кассовой ссылке другую торговую точку.
*
* @example 01-client.php 697 12 Привязать торговую точку к кассовой ссылке
*
* @param string $posLinkId Идентификатор кассовой ссылки
* @param array|RecipientPosLinkRequestInterface $recipientData Идентификатор торговой точки, которую вы хотите привязать к кассовой ссылке.
* @param null|string $idempotenceKey [Ключ идемпотентности](https://yookassa.ru/developers/using-api/basics?lang=php#idempotence)
*
* @return null|PosLinkInfo Объект ответа от API
*
* @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 recipientPosLink(string $posLinkId, array|RecipientPosLinkRequestInterface $recipientData, ?string $idempotenceKey = null): ?PosLinkInfo
{
if (!TypeCast::canCastToString($posLinkId)) {
throw new InvalidArgumentException('Invalid posLinkId value: string required');
}
if (mb_strlen($posLinkId) < 36 || mb_strlen($posLinkId) > 50) {
throw new InvalidArgumentException('Invalid posLinkId value');
}
$path = self::POS_LINKS_PATH . '/' . $posLinkId . '/recipient';
$headers = [self::IDEMPOTENCE_KEY_HEADER => $idempotenceKey ?: UUID::v4()];
$request = is_array($recipientData) ? RecipientPosLinkRequest::builder()->build($recipientData) : $recipientData;
$serializer = new RecipientPosLinkRequestSerializer();
$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 PosLinkResponse($resultArray);
} else {
$this->handleError($response);
}
return $result;
}
/**
* Создание выплаты.
*