You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
385 lines
15 KiB
385 lines
15 KiB
1 year ago
|
<?php
|
||
|
|
||
|
/**
|
||
|
* The MIT License
|
||
|
*
|
||
|
* Copyright (c) 2020 "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\Model;
|
||
|
|
||
|
use YooKassa\Common\AbstractObject;
|
||
|
use YooKassa\Common\Exceptions\EmptyPropertyValueException;
|
||
|
use YooKassa\Common\Exceptions\InvalidPropertyValueException;
|
||
|
use YooKassa\Common\Exceptions\InvalidPropertyValueTypeException;
|
||
|
use YooKassa\Helpers\TypeCast;
|
||
|
|
||
|
/**
|
||
|
* Класс объекта с информацией о возврате платежа
|
||
|
*
|
||
|
* @property string $id Идентификатор возврата платежа
|
||
|
* @property string $paymentId Идентификатор платежа
|
||
|
* @property string $payment_id Идентификатор платежа
|
||
|
* @property string $status Статус возврата
|
||
|
* @property \DateTime $createdAt Время создания возврата
|
||
|
* @property \DateTime $created_at Время создания возврата
|
||
|
* @property AmountInterface $amount Сумма возврата
|
||
|
* @property string $receiptRegistration Статус регистрации чека
|
||
|
* @property string $receipt_registration Статус регистрации чека
|
||
|
* @property string $description Комментарий, основание для возврата средств покупателю
|
||
|
*/
|
||
|
class Refund extends AbstractObject implements RefundInterface
|
||
|
{
|
||
|
/**
|
||
|
* @var string Идентификатор возврата платежа
|
||
|
*/
|
||
|
private $_id;
|
||
|
|
||
|
/**
|
||
|
* @var string Идентификатор платежа
|
||
|
*/
|
||
|
private $_paymentId;
|
||
|
|
||
|
/**
|
||
|
* @var string Статус возврата
|
||
|
*/
|
||
|
private $_status;
|
||
|
|
||
|
/**
|
||
|
* @var \DateTime Время создания возврата
|
||
|
*/
|
||
|
private $_createdAt;
|
||
|
|
||
|
/**
|
||
|
* @var MonetaryAmount Сумма возврата
|
||
|
*/
|
||
|
private $_amount;
|
||
|
|
||
|
/**
|
||
|
* @var string Статус регистрации чека
|
||
|
*/
|
||
|
private $_receiptRegistration;
|
||
|
|
||
|
/**
|
||
|
* @var string Комментарий, основание для возврата средств покупателю
|
||
|
*/
|
||
|
private $_description;
|
||
|
|
||
|
/**
|
||
|
* @var SourceInterface[] Данные о распределении денег — сколько и в какой магазин нужно перевести.
|
||
|
*/
|
||
|
private $_sources;
|
||
|
|
||
|
/**
|
||
|
* @var RequestorInterface
|
||
|
*/
|
||
|
private $_requestor;
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Возвращает идентификатор возврата платежа
|
||
|
* @return string Идентификатор возврата
|
||
|
*/
|
||
|
public function getId()
|
||
|
{
|
||
|
return $this->_id;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Устанавливает идентификатор возврата
|
||
|
* @param string $value Идентификатор возврата
|
||
|
*
|
||
|
* @throws EmptyPropertyValueException Выбрасывается если был передан пустой аргумент
|
||
|
* @throws InvalidPropertyValueException Выбрасывается если було передано невалидное значение
|
||
|
* @throws InvalidPropertyValueTypeException Выбрасывается если аргумент не является строкой
|
||
|
*/
|
||
|
public function setId($value)
|
||
|
{
|
||
|
if ($value === null || $value === '') {
|
||
|
throw new EmptyPropertyValueException('Empty refund id', 0, 'Refund.id');
|
||
|
} elseif (TypeCast::canCastToString($value)) {
|
||
|
$castedValue = (string)$value;
|
||
|
$length = mb_strlen($castedValue, 'utf-8');
|
||
|
if ($length === 36) {
|
||
|
$this->_id = $castedValue;
|
||
|
} else {
|
||
|
throw new InvalidPropertyValueException('Invalid refund id value', 0, 'Refund.id', $value);
|
||
|
}
|
||
|
} else {
|
||
|
throw new InvalidPropertyValueTypeException('Invalid refund id value type', 0, 'Refund.id', $value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Возвращает идентификатор платежа
|
||
|
* @return string Идентификатор платежа
|
||
|
*/
|
||
|
public function getPaymentId()
|
||
|
{
|
||
|
return $this->_paymentId;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Устанавливает идентификатор платежа
|
||
|
* @param string $value Идентификатор платежа
|
||
|
*
|
||
|
* @throws EmptyPropertyValueException Выбрасывается если был передан пустой аргумент
|
||
|
* @throws InvalidPropertyValueException Выбрасывается если було передано невалидное значение
|
||
|
* @throws InvalidPropertyValueTypeException Выбрасывается если аргумент не является строкой
|
||
|
*/
|
||
|
public function setPaymentId($value)
|
||
|
{
|
||
|
if ($value === null || $value === '') {
|
||
|
throw new EmptyPropertyValueException('Empty refund paymentId', 0, 'Refund.paymentId');
|
||
|
} elseif (TypeCast::canCastToString($value)) {
|
||
|
$castedValue = (string)$value;
|
||
|
$length = mb_strlen($castedValue, 'utf-8');
|
||
|
if ($length === 36) {
|
||
|
$this->_paymentId = $castedValue;
|
||
|
} else {
|
||
|
throw new InvalidPropertyValueException(
|
||
|
'Invalid refund paymentId value', 0, 'Refund.paymentId', $value
|
||
|
);
|
||
|
}
|
||
|
} else {
|
||
|
throw new InvalidPropertyValueTypeException(
|
||
|
'Invalid refund paymentId value type', 0, 'Refund.paymentId', $value
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Возвращает статус текущего возврата
|
||
|
* @return string Статус возврата
|
||
|
*/
|
||
|
public function getStatus()
|
||
|
{
|
||
|
return $this->_status;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Усианавливает стутус возврата платежа
|
||
|
* @param string $value Статус возврата платежа
|
||
|
*
|
||
|
* @throws EmptyPropertyValueException Выбрасывается если был передан пустой аргумент
|
||
|
* @throws InvalidPropertyValueException Выбрасывается если було передано невалидное значение
|
||
|
* @throws InvalidPropertyValueTypeException Выбрасывается если аргумент не является строкой
|
||
|
*/
|
||
|
public function setStatus($value)
|
||
|
{
|
||
|
if ($value === null || $value === '') {
|
||
|
throw new EmptyPropertyValueException('Empty refund status', 0, 'Refund.status');
|
||
|
} elseif (TypeCast::canCastToEnumString($value)) {
|
||
|
$castedValue = (string)$value;
|
||
|
if (RefundStatus::valueExists($castedValue)) {
|
||
|
$this->_status = $castedValue;
|
||
|
} else {
|
||
|
throw new InvalidPropertyValueException(
|
||
|
'Invalid refund status value', 0, 'Refund.status', $value
|
||
|
);
|
||
|
}
|
||
|
} else {
|
||
|
throw new InvalidPropertyValueTypeException(
|
||
|
'Invalid refund status value type', 0, 'Refund.status', $value
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Возвращает дату создания возврата
|
||
|
* @return \DateTime Время создания возврата
|
||
|
*/
|
||
|
public function getCreatedAt()
|
||
|
{
|
||
|
return $this->_createdAt;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Устанавливает вермя создания возврата
|
||
|
* @param \DateTime $value Время создания возврата
|
||
|
*
|
||
|
* @throws EmptyPropertyValueException Выбрасывается если быо передано пустое значение
|
||
|
* @throws InvalidPropertyValueException Выбрасывается если переданную строку или число не удалось интерпретировать
|
||
|
* как дату и время
|
||
|
* @throws InvalidPropertyValueTypeException|\Exception Выбрасывается если было передано значение невалидного типа
|
||
|
*/
|
||
|
public function setCreatedAt($value)
|
||
|
{
|
||
|
if ($value === null || $value === '') {
|
||
|
throw new EmptyPropertyValueException('Empty refund created_at value', 0, 'Refund.createdAt');
|
||
|
} elseif (TypeCast::canCastToDateTime($value)) {
|
||
|
$dateTime = TypeCast::castToDateTime($value);
|
||
|
if ($dateTime === null) {
|
||
|
throw new InvalidPropertyValueException('Invalid created_at value', 0, 'Refund.createdAt', $value);
|
||
|
}
|
||
|
$this->_createdAt = $dateTime;
|
||
|
} else {
|
||
|
throw new InvalidPropertyValueTypeException('Invalid created_at value', 0, 'Refund.createdAt', $value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Возвращает сумму возврата
|
||
|
* @return AmountInterface Сумма возврата
|
||
|
*/
|
||
|
public function getAmount()
|
||
|
{
|
||
|
return $this->_amount;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Устанавливает сумму возврата
|
||
|
* @param AmountInterface $value Сумма возврата
|
||
|
*
|
||
|
* @throws InvalidPropertyValueException Выбрасывается если переданная сумма меньше или равна нулю
|
||
|
*/
|
||
|
public function setAmount(AmountInterface $value)
|
||
|
{
|
||
|
if ($value->getIntegerValue() <= 0) {
|
||
|
throw new InvalidPropertyValueException('Invalid refund amount', 0, 'Refund.amount', $value->getValue());
|
||
|
}
|
||
|
$this->_amount = $value;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Возвращает статус регистрации чека
|
||
|
* @return string Статус регистрации чека
|
||
|
*/
|
||
|
public function getReceiptRegistration()
|
||
|
{
|
||
|
return $this->_receiptRegistration;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Устанавливает статус регистрации чека
|
||
|
* @param string $value Статус регистрации чека
|
||
|
*
|
||
|
* @throws EmptyPropertyValueException Выбрасывается если был передан пустой аргумент
|
||
|
* @throws InvalidPropertyValueException Выбрасывается если було передано невалидное значение
|
||
|
* @throws InvalidPropertyValueTypeException Выбрасывается если аргумент не является строкой
|
||
|
*/
|
||
|
public function setReceiptRegistration($value)
|
||
|
{
|
||
|
if ($value === null || $value === '') {
|
||
|
throw new EmptyPropertyValueException('Empty refund receiptRegistration', 0, 'Refund.receiptRegistration');
|
||
|
} elseif (TypeCast::canCastToEnumString($value)) {
|
||
|
$castedValue = (string)$value;
|
||
|
if (ReceiptRegistrationStatus::valueExists($castedValue)) {
|
||
|
$this->_receiptRegistration = $castedValue;
|
||
|
} else {
|
||
|
throw new InvalidPropertyValueException(
|
||
|
'Invalid refund receiptRegistration value', 0, 'Refund.receiptRegistration', $value
|
||
|
);
|
||
|
}
|
||
|
} else {
|
||
|
throw new InvalidPropertyValueTypeException(
|
||
|
'Invalid refund receiptRegistration value type', 0, 'Refund.receiptRegistration', $value
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Возвращает комментарий к возврату
|
||
|
* @return string Комментарий, основание для возврата средств покупателю
|
||
|
*/
|
||
|
public function getDescription()
|
||
|
{
|
||
|
return $this->_description;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Устанавливает комментарий к возврату
|
||
|
* @param string $value Комментарий, основание для возврата средств покупателю
|
||
|
*
|
||
|
* @throws EmptyPropertyValueException Выбрасывается если был передан пустой аргумент
|
||
|
* @throws InvalidPropertyValueTypeException Выбрасывается если аргумент не является строкой
|
||
|
*/
|
||
|
public function setDescription($value)
|
||
|
{
|
||
|
if ($value === null || $value === '') {
|
||
|
throw new EmptyPropertyValueException('Empty refund description', 0, 'Refund.description');
|
||
|
} elseif (TypeCast::canCastToEnumString($value)) {
|
||
|
$this->_description = (string)$value;
|
||
|
} else {
|
||
|
throw new InvalidPropertyValueTypeException('Empty refund description', 0, 'Refund.description', $value);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return SourceInterface[]
|
||
|
*/
|
||
|
public function getSources()
|
||
|
{
|
||
|
return $this->_sources;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Устанавливает sources (массив распределения денег между магазинами)
|
||
|
* @param SourceInterface[]|array $value
|
||
|
*/
|
||
|
public function setSources($value)
|
||
|
{
|
||
|
if (!is_array($value)) {
|
||
|
$message = 'Sources must be an array of SourceInterface';
|
||
|
throw new InvalidPropertyValueTypeException($message, 0, 'Refund.sources', $value);
|
||
|
}
|
||
|
|
||
|
$sources = array();
|
||
|
foreach ($value as $item) {
|
||
|
if (is_array($item)) {
|
||
|
$item = new Source($item);
|
||
|
}
|
||
|
|
||
|
if (!($item instanceof SourceInterface)) {
|
||
|
$message = 'Source must be instance of SourceInterface';
|
||
|
throw new InvalidPropertyValueTypeException($message, 0, 'Refund.sources', $value);
|
||
|
}
|
||
|
$sources[] = $item;
|
||
|
}
|
||
|
|
||
|
$this->_sources = $sources;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return RequestorInterface
|
||
|
*/
|
||
|
public function getRequestor()
|
||
|
{
|
||
|
return $this->_requestor;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param $value
|
||
|
*/
|
||
|
public function setRequestor($value)
|
||
|
{
|
||
|
if (is_array($value)) {
|
||
|
$value = new Requestor($value);
|
||
|
}
|
||
|
|
||
|
if (!($value instanceof RequestorInterface)) {
|
||
|
throw new InvalidPropertyValueTypeException('Invalid Requestor type', 0, 'Refund.requestor', $value);
|
||
|
}
|
||
|
|
||
|
$this->_requestor = $value;
|
||
|
}
|
||
|
}
|