Initial Commit

This commit is contained in:
2024-02-08 12:07:49 -07:00
parent 5813b1109f
commit 43077b57ed
5471 changed files with 682195 additions and 0 deletions
@@ -0,0 +1,576 @@
<?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\Request\Receipts;
use DateTime;
use YooKassa\Common\AbstractObject;
use YooKassa\Common\Exceptions\EmptyPropertyValueException;
use YooKassa\Common\Exceptions\InvalidPropertyValueException;
use YooKassa\Common\Exceptions\InvalidPropertyValueTypeException;
use YooKassa\Helpers\TypeCast;
use YooKassa\Model\ReceiptRegistrationStatus;
use YooKassa\Model\ReceiptType;
use YooKassa\Model\Settlement;
use YooKassa\Model\SettlementInterface;
/**
* Class AbstractReceipt
*
* @package YooKassa\Model
*
* @property string $id Идентификатор чека в ЮKassa.
* @property string $type Тип чека в онлайн-кассе: приход "payment" или возврат "refund".
* @property string $status Статус доставки данных для чека в онлайн-кассу ("pending", "succeeded" или "canceled").
* @property string $fiscalAttribute Фискальный признак чека. Формируется фискальным накопителем на основе данных, переданных для регистрации чека.
* @property string $fiscal_attribute Фискальный признак чека. Формируется фискальным накопителем на основе данных, переданных для регистрации чека.
* @property string $fiscalDocumentNumber Номер фискального документа.
* @property string $fiscal_document_number Номер фискального документа.
* @property string $fiscalStorageNumber Номер фискального накопителя в кассовом аппарате.
* @property string $fiscal_storage_number Номер фискального накопителя в кассовом аппарате.
* @property string $fiscalProviderId Идентификатор чека в онлайн-кассе. Присутствует, если чек удалось зарегистрировать.
* @property string $fiscal_provider_id Идентификатор чека в онлайн-кассе. Присутствует, если чек удалось зарегистрировать.
* @property \DateTime $registeredAt Дата и время формирования чека в фискальном накопителе.
* @property \DateTime $registered_at Дата и время формирования чека в фискальном накопителе.
* @property int $taxSystemCode Код системы налогообложения. Число 1-6.
* @property int $tax_system_code Код системы налогообложения. Число 1-6.
* @property ReceiptResponseItemInterface[] $items Список товаров в заказе
* @property SettlementInterface[] $settlements Перечень совершенных расчетов.
* @property string $onBehalfOf Идентификатор магазина
*/
abstract class AbstractReceiptResponse extends AbstractObject implements ReceiptResponseInterface
{
const LENGTH_RECEIPT_ID = 39;
/** @var string Идентификатор чека в ЮKassa. */
private $_id;
/** @var string Тип чека в онлайн-кассе: приход "payment" или возврат "refund". */
private $_type;
/** @var string Статус доставки данных для чека в онлайн-кассу "pending", "succeeded" или "canceled". */
private $_status;
/** @var string Номер фискального документа. */
private $_fiscalDocumentNumber;
/** @var string Номер фискального накопителя в кассовом аппарате. */
private $_fiscalStorageNumber;
/** @var string идентификатор объекта чека */
private $_object_id;
/**
* @var string Фискальный признак чека.
* Формируется фискальным накопителем на основе данных, переданных для регистрации чека.
*/
private $_fiscalAttribute;
/**
* @var \DateTime Дата и время формирования чека в фискальном накопителе.
* Указывается в формате [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601).
*/
private $_registeredAt;
/** @var string Идентификатор чека в онлайн-кассе. Присутствует, если чек удалось зарегистрировать. */
private $_fiscalProviderId;
/** @var ReceiptResponseItemInterface[] Список товаров в заказе */
private $_items = array();
/** @var SettlementInterface[] Список оплат */
private $_settlements = array();
/** @var int Код системы налогообложения. Число 1-6. */
private $_taxSystemCode;
/** @var string Идентификатор магазина */
private $_onBehalfOf;
/**
* AbstractReceiptResponse constructor.
*
* @param mixed $receiptData
* @throws \Exception
*/
public function __construct($receiptData)
{
$this->setId($receiptData['id']);
$this->setType($receiptData['type']);
$this->setObjectId($this->factoryObjectId($receiptData));
$this->setStatus($receiptData['status']);
if (!empty($receiptData['tax_system_code'])) {
$this->setTaxSystemCode($receiptData['tax_system_code']);
}
if (!empty($receiptData['fiscal_document_number'])) {
$this->setFiscalDocumentNumber($receiptData['fiscal_document_number']);
}
if (!empty($receiptData['fiscal_storage_number'])) {
$this->setFiscalStorageNumber($receiptData['fiscal_storage_number']);
}
if (!empty($receiptData['fiscal_attribute'])) {
$this->setFiscalAttribute($receiptData['fiscal_attribute']);
}
if (!empty($receiptData['registered_at'])) {
$this->setRegisteredAt(new DateTime($receiptData['registered_at']));
}
if (!empty($receiptData['fiscal_provider_id'])) {
$this->setFiscalProviderId($receiptData['fiscal_provider_id']);
}
if (!empty($receiptData['items'])) {
if (is_array($receiptData['items']) && count($receiptData['items'])) {
$itemsArray = array();
foreach ($receiptData['items'] as $item) {
$itemsArray[] = new ReceiptResponseItem($item);
}
$this->setItems($itemsArray);
} else {
throw new EmptyPropertyValueException('Empty items value in receipt', 0, 'receipt.items');
}
} else {
throw new EmptyPropertyValueException('Empty items value in receipt', 0, 'receipt.items');
}
if (!empty($receiptData['settlements'])) {
if (is_array($receiptData['settlements']) && count($receiptData['settlements'])) {
$itemsArray = array();
foreach ($receiptData['settlements'] as $item) {
$itemsArray[] = new Settlement($item);
}
$this->setSettlements($itemsArray);
} else {
throw new EmptyPropertyValueException('Empty settlements value in receipt', 0, 'receipt.settlements');
}
}
if (!empty($receiptData['on_behalf_of'])) {
$this->setOnBehalfOf($receiptData['on_behalf_of']);
}
$this->setSpecificProperties($receiptData);
}
/**
* @return string
*/
public function getId()
{
return $this->_id;
}
/**
* Устанавливает идентификатор чека
* @param string $value Идентификатор чека
*
* @throws InvalidPropertyValueException Выбрасывается если длина переданной строки не равна 40
* @throws InvalidPropertyValueTypeException Выбрасывается если в метод была передана не строка
*/
public function setId($value)
{
if (TypeCast::canCastToString($value)) {
if (strlen((string)$value) !== self::LENGTH_RECEIPT_ID) {
throw new InvalidPropertyValueException('Invalid receipt id value', 0, 'Receipt.id', $value);
}
$this->_id = (string)$value;
} else {
throw new InvalidPropertyValueTypeException('Invalid receipt id value type', 0, 'Receipt.id', $value);
}
}
/**
* @return string
*/
public function getType()
{
return $this->_type;
}
/**
* Устанавливает типа чека
* @param string $value Тип чека
*
* @throws InvalidPropertyValueException Выбрасывается если переданная строка не является валидным типом
* @throws InvalidPropertyValueTypeException Выбрасывается если в метод была передана не строка
*/
public function setType($value)
{
if (TypeCast::canCastToEnumString($value)) {
if (!ReceiptType::valueExists((string)$value)) {
throw new InvalidPropertyValueException('Invalid receipt type value', 0, 'Receipt.type', $value);
}
$this->_type = (string)$value;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid receipt type value type', 0, 'Receipt.type', $value
);
}
}
/**
* Возвращает идентификатор платежа или возврата, для которого был сформирован чек.
* @return string
*/
public function getObjectId()
{
return $this->_object_id;
}
/**
* Устанавливает идентификатор платежа или возврата, для которого был сформирован чек
*
* @param $value
*/
public function setObjectId($value)
{
if ($value === null || $value === '') {
$this->_object_id = null;
} elseif (TypeCast::canCastToString($value)) {
$this->_object_id = (string)$value;
} else {
throw new InvalidPropertyValueTypeException('Invalid receipt object_id type', 0, 'Receipt.object_id', $value);
}
}
/**
* Фабричный метод создания идентификатора объекта, для которого был сформирован чек
*
* @param array $receiptData Массив данных чека
* @return string|null
*/
private function factoryObjectId($receiptData)
{
if (array_key_exists('refund_id', $receiptData)) {
return $receiptData['refund_id'];
} elseif (array_key_exists('payment_id', $receiptData)) {
return $receiptData['payment_id'];
}
return null;
}
/**
* @return string
*/
public function getStatus()
{
return $this->_status;
}
/**
* Устанавливает состояние регистрации фискального чека
* @param string $value Состояние регистрации фискального чека
*
* @return AbstractReceiptResponse
*
* @throws InvalidPropertyValueException Выбрасывается если переданное состояние регистрации не существует
* @throws InvalidPropertyValueTypeException Выбрасывается если переданный аргумент не строка
*/
public function setStatus($value)
{
if ($value === null || $value === '') {
$this->_status = null;
} elseif (TypeCast::canCastToEnumString($value)) {
if (ReceiptRegistrationStatus::valueExists($value)) {
$this->_status = (string)$value;
} else {
throw new InvalidPropertyValueException(
'Invalid status value', 0, 'Receipt.status', $value
);
}
} else {
throw new InvalidPropertyValueTypeException(
'Invalid status value type', 0, 'Receipt.status', $value
);
}
return $this;
}
/**
* @return string
*/
public function getFiscalDocumentNumber()
{
return $this->_fiscalDocumentNumber;
}
/**
* Устанавливает номер фискального документа
* @param string $value Номер фискального документа
*
* @throws InvalidPropertyValueTypeException Выбрасывается если переданный аргумент не строка
*/
public function setFiscalDocumentNumber($value)
{
if ($value === null || $value === '') {
$this->_fiscalDocumentNumber = null;
} elseif (!TypeCast::canCastToString($value)) {
throw new InvalidPropertyValueTypeException(
'Invalid fiscal_document_number value type', 0, 'Receipt.fiscalDocumentNumber', $value
);
} else {
$this->_fiscalDocumentNumber = (string)$value;
}
}
/**
* @return string
*/
public function getFiscalStorageNumber()
{
return $this->_fiscalStorageNumber;
}
/**
* @param string $fiscal_storage_number
*/
public function setFiscalStorageNumber($fiscal_storage_number)
{
$this->_fiscalStorageNumber = $fiscal_storage_number;
}
/**
* @return string
*/
public function getFiscalAttribute()
{
return $this->_fiscalAttribute;
}
/**
* @param string $fiscal_attribute
*/
public function setFiscalAttribute($fiscal_attribute)
{
$this->_fiscalAttribute = $fiscal_attribute;
}
/**
* @return DateTime
*/
public function getRegisteredAt()
{
return $this->_registeredAt;
}
/**
* @param DateTime $registered_at
*/
public function setRegisteredAt($registered_at)
{
$this->_registeredAt = $registered_at;
}
/**
* @return string
*/
public function getFiscalProviderId()
{
return $this->_fiscalProviderId;
}
/**
* @param string $fiscal_provider_id
*/
public function setFiscalProviderId($fiscal_provider_id)
{
$this->_fiscalProviderId = $fiscal_provider_id;
}
/**
* @return ReceiptResponseItem[]
*/
public function getItems()
{
return $this->_items;
}
/**
* Устанавливает список позиций в чеке
*
* Если до этого в чеке уже были установлены значения, они удаляются и полностью заменяются переданным списком
* позиций. Все передаваемые значения в массиве позиций должны быть объектами класса, реализующего интерфейс
* ReceiptItemInterface, в противном случае будет выброшено исключение InvalidPropertyValueTypeException.
*
* @param ReceiptResponseItemInterface[] $value Список товаров в заказе
*
* @throws EmptyPropertyValueException Выбрасывается если передали пустой массив значений
* @throws InvalidPropertyValueTypeException Выбрасывается если в качестве значения был передан не массив и не
* итератор, лабо если одно из переданных значений не реализует интерфейс ReceiptItemInterface
*/
public function setItems($value)
{
if ($value === null || $value === '') {
throw new EmptyPropertyValueException('Empty items value in receipt', 0, 'receipt.items');
}
if (!is_array($value) && !($value instanceof \Traversable)) {
throw new InvalidPropertyValueTypeException(
'Invalid items value type in receipt', 0, 'receipt.items', $value
);
}
$this->_items = array();
foreach ($value as $key => $val) {
if (is_object($val) && $val instanceof ReceiptResponseItemInterface) {
$this->addItem($val);
} else {
throw new InvalidPropertyValueTypeException(
'Invalid item value type in receipt', 0, 'receipt.items[' . $key . ']', $val
);
}
}
}
/**
* Добавляет товар в чек
*
* @param ReceiptResponseItemInterface $value Объект добавляемой в чек позиции
*/
public function addItem($value)
{
$this->_items[] = $value;
}
/**
* Возвращает Массив оплат, обеспечивающих выдачу товара
*
* @return SettlementInterface[]
*/
public function getSettlements()
{
return $this->_settlements;
}
/**
* @param SettlementInterface[] $value
*/
public function setSettlements($value)
{
if ($value === null || $value === '') {
throw new EmptyPropertyValueException('Empty settlements value in receipt', 0, 'receipt.settlements');
}
if (!is_array($value) && !($value instanceof \Traversable)) {
throw new InvalidPropertyValueTypeException(
'Invalid settlements value type in receipt', 0, 'receipt.settlements', $value
);
}
$this->_settlements = array();
foreach ($value as $key => $val) {
if (is_object($val) && $val instanceof SettlementInterface) {
$this->addSettlement($val);
} else {
throw new InvalidPropertyValueTypeException(
'Invalid settlement value type in receipt', 0, 'receipt.settlements['.$key.']', $val
);
}
}
}
/**
* @param SettlementInterface $value
*/
public function addSettlement(SettlementInterface $value)
{
$this->_settlements[] = $value;
}
/**
* @return int
*/
public function getTaxSystemCode()
{
return $this->_taxSystemCode;
}
/**
* Устанавливает код системы налогообложения
*
* @param int $value Код системы налогообложения. Число 1-6
*
* @throws InvalidPropertyValueTypeException Выбрасывается если переданный аргумент - не число
* @throws InvalidPropertyValueException Выбрасывается если переданный аргумент меньше одного или больше шести
*/
public function setTaxSystemCode($value)
{
if ($value === null || $value === '') {
$this->_taxSystemCode = null;
} elseif (!is_numeric($value)) {
throw new InvalidPropertyValueTypeException(
'Invalid tax_system_code value type', 0, 'receipt.taxSystemCode'
);
} else {
$castedValue = (int)$value;
if ($castedValue < 1 || $castedValue > 6) {
throw new InvalidPropertyValueException(
'Invalid tax_system_code value: ' . $value, 0, 'receipt.taxSystemCode'
);
}
$this->_taxSystemCode = $castedValue;
}
}
/**
* @return string|null
*/
public function getOnBehalfOf()
{
return $this->_onBehalfOf;
}
/**
* @param string $value
*/
public function setOnBehalfOf($value)
{
if ($value === null || $value === '') {
throw new EmptyPropertyValueException(
'Empty onBehalfOf value', 0, 'Receipt.onBehalfOf'
);
} elseif (!TypeCast::canCastToString($value)) {
throw new InvalidPropertyValueTypeException(
'Invalid onBehalfOf value type', 0, 'Receipt.onBehalfOf', $value
);
} else {
$this->_onBehalfOf = (string)$value;
}
}
/**
* Проверяет есть ли в чеке хотя бы одна позиция
*
* @return bool True если чек не пуст, false если в чеке нет ни одной позиции
*/
public function notEmpty()
{
return !empty($this->_items);
}
/**
* Установка свойств, присущих конкретному объекту
*
* @param array $receiptData
*
* @return void
*/
abstract public function setSpecificProperties($receiptData);
}
@@ -0,0 +1,434 @@
<?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\Request\Receipts;
use YooKassa\Common\AbstractRequest;
use YooKassa\Common\Exceptions\EmptyPropertyValueException;
use YooKassa\Common\Exceptions\InvalidPropertyValueException;
use YooKassa\Common\Exceptions\InvalidPropertyValueTypeException;
use YooKassa\Helpers\TypeCast;
use YooKassa\Model\ReceiptCustomer;
use YooKassa\Model\ReceiptCustomerInterface;
use YooKassa\Model\ReceiptItem;
use YooKassa\Model\ReceiptItemInterface;
use YooKassa\Model\ReceiptType;
use YooKassa\Model\Settlement;
use YooKassa\Model\SettlementInterface;
/**
* Class AbstractPostReceiptRequest
* @package YooKassa\Request\Receipts
*/
class CreatePostReceiptRequest extends AbstractRequest implements CreatePostReceiptRequestInterface
{
/** @var ReceiptCustomerInterface Информация о плательщике */
private $_customer;
/** @var string Тип чека в онлайн-кассе: приход "payment" или возврат "refund". */
private $_type;
/** @var bool Признак отложенной отправки чека. */
private $_send = true;
/** @var int Код системы налогообложения. Число 1-6. */
private $_taxSystemCode;
/** @var ReceiptItemInterface[] Список товаров в заказе */
private $_items = array();
/** @var SettlementInterface[] Список платежей */
private $_settlements = array();
/** @var string Идентификатор объекта оплаты */
private $_object_id;
/** @var string Идентификатор магазина в ЮKassa */
private $_onBehalfOf;
/**
* Возвращает билдер объектов запросов создания платежа
* @return CreatePostReceiptRequestBuilder Инстанс билдера объектов запрсов
*/
public static function builder()
{
return new CreatePostReceiptRequestBuilder();
}
/**
* Возвращает Id объекта чека
*
* @return string Id объекта чека
*/
public function getObjectId()
{
return $this->_object_id;
}
/**
* Устанавливает Id объекта чека
*
* @param string $value
*/
public function setObjectId($value)
{
$this->_object_id = $value;
}
/**
* @return bool
*/
public function hasCustomer()
{
return !empty($this->_customer);
}
/**
* Возвращает информацию о плательщике
*
* @return ReceiptCustomerInterface информация о плательщике
*/
public function getCustomer()
{
return $this->_customer;
}
/**
* Устанавливает информацию о плательщике
*
* @param ReceiptCustomerInterface $value
*/
public function setCustomer($value)
{
if (is_array($value)) {
$this->_customer = new ReceiptCustomer($value);
} elseif (is_object($value) && $value instanceof ReceiptCustomerInterface) {
$this->_customer = $value;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid customer value type in receipt', 0, 'Receipt.customer', $value
);
}
}
/**
* Возвращает список позиций в текущем чеке
*
* @return ReceiptItemInterface[] Список товаров в заказе
*/
public function getItems()
{
return $this->_items;
}
/**
* Устанавливает список позиций в чеке
*
* Если до этого в чеке уже были установлены значения, они удаляются и полностью заменяются переданным списком
* позиций. Все передаваемые значения в массиве позиций должны быть объектами класса, реализующего интерфейс
* ReceiptItemInterface, в противном случае будет выброшено исключение InvalidPropertyValueTypeException.
*
* @param ReceiptItemInterface[] $value Список товаров в заказе
*
* @throws EmptyPropertyValueException Выбрасывается если передали пустой массив значений
* @throws InvalidPropertyValueTypeException Выбрасывается если в качестве значения был передан не массив и не
* итератор, либо если одно из переданных значений не реализует интерфейс ReceiptItemInterface
*/
public function setItems($value)
{
if ($value === null || $value === '') {
throw new EmptyPropertyValueException('Empty items value in receipt', 0, 'Receipt.items');
}
if (!is_array($value) && !($value instanceof \Traversable)) {
throw new InvalidPropertyValueTypeException(
'Invalid items value type in receipt', 0, 'Receipt.items', $value
);
}
$this->_items = array();
foreach ($value as $key => $val) {
if (is_array($val)) {
$this->addItem(new ReceiptItem($val));
} elseif (is_object($val) && $val instanceof ReceiptItemInterface) {
$this->addItem($val);
} else {
throw new InvalidPropertyValueTypeException(
'Invalid item value type in receipt', 0, 'Receipt.items['.$key.']', $val
);
}
}
}
/**
* Добавляет товар в чек
*
* @param ReceiptItemInterface $value Объект добавляемой в чек позиции
*/
public function addItem($value)
{
$this->_items[] = $value;
}
/**
* Возвращает код системы налогообложения
*
* @return int Код системы налогообложения. Число 1-6.
*/
public function getTaxSystemCode()
{
return $this->_taxSystemCode;
}
/**
* Устанавливает код системы налогообложения
*
* @param int $value Код системы налогообложения. Число 1-6
*
* @throws InvalidPropertyValueTypeException Выбрасывается если переданный аргумент - не число
* @throws InvalidPropertyValueException Выбрасывается если переданный аргумент меньше одного или больше шести
*/
public function setTaxSystemCode($value)
{
if ($value === null || $value === '') {
throw new EmptyPropertyValueException('Empty taxSystemCode value in receipt', 0, 'Receipt.taxSystemCode');
} elseif (!is_numeric($value)) {
throw new InvalidPropertyValueTypeException(
'Invalid taxSystemCode value type', 0, 'Receipt.taxSystemCode'
);
} else {
$castedValue = (int)$value;
if ($castedValue < 1 || $castedValue > 6) {
throw new InvalidPropertyValueException(
'Invalid taxSystemCode value: '.$value, 0, 'Receipt.taxSystemCode'
);
}
$this->_taxSystemCode = $castedValue;
}
}
/**
* Возвращает тип чека в онлайн-кассе
*
* @return string Тип чека в онлайн-кассе: приход "payment" или возврат "refund".
*/
public function getType()
{
return $this->_type;
}
/**
* Устанавливает тип чека в онлайн-кассе
*
* @param string $value Тип чека в онлайн-кассе: приход "payment" или возврат "refund".
*/
public function setType($value)
{
if (TypeCast::canCastToEnumString($value)) {
if (!ReceiptType::valueExists((string)$value)) {
throw new InvalidPropertyValueException('Invalid receipt type value', 0, 'Receipt.type', $value);
}
$this->_type = (string)$value;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid receipt type value type', 0, 'Receipt.type', $value
);
}
}
/**
* Возвращает признак отложенной отправки чека.
*
* @return bool Признак отложенной отправки чека.
*/
public function getSend()
{
return $this->_send;
}
/**
* Устанавливает признак отложенной отправки чека.
* @param bool $value Признак отложенной отправки чека.
*/
public function setSend($value)
{
if (TypeCast::canCastToBoolean($value)) {
$this->_send = (bool)$value;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid receipt type value send', 0, 'Receipt.send', $value
);
}
}
/**
* Возвращает массив оплат, обеспечивающих выдачу товара.
*
* @return SettlementInterface[] Массив оплат, обеспечивающих выдачу товара.
*/
public function getSettlements()
{
return $this->_settlements;
}
/**
* Устанавливает массив оплат, обеспечивающих выдачу товара.
*
* @param SettlementInterface[] $value Массив оплат, обеспечивающих выдачу товара.
*/
public function setSettlements($value)
{
if ($value === null || $value === '') {
throw new EmptyPropertyValueException('Empty settlements value in receipt', 0, 'Receipt.settlements');
}
if (!is_array($value) && !($value instanceof \Traversable)) {
throw new InvalidPropertyValueTypeException(
'Invalid settlements value type in receipt', 0, 'Receipt.settlements', $value
);
}
$this->_settlements = array();
foreach ($value as $key => $val) {
if (is_array($val) && !empty($val['type']) && !empty($val['amount'])) {
$this->addSettlement(new Settlement($val));
} elseif (is_object($val) && $val instanceof SettlementInterface) {
$this->addSettlement($val);
} else {
throw new InvalidPropertyValueTypeException(
'Invalid settlement value type in receipt', 0, 'Receipt.settlements['.$key.']', $val
);
}
}
}
/**
* Добавляет оплату в перечень совершенных расчетов.
*
* @param SettlementInterface $value Информация о совершенных расчетах.
*/
public function addSettlement(SettlementInterface $value)
{
$this->_settlements[] = $value;
}
/**
* @return string
*/
public function getOnBehalfOf()
{
return $this->_onBehalfOf;
}
/**
* @param string $value
*/
public function setOnBehalfOf($value)
{
if ($value === null || $value === '') {
throw new EmptyPropertyValueException(
'Empty onBehalfOf value', 0, 'Receipt.onBehalfOf'
);
} elseif (!TypeCast::canCastToString($value)) {
throw new InvalidPropertyValueTypeException(
'Invalid onBehalfOf value type', 0, 'Receipt.onBehalfOf', $value
);
} else {
$this->_onBehalfOf = (string)$value;
}
}
/**
* Проверяет есть ли в чеке хотя бы одна позиция товаров и оплат
*
* @return bool True если чек не пуст, false если в чеке нет ни одной позиции
*/
public function notEmpty()
{
return !empty($this->_items) && !empty($this->_settlements);
}
/**
* Устанавливает значения свойств текущего объекта из массива
* @param array|\Traversable $sourceArray Ассоциативный массив с настройками
*/
public function fromArray($sourceArray)
{
if (!empty($sourceArray['customer'])) {
$sourceArray['customer'] = new ReceiptCustomer($sourceArray['customer']);
}
if (!empty($sourceArray['items'])) {
foreach ($sourceArray['items'] as $i => $itemArray) {
if (is_array($itemArray)) {
$sourceArray['items'][$i] = new ReceiptItem($itemArray);
}
}
}
if (!empty($sourceArray['settlements'])) {
foreach ($sourceArray['settlements'] as $i => $itemArray) {
if (is_array($itemArray)) {
$sourceArray['settlements'][$i] = new Settlement($itemArray);
}
}
}
parent::fromArray($sourceArray);
}
/**
* Валидирует текущий запрос, проверяет все ли нужные свойства установлены
* @return bool True если запрос валиден, false если нет
*/
public function validate()
{
if (empty($this->_customer)) {
$this->setValidationError('Receipt customer not specified');
return false;
}
if (empty($this->_type) || !ReceiptType::valueExists($this->_type)) {
$this->setValidationError('Receipt type not specified');
return false;
}
if (empty($this->_send)) { // todo: пока может быть только true
$this->setValidationError('Receipt send not specified');
return false;
}
if (empty($this->_settlements)) {
$this->setValidationError('Receipt settlements not specified');
return false;
}
if (empty($this->_items)) {
$this->setValidationError('Receipt items not specified');
return false;
}
return true;
}
}
@@ -0,0 +1,209 @@
<?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\Request\Receipts;
use YooKassa\Common\AbstractRequestBuilder;
use YooKassa\Common\Exceptions\InvalidRequestException;
use YooKassa\Model\AmountInterface;
use YooKassa\Model\MonetaryAmount;
use YooKassa\Model\ReceiptCustomer;
use YooKassa\Model\ReceiptCustomerInterface;
use YooKassa\Model\ReceiptItemInterface;
use YooKassa\Model\SettlementInterface;
class CreatePostReceiptRequestBuilder extends AbstractRequestBuilder
{
/** @var CreatePostReceiptRequest Собираемый объект запроса */
protected $currentObject;
/** @var AmountInterface */
protected $amount;
/** @var ReceiptCustomer */
protected $customer;
/**
* Инициализирует объект запроса, который в дальнейшем будет собираться билдером
* @return CreatePostReceiptRequest Инстанс собираемого объекта запроса к API
*/
protected function initCurrentObject()
{
$this->customer = new ReceiptCustomer();
$this->amount = new MonetaryAmount();
return new CreatePostReceiptRequest();
}
/**
* Устанавливает сумму
*
* @param AmountInterface|array|string $value Сумма оплаты
*
* @return self Инстанс билдера запросов
*/
public function setAmount($value)
{
if (is_object($value) && $value instanceof AmountInterface) {
$this->amount->setValue($value->getValue());
$this->amount->setCurrency($value->getCurrency());
} elseif (is_array($value)) {
$this->amount->fromArray($value);
} else {
$this->amount->setValue($value);
}
return $this;
}
/**
* Устанавливает валюту в которой будет происходить подтверждение оплаты заказа
*
* @param string $value Валюта в которой подтверждается оплата
*
* @return self Инстанс билдера запросов
*/
public function setCurrency($value)
{
$this->amount->setCurrency($value);
foreach ($this->currentObject->getItems() as $item) {
$item->getPrice()->setCurrency($value);
}
return $this;
}
/**
* @param ReceiptCustomerInterface|array $value
* @return CreatePostReceiptRequestBuilder
*/
public function setCustomer($value)
{
if (is_array($value)) {
$this->customer->fromArray($value);
} elseif ($value instanceof ReceiptCustomerInterface) {
$this->customer = $value;
} else {
$this->customer = null;
}
$this->currentObject->setCustomer($this->customer);
return $this;
}
/**
* @param ReceiptItemInterface[] $value
* @return CreatePostReceiptRequestBuilder
*/
public function setItems($value)
{
$this->currentObject->setItems($value);
return $this;
}
/**
* @param int $value
* @return CreatePostReceiptRequestBuilder
*/
public function setTaxSystemCode($value)
{
$this->currentObject->setTaxSystemCode($value);
return $this;
}
/**
* @param string $value
* @return CreatePostReceiptRequestBuilder
*/
public function setType($value)
{
$this->currentObject->setType($value);
return $this;
}
/**
* @param bool $value
* @return CreatePostReceiptRequestBuilder
*/
public function setSend($value)
{
$this->currentObject->setSend($value);
return $this;
}
/**
* @param string $value
* @return CreatePostReceiptRequestBuilder
*/
public function setOnBehalfOf($value)
{
$this->currentObject->setOnBehalfOf($value);
return $this;
}
/**
* @param SettlementInterface[] $value
* @return CreatePostReceiptRequestBuilder
*/
public function setSettlements($value)
{
$this->currentObject->setSettlements($value);
return $this;
}
/**
* @param string $value
* @return CreatePostReceiptRequestBuilder
*/
public function setObjectId($value)
{
$this->currentObject->setObjectId($value);
return $this;
}
/**
* Строит и возвращает объект запроса для отправки в API ЮKassa
* @param array|null $options Массив параметров для установки в объект запроса
* @return CreatePostReceiptRequest Инстанс объекта запроса
*
* @throws InvalidRequestException Выбрасывается если собрать объект запроса не удалось
*/
public function build(array $options = null)
{
if (!empty($options)) {
$this->setOptions($options);
if (!empty($options['payment_id'])) {
$this->setObjectId($options['payment_id']);
} elseif (!empty($options['refund_id'])) {
$this->setObjectId($options['refund_id']);
}
}
return parent::build($options);
}
}
@@ -0,0 +1,166 @@
<?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\Request\Receipts;
use YooKassa\Model\ReceiptCustomer;
use YooKassa\Model\ReceiptCustomerInterface;
use YooKassa\Model\ReceiptItemInterface;
use YooKassa\Model\SettlementInterface;
use YooKassa\Model\SupplierInterface;
/**
* Interface CreateReceiptRequestInterface
*
* @package YooKassa\Request\Receipts
*
* @property string $objectId Идентификатор объекта ("payment" или "refund), для которого формируется чек.
* @property string $object_id Идентификатор объекта ("payment" или "refund), для которого формируется чек.
* @property string $type Тип чека в онлайн-кассе: приход "payment" или возврат "refund".
* @property bool $send Признак отложенной отправки чека.
* @property ReceiptCustomer $customer Информация о плательщике.
* @property int $taxSystemCode Код системы налогообложения. Число 1-6.
* @property int $tax_system_code Код системы налогообложения. Число 1-6.
* @property ReceiptItemInterface[] $items Список товаров в заказе.
* @property SupplierInterface $supplier Информация о поставщике товара или услуги.
* @property SettlementInterface[] $settlements Массив оплат, обеспечивающих выдачу товара.
*/
interface CreatePostReceiptRequestInterface
{
/**
* Возвращает идентификатор объекта, для которого формируется чек
*
* @return string Идентификатор объекта.
*/
public function getObjectId();
/**
* Устанавливает идентификатор объекта, для которого формируется чек
*
* @param string $value Идентификатор объекта.
* @return CreatePostReceiptRequestInterface
*/
public function setObjectId($value);
/**
* Возвращает тип чека в онлайн-кассе
*
* @return string Тип чека в онлайн-кассе: приход "payment" или возврат "refund".
*/
public function getType();
/**
* Устанавливает тип чека в онлайн-кассе
* @param string $value Тип чека в онлайн-кассе: приход "payment" или возврат "refund".
* @return CreatePostReceiptRequestInterface
*/
public function setType($value);
/**
* Возвращает признак отложенной отправки чека.
*
* @return bool Признак отложенной отправки чека.
*/
public function getSend();
/**
* Устанавливает признак отложенной отправки чека.
*
* @param bool $value Признак отложенной отправки чека.
* @return CreatePostReceiptRequestInterface
*/
public function setSend($value);
/**
* Возвращает код системы налогообложения.
*
* @return int Код системы налогообложения. Число 1-6.
*/
public function getTaxSystemCode();
/**
* @param int $value
* @return CreatePostReceiptRequestInterface
*/
public function setTaxSystemCode($value);
/**
* Возвращает информацию о плательщике.
*
* @return ReceiptCustomerInterface Информация о плательщике.
*/
public function getCustomer();
/**
* Устанавливает информацию о пользователе.
*
* @param ReceiptCustomerInterface $value информация о плательщике.
* @return CreatePostReceiptRequestInterface
*/
public function setCustomer($value);
/**
* Возвращает список товаров в заказе
*
* @return ReceiptItemInterface[]
*/
public function getItems();
/**
* @param ReceiptItemInterface[] $items
* @return CreatePostReceiptRequestInterface
*/
public function setItems($items);
/**
* Возвращает Массив оплат, обеспечивающих выдачу товара.
*
* @return SettlementInterface[]
*/
public function getSettlements();
/**
* @param SettlementInterface[] $value
* @return CreatePostReceiptRequestInterface
*/
public function setSettlements($value);
/**
* @return string|null
*/
public function getOnBehalfOf();
/**
* @param string $value
*/
public function setOnBehalfOf($value);
/**
* Проверяет есть ли в чеке хотя бы одна позиция
* @return bool True если чек не пуст, false если в чеке нет ни одной позиции.
*/
function notEmpty();
}
@@ -0,0 +1,95 @@
<?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\Request\Receipts;
use YooKassa\Model\ReceiptItem;
use YooKassa\Model\ReceiptType;
use YooKassa\Model\Settlement;
/**
* Класс сериалайзера объекта запроса к API создание чека
*
* @package YooKassa\Request\Receipts
*/
class CreatePostReceiptRequestSerializer
{
/**
* @param CreatePostReceiptRequestInterface $request
* @return array
*/
public function serialize(CreatePostReceiptRequestInterface $request)
{
$result = array_merge(array(
'type' => $request->getType(),
'send' => $request->getSend(),
), $this->serializeObjectId($request));
/** @var Settlement $item */
foreach ($request->getSettlements() as $item) {
$result['settlements'][] = $item->jsonSerialize();
}
/** @var ReceiptItem $item */
foreach ($request->getItems() as $item) {
$result['items'][] = $item->jsonSerialize();
}
$customer = $request->getCustomer();
if (!empty($customer)) {
$result['customer'] = $customer->jsonSerialize();
}
$value = $request->getTaxSystemCode();
if (!empty($value)) {
$result['tax_system_code'] = $value;
}
$onBehalfOf = $request->getOnBehalfOf();
if (!empty($onBehalfOf)) {
$result['on_behalf_of'] = $onBehalfOf;
}
return $result;
}
/**
* @param CreatePostReceiptRequestInterface $request
* @return array
*/
private function serializeObjectId(CreatePostReceiptRequestInterface $request)
{
$result = array();
if ($request->getType() === ReceiptType::PAYMENT) {
$result['payment_id'] = $request->getObjectId();
} elseif ($request->getType() === ReceiptType::REFUND) {
$result['refund_id'] = $request->getObjectId();
}
return $result;
}
}
@@ -0,0 +1,89 @@
<?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\Request\Receipts;
use YooKassa\Common\Exceptions\InvalidPropertyValueException;
use YooKassa\Common\Exceptions\InvalidPropertyValueTypeException;
use YooKassa\Helpers\TypeCast;
/**
* Class PaymentReceipt
* @package YooKassa\Model
*
* @property string $payment_id Идентификатор платежа в ЮKassa.
* @property string $paymentId Идентификатор платежа в ЮKassa.
*/
class PaymentReceiptResponse extends AbstractReceiptResponse
{
const LENGTH_PAYMENT_ID = 36;
private $_payment_id;
/**
* Установка свойств, присущих конкретному объекту
*
* @param array $receiptData
*
* @return void
*/
public function setSpecificProperties($receiptData)
{
$this->setPaymentId($this->getObjectId());
}
/**
* @return string
*/
public function getPaymentId()
{
return $this->_payment_id;
}
/**
* Устанавливает идентификатор платежа в ЮKassa
*
* @param string $value Идентификатор платежа в ЮKassa
*
* @throws InvalidPropertyValueTypeException Выбрасывается если в качестве значения была передана не строка
* @throws InvalidPropertyValueException Выбрасывается если длина переданной строки не равна 36
*/
public function setPaymentId($value)
{
if ($value === null || $value === '') {
$this->_payment_id = null;
} elseif (!TypeCast::canCastToString($value)) {
throw new InvalidPropertyValueTypeException('Invalid payment_id value type', 0, 'Receipt.paymentId');
} elseif (strlen((string)$value) !== self::LENGTH_PAYMENT_ID) {
throw new InvalidPropertyValueException(
'Invalid payment_id value: "'.$value.'"', 0, 'Receipt.paymentId', $value
);
} else {
$this->_payment_id = (string)$value;
}
}
}
@@ -0,0 +1,74 @@
<?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\Request\Receipts;
use YooKassa\Model\ReceiptType;
/**
* Class ReceiptResponseFactory
* @package YooKassa\Request\Receipts
*/
class ReceiptResponseFactory
{
private $typeClassMap = array(
ReceiptType::PAYMENT => 'PaymentReceiptResponse',
ReceiptType::REFUND => 'RefundReceiptResponse',
ReceiptType::SIMPLE => 'SimpleReceiptResponse',
);
/**
* @param array $data
*
* @return AbstractReceiptResponse
*/
public function factory($data)
{
if (array_key_exists('type', $data)) {
if (array_key_exists('refund_id', $data)) {
$type = ReceiptType::REFUND;
} elseif (array_key_exists('payment_id', $data)) {
$type = ReceiptType::PAYMENT;
} else {
$type = ReceiptType::SIMPLE;
}
} else {
throw new \InvalidArgumentException(
'Parameter type not specified in ReceiptResponseFactory.factory()'
);
}
if (!is_string($type)) {
throw new \InvalidArgumentException('Invalid receipt type value in receipt factory');
}
if (!in_array($type, ReceiptType::getValidValues())) {
throw new \InvalidArgumentException('Invalid receipt data type "' . $type . '"');
}
$className = __NAMESPACE__ . '\\' . $this->typeClassMap[$type];
return new $className($data);
}
}
@@ -0,0 +1,102 @@
<?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\Request\Receipts;
use YooKassa\Model\SettlementInterface;
/**
* Interface ReceiptInterface
*
* @package YooKassa\Model
*
* @property-read string $id Идентификатор чека в ЮKassa.
* @property-read string $type Тип чека в онлайн-кассе: приход "payment" или возврат "refund".
* @property-read string $receiptRegistration Статус доставки данных для чека в онлайн-кассу ("pending", "succeeded" или "canceled").
* @property-read string $receipt_registration Статус доставки данных для чека в онлайн-кассу ("pending", "succeeded" или "canceled").
* @property-read string $status Статус доставки данных для чека в онлайн-кассу ("pending", "succeeded" или "canceled").
* @property-read int $taxSystemCode Код системы налогообложения. Число 1-6.
* @property-read int $tax_system_code Код системы налогообложения. Число 1-6.
* @property-read ReceiptResponseItemInterface[] $items Список товаров в заказе
* @property-read SettlementInterface[] $settlements Список товаров в заказе
*/
interface ReceiptResponseInterface
{
/**
* Возвращает идентификатор чека в ЮKassa
*
* @return string Идентификатор чека в ЮKassa.
*/
public function getId();
/**
* Возвращает тип чека в онлайн-кассе
*
* @return string Тип чека в онлайн-кассе: приход "payment" или возврат "refund".
*/
public function getType();
/**
* Возвращает статус доставки данных для чека в онлайн-кассу
*
* @return string Статус доставки данных для чека в онлайн-кассу ("pending", "succeeded" или "canceled").
*/
public function getStatus();
/**
* Возвращает код системы налогообложения
*
* @return int Код системы налогообложения. Число 1-6.
*/
public function getTaxSystemCode();
/**
* Возвращает список товаров в заказ
*
* @return ReceiptResponseItemInterface[]
*/
public function getItems();
/**
* Возвращает список расчетов
*
* @return SettlementInterface[]
*/
public function getSettlements();
/**
* Возвращает идентификатор магазин
*
* @return string|null
*/
public function getOnBehalfOf();
/**
* Проверяет есть ли в чеке хотя бы одна позиция
* @return bool True если чек не пуст, false если в чеке нет ни одной позиции
*/
function notEmpty();
}
@@ -0,0 +1,387 @@
<?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\Request\Receipts;
use YooKassa\Common\AbstractObject;
use YooKassa\Common\Exceptions\EmptyPropertyValueException;
use YooKassa\Common\Exceptions\InvalidPropertyValueException;
use YooKassa\Common\Exceptions\InvalidPropertyValueTypeException;
use YooKassa\Helpers\TypeCast;
use YooKassa\Model\AmountInterface;
use YooKassa\Model\MonetaryAmount;
use YooKassa\Model\Receipt\ReceiptItemAmount;
use YooKassa\Model\Supplier;
use YooKassa\Model\SupplierInterface;
/**
* Interface ReceiptItemInterface
*
* @package YooKassa\Model
*
* @property string $description Название товара (не более 128 символов).
* @property float $quantity Количество товара. Максимально возможное значение зависит от модели вашей онлайн-кассы.
* @property float $amount Суммарная стоимость товара в копейках/центах
* @property AmountInterface $price Цена товара
* @property int $vatCode Ставка НДС, число 1-6
* @property int $vat_code Ставка НДС, число 1-6
* @property string $paymentSubject Признак предмета расчета
* @property string $payment_subject Признак предмета расчета
* @property string $paymentMode Признак способа расчета
* @property string $payment_mode Признак способа расчета
*/
class ReceiptResponseItem extends AbstractObject implements ReceiptResponseItemInterface
{
/**
* @var string Наименование товара
*/
private $_description;
/**
* @var float Количество
*/
private $_quantity;
/**
* @var ReceiptItemAmount Цена товара
*/
private $_amount;
/**
* @var int Ставка НДС, число 1-6
*/
private $_vatCode;
/**
* @var string Признак предмета расчета
*/
private $_paymentSubject;
/**
* @var string Признак способа расчета
*/
private $_paymentMode;
/**
* @var SupplierInterface Информация о поставщике товара или услуги
*/
private $_supplier;
/**
* Конструктор, устанавливает настройки товара из ассоциативного массива
*
* @param array $itemData Массив с информацией о товаре, пришедший от API
*/
public function __construct($itemData)
{
$this->setDescription($itemData['description']);
$this->setQuantity($itemData['quantity']);
$this->setPrice($this->factoryAmount($itemData['amount']));
$this->setVatCode($itemData['vat_code']);
if (!empty($itemData['payment_mode'])) {
$this->setPaymentMode($itemData['payment_mode']);
}
if (!empty($itemData['payment_subject'])) {
$this->setPaymentSubject($itemData['payment_subject']);
}
if (!empty($itemData['supplier'])) {
$this->setSupplier($itemData['supplier']);
}
}
/**
* Возвращает наименование товара
* @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 description value in ReceiptItem', 0, 'ReceiptItem.description'
);
} elseif (TypeCast::canCastToString($value)) {
$castedValue = (string)$value;
if ($castedValue === '') {
throw new EmptyPropertyValueException(
'Empty description value in ReceiptItem', 0, 'ReceiptItem.description'
);
}
$this->_description = $castedValue;
} else {
throw new InvalidPropertyValueTypeException(
'Empty description value in ReceiptItem', 0, 'ReceiptItem.description', $value
);
}
}
/**
* Возвращает количество товара
* @return float Количество купленного товара
*/
public function getQuantity()
{
return $this->_quantity;
}
/**
* Устанавливает количество покупаемого товара
*
* @param int $value Количество
*
* @throws EmptyPropertyValueException Выбрасывается если было передано пустое значение
* @throws InvalidPropertyValueException Выбрасывается если в качестве аргумента был передан ноль
* или отрицательное число
* @throws InvalidPropertyValueTypeException Выбрасывается если в качестве аргумента было передано не число
*/
public function setQuantity($value)
{
if ($value === null || $value === '') {
throw new EmptyPropertyValueException('Empty quantity value in ReceiptItem', 0, 'ReceiptItem.quantity');
} elseif (!is_numeric($value)) {
throw new InvalidPropertyValueTypeException(
'Invalid quantity value type in ReceiptItem', 0, 'ReceiptItem.quantity', $value
);
} elseif ($value <= 0.0) {
throw new InvalidPropertyValueException(
'Invalid quantity value in ReceiptItem', 0, 'ReceiptItem.quantity', $value
);
} else {
$this->_quantity = (float)$value;
}
}
/**
* Возвращает общую стоимость покупаемого товара в копейках/центах
* @return int Сумма стоимости покупаемого товара
*/
public function getAmount()
{
return (int)round($this->_amount->getIntegerValue() * $this->_quantity);
}
/**
* Возвращает цену товара
* @return AmountInterface Цена товара
*/
public function getPrice()
{
return $this->_amount;
}
/**
* Устанавливает цену товара
*
* @param AmountInterface $value Цена товара
*/
public function setPrice(AmountInterface $value)
{
$this->_amount = $value;
}
/**
* Возвращает ставку НДС
* @return int|null Ставка НДС, число 1-6, или null если ставка не задана
*/
public function getVatCode()
{
return $this->_vatCode;
}
/**
* Устанавливает ставку НДС
*
* @param int $value Ставка НДС, число 1-6
*
* @throws InvalidPropertyValueException Выбрасывается если в качестве аргумента было передано число меньше одного
* или больше шести
* @throws InvalidPropertyValueTypeException Выбрасывается если в качестве аргумента было передано не число
*/
public function setVatCode($value)
{
if ($value === null || $value === '') {
$this->_vatCode = null;
} elseif (!is_numeric($value)) {
throw new InvalidPropertyValueTypeException(
'Invalid vatId value type in ReceiptItem', 0, 'ReceiptItem.vatId', $value
);
} elseif ($value < 1 || $value > 6) {
throw new InvalidPropertyValueException(
'Invalid vatId value in ReceiptItem', 0, 'ReceiptItem.vatId', $value
);
} else {
$this->_vatCode = (int)$value;
}
}
/**
* Возвращает признак предмета расчета
* @return string|null Признак предмета расчета
*/
public function getPaymentSubject()
{
return $this->_paymentSubject;
}
/**
* Устанавливает признак предмета расчета
*
* @param string $value Признак предмета расчета
*
* @throws InvalidPropertyValueTypeException Выбрасывается если в качестве аргумента была передана не строка
*/
public function setPaymentSubject($value)
{
if ($value === null || $value === '') {
$this->_paymentSubject = null;
} elseif (!TypeCast::canCastToString($value)) {
throw new InvalidPropertyValueTypeException('Invalid paymentSubject value type', 0, 'ReceiptItem.paymentSubject');
} else {
$this->_paymentSubject = $value;
}
}
/**
* Возвращает признак способа расчета
* @return string|null Признак способа расчета
*/
public function getPaymentMode()
{
return $this->_paymentMode;
}
/**
* Устанавливает признак способа расчета
*
* @param string $value Признак способа расчета
*
* @throws InvalidPropertyValueTypeException Выбрасывается если в качестве аргумента была передана не строка
*/
public function setPaymentMode($value)
{
if ($value === null || $value === '') {
$this->_paymentMode = null;
} elseif (!TypeCast::canCastToString($value)) {
throw new InvalidPropertyValueTypeException(
'Invalid paymentMode value type', 0, 'ReceiptItem.paymentMode', $value
);
} else {
$this->_paymentMode = $value;
}
}
/**
* @return SupplierInterface
*/
public function getSupplier()
{
return $this->_supplier;
}
/**
* Устанавливает информацию о поставщике товара или услуги.
*
* @param SupplierInterface|array $value
*/
public function setSupplier($value)
{
if ($value === null || $value === '') {
throw new EmptyPropertyValueException(
'Empty supplier value in receipt', 0, 'Receipt.supplier'
);
}
if (is_array($value)) {
$value = new Supplier($value);
}
if (!($value instanceof SupplierInterface)) {
throw new InvalidPropertyValueTypeException(
'Invalid supplier value type in receipt', 0, 'Receipt.supplier', $value
);
}
$this->_supplier = $value;
}
/**
* Фабричный метод создания суммы
*
* @param array $options Сумма в виде ассоциативного массива
*
* @return AmountInterface Созданный инстанс суммы
*/
private function factoryAmount($options)
{
$amount = new MonetaryAmount(null, $options['currency']);
if ($options['value'] > 0) {
$amount->setValue($options['value']);
}
return $amount;
}
/**
* @return array
*/
public function jsonSerialize()
{
$result = array(
'description' => $this->getDescription(),
'amount' => array(
'value' => $this->getPrice()->getValue(),
'currency' => $this->getPrice()->getCurrency(),
),
'quantity' => $this->getQuantity(),
'vat_code' => $this->getVatCode(),
);
if ($this->getPaymentSubject()) {
$result['payment_subject'] = $this->getPaymentSubject();
}
if ($this->getPaymentMode()) {
$result['payment_mode'] = $this->getPaymentMode();
}
return $result;
}
}
@@ -0,0 +1,82 @@
<?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\Request\Receipts;
use YooKassa\Model\AmountInterface;
use YooKassa\Model\SupplierInterface;
/**
* Interface ReceiptItemInterface
*
* @package YooKassa\Model
*
* @property-read string $description Название товара (не более 128 символов).
* @property-read float $quantity Количество товара. Максимально возможное значение зависит от модели вашей онлайн-кассы.
* @property-read float $amount Суммарная стоимость товара в копейках/центах
* @property-read AmountInterface $price Цена товара
* @property-read int $vatCode Ставка НДС, число 1-6
* @property-read int $vat_code Ставка НДС, число 1-6
*/
interface ReceiptResponseItemInterface
{
/**
* Возвращает название товара
* @return string Название товара (не более 128 символов).
*/
function getDescription();
/**
* Возвращает количество товара
* @return float Количество купленного товара
*/
function getQuantity();
/**
* Возвращает общую стоимость покупаемого товара в копейках/центах
* @return float Сумма стоимости покупаемого товара
*/
function getAmount();
/**
* Возвращает цену товара
* @return AmountInterface Цена товара
*/
function getPrice();
/**
* Возвращает ставку НДС
* @return int|null Ставка НДС, число 1-6, или null если ставка не задана
*/
function getVatCode();
/**
* Возвращает информацию о поставщике товара или услуги
* @return SupplierInterface
*/
function getSupplier();
}
@@ -0,0 +1,509 @@
<?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\Request\Receipts;
use Exception;
use YooKassa\Common\AbstractRequest;
use YooKassa\Common\Exceptions\InvalidPropertyValueException;
use YooKassa\Common\Exceptions\InvalidPropertyValueTypeException;
use YooKassa\Helpers\TypeCast;
use YooKassa\Model\RefundStatus;
/**
* Класс объекта запроса к API списка возвратов магазина
*
* @package YooKassa\Request\Receipts
*
* @property \DateTime $createdAtGte Время создания, от (включительно)
* @property \DateTime $createdAtGt Время создания, от (не включая)
* @property \DateTime $createdAtLte Время создания, до (включительно)
* @property \DateTime $createdAtLt Время создания, до (не включая)
* @property string $paymentId Идентификатор платежа
* @property string $refundId Идентификатор возврата
* @property string $status Статус возврата
* @property integer|null $limit Ограничение количества объектов возврата, отображаемых на одной странице выдачи
* @property string $cursor Токен для получения следующей страницы выборки
*/
class ReceiptsRequest extends AbstractRequest implements ReceiptsRequestInterface
{
const MAX_LIMIT_VALUE = 100;
/**
* @var \DateTime Время создания, от (включительно)
*/
private $_createdAtGte;
/**
* @var \DateTime Время создания, от (не включая)
*/
private $_createdAtGt;
/**
* @var \DateTime Время создания, до (включительно)
*/
private $_createdAtLte;
/**
* @var \DateTime Время создания, до (не включая)
*/
private $_createdAtLt;
/**
* @var string Идентификатор платежа
*/
private $_paymentId;
/**
* @var string Идентификатор возврата
*/
private $_refundId;
/**
* @var string Статус возврата
*/
private $_status;
/**
* @var string Ограничение количества объектов платежа
*/
private $_limit;
/**
* @var string Токен для получения следующей страницы выборки
*/
private $_cursor;
/**
* Возвращает идентификатор возврата
* @return string Идентификатор возврата
*/
public function getRefundId()
{
return $this->_refundId;
}
/**
* Проверяет был ли установлен идентификатор возврата
* @return bool True если идентификатор возврата был установлен, false если не был
*/
public function hasRefundId()
{
return !empty($this->_refundId);
}
/**
* Устанавливает идентификатор возврата
* @param string $value Идентификатор возврата, который ищется в API
*/
public function setRefundId($value)
{
if ($value === null || $value === '') {
$this->_refundId = null;
} elseif (TypeCast::canCastToString($value)) {
$length = mb_strlen((string)$value, 'utf-8');
if ($length != 36) {
throw new InvalidPropertyValueException(
'Invalid payment id value in ReceiptsRequest', 0, 'ReceiptsRequest.refundId', $value
);
}
$this->_refundId = (string)$value;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid payment id value type in ReceiptsRequest', 0, 'ReceiptsRequest.refundId', $value
);
}
}
/**
* Возвращает идентификатор платежа если он задан или null
* @return string|null Идентификатор платежа
*/
public function getPaymentId()
{
return $this->_paymentId;
}
/**
* Проверяет, был ли задан идентификатор платежа
* @return bool True если идентификатор был задан, false если нет
*/
public function hasPaymentId()
{
return !empty($this->_paymentId);
}
/**
* Устанавливает идентификатор платежа или null если требуется его удалить
* @param string|null $value Идентификатор платежа
*
* @throws InvalidPropertyValueException Выбрасывается если длина переданной строки не равна 36 символам
* @throws InvalidPropertyValueTypeException Выбрасывается если в метод была передана не строка
*/
public function setPaymentId($value)
{
if ($value === null || $value === '') {
$this->_paymentId = null;
} elseif (TypeCast::canCastToString($value)) {
$length = mb_strlen((string)$value, 'utf-8');
if ($length != 36) {
throw new InvalidPropertyValueException(
'Invalid payment id value in ReceiptsRequest', 0, 'ReceiptsRequest.paymentId', $value
);
}
$this->_paymentId = (string)$value;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid payment id value type in ReceiptsRequest', 0, 'ReceiptsRequest.paymentId', $value
);
}
}
/**
* Возвращает дату создания от которой будут возвращены возвраты или null если дата не была установлена
* @return \DateTime|null Время создания, от (включительно)
*/
public function getCreatedAtGte()
{
return $this->_createdAtGte;
}
/**
* Проверяет была ли установлена дата создания от которой выбираются возвраты
* @return bool True если дата была установлена, false если нет
*/
public function hasCreatedAtGte()
{
return !empty($this->_createdAtGte);
}
/**
* Устанавливает дату создания от которой выбираются возвраты
* @param \DateTime|string|int|null $value Время создания, от (включительно) или null чтобы удалить значение
*
* @throws InvalidPropertyValueException Генерируется если была передана дата в невалидном формате (была передана
* строка или число, которые не удалось преобразовать в валидную дату)
* @throws InvalidPropertyValueTypeException|Exception Генерируется если была передана дата с не тем типом (передана не
* строка, не число и не значение типа \DateTime)
*/
public function setCreatedAtGte($value)
{
if ($value === null || $value === '') {
$this->_createdAtGte = null;
} elseif (TypeCast::canCastToDateTime($value)) {
$dateTime = TypeCast::castToDateTime($value);
if ($dateTime === null) {
throw new InvalidPropertyValueException(
'Invalid created_gte value in ReceiptsRequest', 0, 'ReceiptsRequest.createdAtGte'
);
}
$this->_createdAtGte = $dateTime;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid created_gte value type in ReceiptsRequest', 0, 'ReceiptsRequest.createdAtGte'
);
}
}
/**
* Возвращает дату создания от которой будут возвращены возвраты или null если дата не была установлена
* @return \DateTime|null Время создания, от (не включая)
*/
public function getCreatedAtGt()
{
return $this->_createdAtGt;
}
/**
* Проверяет была ли установлена дата создания от которой выбираются возвраты
* @return bool True если дата была установлена, false если нет
*/
public function hasCreatedAtGt()
{
return !empty($this->_createdAtGt);
}
/**
* Устанавливает дату создания от которой выбираются возвраты
* @param \DateTime|string|int|null $value Время создания, от (не включая) или null чтобы удалить значение
*
* @throws InvalidPropertyValueException Генерируется если была передана дата в невалидном формате (была передана
* строка или число, которые не удалось преобразовать в валидную дату)
* @throws InvalidPropertyValueTypeException|Exception Генерируется если была передана дата с не тем типом (передана не
* строка, не число и не значение типа \DateTime)
*/
public function setCreatedAtGt($value)
{
if ($value === null || $value === '') {
$this->_createdAtGt = null;
} elseif (TypeCast::canCastToDateTime($value)) {
$dateTime = TypeCast::castToDateTime($value);
if ($dateTime === null) {
throw new InvalidPropertyValueException(
'Invalid created_gt value in ReceiptsRequest', 0, 'ReceiptsRequest.createdAtGt'
);
}
$this->_createdAtGt = $dateTime;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid created_gt value type in ReceiptsRequest', 0, 'ReceiptsRequest.createdAtGt'
);
}
}
/**
* Возвращает дату создания до которой будут возвращены возвраты или null если дата не была установлена
* @return \DateTime|null Время создания, до (включительно)
*/
public function getCreatedAtLte()
{
return $this->_createdAtLte;
}
/**
* Проверяет была ли установлена дата создания до которой выбираются возвраты
* @return bool True если дата была установлена, false если нет
*/
public function hasCreatedAtLte()
{
return !empty($this->_createdAtLte);
}
/**
* Устанавливает дату создания до которой выбираются возвраты
* @param \DateTime|string|int|null $value Время создания, до (включительно) или null чтобы удалить значение
*
* @throws InvalidPropertyValueException Генерируется если была передана дата в невалидном формате (была передана
* строка или число, которые не удалось преобразовать в валидную дату)
* @throws InvalidPropertyValueTypeException|Exception Генерируется если была передана дата с не тем типом (передана не
* строка, не число и не значение типа \DateTime)
*/
public function setCreatedAtLte($value)
{
if ($value === null || $value === '') {
$this->_createdAtLte = null;
} elseif (TypeCast::canCastToDateTime($value)) {
$dateTime = TypeCast::castToDateTime($value);
if ($dateTime === null) {
throw new InvalidPropertyValueException(
'Invalid created_lte value in ReceiptsRequest', 0, 'ReceiptsRequest.createdLte'
);
}
$this->_createdAtLte = $dateTime;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid created_lte value type in ReceiptsRequest', 0, 'ReceiptsRequest.createdLte'
);
}
}
/**
* Возвращает дату создания до которой будут возвращены возвраты или null если дата не была установлена
* @return \DateTime|null Время создания, до (не включая)
*/
public function getCreatedAtLt()
{
return $this->_createdAtLt;
}
/**
* Проверяет была ли установлена дата создания до которой выбираются возвраты
* @return bool True если дата была установлена, false если нет
*/
public function hasCreatedAtLt()
{
return !empty($this->_createdAtLt);
}
/**
* Устанавливает дату создания до которой выбираются возвраты
* @param \DateTime|string|int|null $value Время создания, до (не включая) или null чтобы удалить значение
*
* @throws InvalidPropertyValueException Генерируется если была передана дата в невалидном формате (была передана
* строка или число, которые не удалось преобразовать в валидную дату)
* @throws InvalidPropertyValueTypeException|Exception Генерируется если была передана дата с не тем типом (передана не
* строка, не число и не значение типа \DateTime)
*/
public function setCreatedAtLt($value)
{
if ($value === null || $value === '') {
$this->_createdAtLt = null;
} elseif (TypeCast::canCastToDateTime($value)) {
$dateTime = TypeCast::castToDateTime($value);
if ($dateTime === null) {
throw new InvalidPropertyValueException(
'Invalid created_lt value in ReceiptsRequest', 0, 'ReceiptsRequest.createdLt'
);
}
$this->_createdAtLt = $dateTime;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid created_lt value type in ReceiptsRequest', 0, 'ReceiptsRequest.createdLt'
);
}
}
/**
* Возвращает статус выбираемых возвратов или null если он до этого не был установлен
* @return string|null Статус выбираемых возвратов
*/
public function getStatus()
{
return $this->_status;
}
/**
* Проверяет был ли установлен статус выбираемых возвратов
* @return bool True если статус был установлен, false если нет
*/
public function hasStatus()
{
return !empty($this->_status);
}
/**
* Устанавливает статус выбираемых возвратов
* @param string $value Статус выбираемых платежей или null чтобы удалить значение
*
* @throws InvalidPropertyValueException Выбрасывается если переданное значение не является валидным статусом
* @throws InvalidPropertyValueTypeException Выбрасывается если в метод была передана не строка
*/
public function setStatus($value)
{
if ($value === null || $value === '') {
$this->_status = null;
} elseif (TypeCast::canCastToEnumString($value)) {
if (!RefundStatus::valueExists((string)$value)) {
throw new InvalidPropertyValueException(
'Invalid status value in ReceiptsRequest', 0, 'ReceiptsRequest.status', $value
);
} else {
$this->_status = (string)$value;
}
} else {
throw new InvalidPropertyValueTypeException(
'Invalid status value type in ReceiptsRequest', 0, 'ReceiptsRequest.status', $value
);
}
}
/**
* Возвращает токен для получения следующей страницы выборки
* @return string|null Токен для получения следующей страницы выборки
*/
public function getCursor()
{
return $this->_cursor;
}
/**
* Проверяет был ли установлен токен следующей страницы
* @return bool True если токен был установлен, false если нет
*/
public function hasCursor()
{
return !empty($this->_cursor);
}
/**
* Устанавливает токен следующей страницы выборки
* @param string $value Токен следующей страницы выборки или null чтобы удалить значение
*
* @throws InvalidPropertyValueTypeException Выбрасывается если в метод была передана не строка
*/
public function setCursor($value)
{
if ($value === null || $value === '') {
$this->_cursor = null;
} elseif (TypeCast::canCastToString($value)) {
$this->_cursor = (string) $value;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid status value type in ReceiptsRequest', 0, 'ReceiptsRequest.cursor', $value
);
}
}
/**
* Ограничение количества объектов платежа
* @return integer|null Ограничение количества объектов платежа
*/
public function getLimit()
{
return $this->_limit;
}
/**
* Проверяет был ли установлено ограничение количества объектов платежа
* @return bool True если было установлено, false если нет
*/
public function hasLimit()
{
return $this->_limit !== null;
}
/**
* Устанавливает ограничение количества объектов платежа
* @param integer|null $value Ограничение количества объектов платежа или null чтобы удалить значение
*
* @throws InvalidPropertyValueTypeException Выбрасывается если в метод была передано не целое число
*/
public function setLimit($value)
{
if ($value === null || $value === '') {
$this->_limit = null;
} elseif (is_int($value)) {
if ($value < 0 || $value > self::MAX_LIMIT_VALUE) {
throw new InvalidPropertyValueException(
'Invalid limit value in ReceiptsRequest', 0, 'ReceiptsRequest.limit', $value
);
}
$this->_limit = $value;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid limit value type in ReceiptsRequest', 0, 'ReceiptsRequest.limit', $value
);
}
}
/**
* Проверяет валидность текущего объекта запроса
* @return bool True если объект валиден, false если нет
*/
public function validate()
{
return true;
}
/**
* Возвращает инстанс билдера объектов запросов списка возвратов магазина
* @return ReceiptsRequestBuilder Билдер объектов запросов списка возвратов
*/
public static function builder()
{
return new ReceiptsRequestBuilder();
}
}
@@ -0,0 +1,195 @@
<?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\Request\Receipts;
use YooKassa\Common\AbstractRequestBuilder;
use YooKassa\Common\Exceptions\InvalidPropertyValueException;
use YooKassa\Common\Exceptions\InvalidPropertyValueTypeException;
/**
* Класс билдера объектов запросов к API списка чеков
*
* @package YooKassa\Request\Receipts
*/
class ReceiptsRequestBuilder extends AbstractRequestBuilder
{
/**
* @var ReceiptsRequest Инстанс собираемого объекта запроса
*/
protected $currentObject;
/**
* Инициализирует новый инстанс собираемого объекта
* @return ReceiptsRequest Инстанс собираемого запроса
*/
protected function initCurrentObject()
{
return new ReceiptsRequest();
}
/**
* Устанавливает идентификатор возврата
* @param string $value Идентификатор возврата, который ищется в API
* @return ReceiptsRequestBuilder Инстанс текущего объекта билдера
*
* @throws InvalidPropertyValueException Выбрасывается если длина переданного значения не равна 36
* @throws InvalidPropertyValueTypeException Выбрасывается если в метод была передана не строка
*/
public function setRefundId($value)
{
$this->currentObject->setRefundId($value);
return $this;
}
/**
* Устанавливает идентификатор платежа или null если требуется его удалить
* @param string|null $value Идентификатор платежа
* @return ReceiptsRequestBuilder Инстанс текущего объекта билдера
*
* @throws InvalidPropertyValueException Выбрасывается если длина переданной строки не равна 36 символам
* @throws InvalidPropertyValueTypeException Выбрасывается если в метод была передана не строка
*/
public function setPaymentId($value)
{
$this->currentObject->setPaymentId($value);
return $this;
}
/**
* Устанавливает статус выбираемых чеков
* @param string $value Статус выбираемых платежей или null чтобы удалить значение
* @return ReceiptsRequestBuilder Инстанс текущего объекта билдера
*
* @throws InvalidPropertyValueException Выбрасывается если переданное значение не является валидным статусом
* @throws InvalidPropertyValueTypeException Выбрасывается если в метод была передана не строка
*/
public function setStatus($value)
{
$this->currentObject->setStatus($value);
return $this;
}
/**
* Устанавливает ограничение количества объектов чеков
* @param string $value Ограничение количества объектов чеков или null чтобы удалить значение
* @return ReceiptsRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueTypeException Выбрасывается если в метод было передана не целое число
*/
public function setLimit($value)
{
$this->currentObject->setLimit($value);
return $this;
}
/**
* Устанавливает токен следующей страницы выборки
* @param string $value Токен следующей страницы выборки или null чтобы удалить значение
* @return ReceiptsRequestBuilder Инстанс текущего объекта билдера
*
* @throws InvalidPropertyValueTypeException Выбрасывается если в метод была передана не строка
*/
public function setCursor($value)
{
$this->currentObject->setCursor($value);
return $this;
}
/**
* Устанавливает дату создания от которой выбираются чеки
* @param \DateTime|string|int|null $value Время создания, от (не включая) или null чтобы удалить значение
* @return ReceiptsRequestBuilder Инстанс текущего объекта билдера
*
* @throws InvalidPropertyValueException Генерируется если была передана дата в невалидном формате (была передана
* строка или число, которые не удалось преобразовать в валидную дату)
* @throws InvalidPropertyValueTypeException|\Exception Генерируется если была передана дата с не тем типом (передана не
* строка, не число и не значение типа \DateTime)
*/
public function setCreatedAtGt($value)
{
$this->currentObject->setCreatedAtGt($value);
return $this;
}
/**
* Устанавливает дату создания от которой выбираются чеки
* @param \DateTime|string|int|null $value Время создания, от (включительно) или null чтобы удалить значение
* @return ReceiptsRequestBuilder Инстанс текущего объекта билдера
*
* @throws InvalidPropertyValueException Генерируется если была передана дата в невалидном формате (была передана
* строка или число, которые не удалось преобразовать в валидную дату)
* @throws InvalidPropertyValueTypeException|\Exception Генерируется если была передана дата с не тем типом (передана не
* строка, не число и не значение типа \DateTime)
*/
public function setCreatedAtGte($value)
{
$this->currentObject->setCreatedAtGte($value);
return $this;
}
/**
* Устанавливает дату создания до которой выбираются чеки
* @param \DateTime|string|int|null $value Время создания, до (не включая) или null чтобы удалить значение
* @return ReceiptsRequestBuilder Инстанс текущего объекта билдера
*
* @throws InvalidPropertyValueException Генерируется если была передана дата в невалидном формате (была передана
* строка или число, которые не удалось преобразовать в валидную дату)
* @throws InvalidPropertyValueTypeException|\Exception Генерируется если была передана дата с не тем типом (передана не
* строка, не число и не значение типа \DateTime)
*/
public function setCreatedAtLt($value)
{
$this->currentObject->setCreatedAtLt($value);
return $this;
}
/**
* Устанавливает дату создания до которой выбираются чеки
* @param \DateTime|string|int|null $value Время создания, до (включительно) или null чтобы удалить значение
* @return ReceiptsRequestBuilder Инстанс текущего объекта билдера
*
* @throws InvalidPropertyValueException Генерируется если была передана дата в невалидном формате (была передана
* строка или число, которые не удалось преобразовать в валидную дату)
* @throws InvalidPropertyValueTypeException|\Exception Генерируется если была передана дата с не тем типом (передана не
* строка, не число и не значение типа \DateTime)
*/
public function setCreatedAtLte($value)
{
$this->currentObject->setCreatedAtLte($value);
return $this;
}
/**
* Собирает и возвращает объект запроса списка чеков магазина
* @param array|null $options Массив с настройками запроса
* @return ReceiptsRequestInterface Инстанс объекта запроса к API для получения списка чеков магазина
*/
public function build(array $options = null)
{
return parent::build($options);
}
}
@@ -0,0 +1,153 @@
<?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\Request\Receipts;
/**
* Интерфейс объекта запроса списка возвратов
*
* @package YooKassa\Request\Refunds
*
* @property-read string $paymentId Идентификатор платежа
* @property-read string $refundId Идентификатор возврата
* @property-read \DateTime $createdAtGte Время создания, от (включительно)
* @property-read \DateTime $createdAtGt Время создания, от (не включая)
* @property-read \DateTime $createdAtLte Время создания, до (включительно)
* @property-read \DateTime $createdAtLt Время создания, до (не включая)
* @property-read string $status Статус возврата
* @property-read string $cursor Токен для получения следующей страницы выборки
* @property-read integer|null $limit Ограничение количества объектов, отображаемых на одной странице выдачи
*/
interface ReceiptsRequestInterface
{
/**
* Возвращает идентификатор возврата
* @return string Идентификатор возврата
*/
function getRefundId();
/**
* Проверяет был ли установлен идентификатор возврата
* @return bool True если идентификатор возврата был установлен, false если не был
*/
function hasRefundId();
/**
* Возвращает идентификатор платежа если он задан или null
* @return string|null Идентификатор платежа
*/
function getPaymentId();
/**
* Проверяет, был ли задан идентификатор платежа
* @return bool True если идентификатор был задан, false если нет
*/
function hasPaymentId();
/**
* Возвращает дату создания от которой будут возвращены возвраты или null если дата не была установлена
* @return \DateTime|null Время создания, от (включительно)
*/
function getCreatedAtGte();
/**
* Проверяет была ли установлена дата создания от которой выбираются возвраты
* @return bool True если дата была установлена, false если нет
*/
function hasCreatedAtGte();
/**
* Возвращает дату создания от которой будут возвращены возвраты или null если дата не была установлена
* @return \DateTime|null Время создания, от (не включая)
*/
function getCreatedAtGt();
/**
* Проверяет была ли установлена дата создания от которой выбираются возвраты
* @return bool True если дата была установлена, false если нет
*/
function hasCreatedAtGt();
/**
* Возвращает дату создания до которой будут возвращены возвраты или null если дата не была установлена
* @return \DateTime|null Время создания, до (включительно)
*/
function getCreatedAtLte();
/**
* Проверяет была ли установлена дата создания до которой выбираются возвраты
* @return bool True если дата была установлена, false если нет
*/
function hasCreatedAtLte();
/**
* Возвращает дату создания до которой будут возвращены возвраты или null если дата не была установлена
* @return \DateTime|null Время создания, до (не включая)
*/
function getCreatedAtLt();
/**
* Проверяет была ли установлена дата создания до которой выбираются возвраты
* @return bool True если дата была установлена, false если нет
*/
function hasCreatedAtLt();
/**
* Возвращает статус выбираемых возвратов или null если он до этого не был установлен
* @return string|null Статус выбираемых возвратов
*/
function getStatus();
/**
* Проверяет был ли установлен статус выбираемых возвратов
* @return bool True если статус был установлен, false если нет
*/
function hasStatus();
/**
* Возвращает токен для получения следующей страницы выборки
* @return string|null Токен для получения следующей страницы выборки
*/
function getCursor();
/**
* Проверяет был ли установлен токен следующей страницы
* @return bool True если токен был установлен, false если нет
*/
function hasCursor();
/**
* Возвращает ограничение количества объектов или null если оно до этого не было установлено
* @return string|null Ограничение количества объектов
*/
function getLimit();
/**
* Проверяет было ли установлено ограничение количества объектов
* @return bool True если ограничение количества объектов было установлено, false если нет
*/
function hasLimit();
}
@@ -0,0 +1,73 @@
<?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\Request\Receipts;
/**
* Класс сериализатора объектов запросов к API для получения списка возвратов
*
* @package YooKassa\Request\Receipts
*/
class ReceiptsRequestSerializer
{
/**
* @var array Карта маппинга свойств объекта запроса на поля отправляемого запроса
*/
private static $propertyMap = array(
'cursor' => 'cursor',
'createdAtGte' => 'created_at.gte',
'createdAtGt' => 'created_at.gt',
'createdAtLte' => 'created_at.lte',
'createdAtLt' => 'created_at.lt',
'limit' => 'limit',
'paymentId' => 'payment_id',
'refundId' => 'refund_id',
'status' => 'status',
);
/**
* Сериализует объект запроса к API для дальнейшей его отправки
* @param ReceiptsRequestInterface $request Сериализуемый объект
* @return array Массив с инфомрацией, отпарвляемый в дальнейшем в API
*/
public function serialize(ReceiptsRequestInterface $request)
{
$result = array();
foreach (self::$propertyMap as $property => $name) {
$value = $request->{$property};
if (!empty($value)) {
if ($value instanceof \DateTime) {
if ($value->getTimestamp() > 1) {
$result[$name] = $value->format(YOOKASSA_DATE);
}
} else {
$result[$name] = $value;
}
}
}
return $result;
}
}
@@ -0,0 +1,120 @@
<?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\Request\Receipts;
/**
* Class ReceiptsResponse
* @package YooKassa\Request\Receipts
*/
class ReceiptsResponse
{
/**
* Формат выдачи результатов запроса. Возможное значение: `list` (список).
*
* @var string Формат выдачи результатов запроса.
*/
private $type;
/**
* Список чеков
*
* @var ReceiptResponseInterface[] Список чеков
*/
private $items;
/**
* @var string|null Токен следующей страницы
*/
private $nextCursor;
/**
* @var ReceiptResponseFactory Фабрика для создания чеков
*/
private $factory;
/**
* Конструктор, устанавливает список полученых от API чеков
*
* @param array $response Разобранный ответ от API в виде чеков
* @throws \Exception
*/
public function __construct($response)
{
$this->factory = new ReceiptResponseFactory();
if (!empty($response['type'])) {
$this->type = $response['type'];
}
$this->items = array();
foreach ($response['items'] as $item) {
if ($receipt = $this->factory->factory($item)) {
$this->items[] = $receipt;
}
}
if (!empty($response['next_cursor'])) {
$this->nextCursor = $response['next_cursor'];
}
}
/**
* Возвращает формат выдачи результатов запроса. Возможное значение: `list` (список).
* @return string Формат выдачи результатов запроса.
*/
public function getType()
{
return $this->type;
}
/**
* Возаращает список чеков
* @return ReceiptResponseInterface[] Список чеков
*/
public function getItems()
{
return $this->items;
}
/**
* Возвращает токен следующей страницы, если он задан, или null
* @return string|null Токен следующей страницы
*/
public function getNextCursor()
{
return $this->nextCursor;
}
/**
* Проверяет имееотся ли в ответе токен следующей страницы
* @return bool True если токен следующей страницы есть, false если нет
*/
public function hasNextCursor()
{
return $this->nextCursor !== null;
}
}
@@ -0,0 +1,89 @@
<?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\Request\Receipts;
use YooKassa\Common\Exceptions\InvalidPropertyValueException;
use YooKassa\Common\Exceptions\InvalidPropertyValueTypeException;
use YooKassa\Helpers\TypeCast;
/**
* Class RefundReceipt
* @package YooKassa\Model
*
* @property string $refund_id Идентификатор возврата в ЮKassa.
* @property string $refundId Идентификатор возврата в ЮKassa.
*/
class RefundReceiptResponse extends AbstractReceiptResponse
{
const LENGTH_REFUND_ID = 36;
private $_refund_id;
/**
* Установка свойств, присущих конкретному объекту
*
* @param array $receiptData
*
* @return void
*/
public function setSpecificProperties($receiptData)
{
$this->setRefundId($this->getObjectId());
}
/**
* @return string
*/
public function getRefundId()
{
return $this->_refund_id;
}
/**
* Устанавливает идентификатор возврата в ЮKassa
*
* @param string $value идентификатор возврата в ЮKassa
*
* @throws InvalidPropertyValueTypeException Выбрасывается если в качестве значения была передана не строка
* @throws InvalidPropertyValueException Выбрасывается если длина переданной строки не равна 36
*/
public function setRefundId($value)
{
if ($value === null || $value === '') {
$this->_refund_id = null;
} elseif (!TypeCast::canCastToString($value)) {
throw new InvalidPropertyValueTypeException('Invalid refund_id value type', 0, 'Receipt.refundId');
} elseif (strlen((string)$value) !== self::LENGTH_REFUND_ID) {
throw new InvalidPropertyValueException(
'Invalid refund_id value: "'.$value.'"', 0, 'Receipt.refundId', $value
);
} else {
$this->_refund_id = (string)$value;
}
}
}
@@ -0,0 +1,46 @@
<?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\Request\Receipts;
/**
* Class SimpleReceiptResponse
* @package YooKassa\Model
*
* Чек, не привязанный ни к платежу, ни к возврату
*/
class SimpleReceiptResponse extends AbstractReceiptResponse
{
/**
* Установка свойств, присущих конкретному объекту
*
* @param array $receiptData
*
* @return void
*/
public function setSpecificProperties($receiptData)
{}
}