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,219 @@
<?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\Payments;
use InvalidArgumentException;
use YooKassa\Model\AmountInterface;
use YooKassa\Model\AuthorizationDetails;
use YooKassa\Model\CancellationDetails;
use YooKassa\Model\Confirmation\ConfirmationCodeVerification;
use YooKassa\Model\Confirmation\ConfirmationDeepLink;
use YooKassa\Model\Confirmation\ConfirmationEmbedded;
use YooKassa\Model\Confirmation\ConfirmationQr;
use YooKassa\Model\Confirmation\ConfirmationRedirect;
use YooKassa\Model\Confirmation\ConfirmationExternal;
use YooKassa\Model\ConfirmationType;
use YooKassa\Model\Metadata;
use YooKassa\Model\MonetaryAmount;
use YooKassa\Model\Payment;
use YooKassa\Model\PaymentInterface;
use YooKassa\Model\PaymentMethod\AbstractPaymentMethod;
use YooKassa\Model\PaymentMethod\PaymentMethodFactory;
use YooKassa\Model\Recipient;
use YooKassa\Model\Transfer;
/**
* Абстрактный класс ответа от API, возвращающего информацию о платеже
*
* @package YooKassa\Request\Payments
*/
abstract class AbstractPaymentResponse extends Payment implements PaymentInterface
{
/**
* Конструктор, устанавливает настройки платежа из ассоциативного массива
*
* @param array $sourceArray Массив с информацией о платеже, пришедший от API
* @throws \Exception
*/
public function fromArray($sourceArray)
{
$this->setId($sourceArray['id']);
$this->setStatus($sourceArray['status']);
$this->setAmount($this->factoryAmount($sourceArray['amount']));
$this->setCreatedAt($sourceArray['created_at']);
$this->setPaid($sourceArray['paid']);
$this->setRefundable($sourceArray['refundable']);
if (!empty($sourceArray['test'])) {
$this->setTest($sourceArray['test']);
}
if (!empty($sourceArray['payment_method'])) {
$this->setPaymentMethod($this->factoryPaymentMethod($sourceArray['payment_method']));
}
if (!empty($sourceArray['description'])) {
$this->setDescription($sourceArray['description']);
}
if (!empty($sourceArray['recipient'])) {
$recipient = new Recipient();
if (!empty($sourceArray['recipient']['account_id'])) {
$recipient->setAccountId($sourceArray['recipient']['account_id']);
}
if (!empty($sourceArray['recipient']['gateway_id'])) {
$recipient->setGatewayId($sourceArray['recipient']['gateway_id']);
}
$this->setRecipient($recipient);
}
if (!empty($sourceArray['captured_at'])) {
$this->setCapturedAt($sourceArray['captured_at']);
}
if (!empty($sourceArray['expires_at'])) {
$this->setExpiresAt($sourceArray['expires_at']);
}
if (!empty($sourceArray['confirmation'])) {
$confirmationType = $sourceArray['confirmation']['type'];
switch ($confirmationType) {
case ConfirmationType::REDIRECT:
$confirmation = new ConfirmationRedirect();
if (!empty($sourceArray['confirmation']['confirmation_url'])) {
$confirmation->setConfirmationUrl($sourceArray['confirmation']['confirmation_url']);
}
if (empty($sourceArray['confirmation']['enforce'])) {
$confirmation->setEnforce(false);
} else {
$confirmation->setEnforce($sourceArray['confirmation']['enforce']);
}
if (!empty($sourceArray['confirmation']['return_url'])) {
$confirmation->setReturnUrl($sourceArray['confirmation']['return_url']);
}
break;
case ConfirmationType::EMBEDDED:
$confirmation = new ConfirmationEmbedded();
if (!empty($sourceArray['confirmation']['confirmation_token'])) {
$confirmation->setConfirmationToken($sourceArray['confirmation']['confirmation_token']);
}
break;
case ConfirmationType::EXTERNAL:
$confirmation = new ConfirmationExternal();
break;
case ConfirmationType::CODE_VERIFICATION:
$confirmation = new ConfirmationCodeVerification();
break;
case ConfirmationType::DEEPLINK:
$confirmation = new ConfirmationDeepLink();
break;
case ConfirmationType::QR:
$confirmation = new ConfirmationQr();
if (!empty($sourceArray['confirmation']['confirmation_data'])) {
$confirmation->setConfirmationData($sourceArray['confirmation']['confirmation_data']);
}
break;
}
if (isset($confirmation)) {
$this->setConfirmation($confirmation);
} else {
throw new InvalidArgumentException('confirmation type '.$confirmationType.' is incorrect');
}
}
if (!empty($sourceArray['refunded_amount'])) {
$this->setRefundedAmount($this->factoryAmount($sourceArray['refunded_amount']));
}
if (!empty($sourceArray['receipt_registration'])) {
$this->setReceiptRegistration($sourceArray['receipt_registration']);
}
if (!empty($sourceArray['metadata'])) {
$metadata = new Metadata();
foreach ($sourceArray['metadata'] as $key => $value) {
$metadata->offsetSet($key, $value);
}
$this->setMetadata($metadata);
}
if (!empty($sourceArray['cancellation_details'])) {
$cancellationDetails = $sourceArray['cancellation_details'];
$party = isset($cancellationDetails['party']) ? $cancellationDetails['party'] : null;
$reason = isset($cancellationDetails['reason']) ? $cancellationDetails['reason'] : null;
$this->setCancellationDetails(new CancellationDetails($party, $reason));
}
if (!empty($sourceArray['authorization_details'])) {
$authorizationDetails = $sourceArray['authorization_details'];
$rrn = isset($authorizationDetails['rrn']) ? $authorizationDetails['rrn'] : null;
$authCode = isset($authorizationDetails['auth_code']) ? $authorizationDetails['auth_code'] : null;
$this->setAuthorizationDetails(new AuthorizationDetails($rrn, $authCode));
}
if (!empty($sourceArray['transfers'])) {
$transfers = array();
foreach ($sourceArray['transfers'] as $transferDefinition) {
$transfers[] = new Transfer($transferDefinition);
}
$this->setTransfers($transfers);
}
if (!empty($sourceArray['income_amount'])) {
$this->setIncomeAmount($this->factoryAmount($sourceArray['income_amount']));
}
if (!empty($sourceArray['requestor'])) {
$this->setRequestor($sourceArray['requestor']);
}
}
/**
* Фабричный метод для создания способа оплаты
*
* @param array $options Настройки способа оплаты в массиве
*
* @return AbstractPaymentMethod Инстанс способа оплаты нужного типа
*/
private function factoryPaymentMethod($options)
{
$factory = new PaymentMethodFactory();
return $factory->factoryFromArray($options);
}
/**
* Фабричный метод создания суммы
*
* @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;
}
}
@@ -0,0 +1,586 @@
<?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\Payments;
use YooKassa\Common\AbstractPaymentRequest;
use YooKassa\Common\Exceptions\InvalidPropertyValueException;
use YooKassa\Common\Exceptions\InvalidPropertyValueTypeException;
use YooKassa\Helpers\TypeCast;
use YooKassa\Model\AirlineInterface;
use YooKassa\Model\AmountInterface;
use YooKassa\Model\Payment;
use YooKassa\Model\PaymentData\AbstractPaymentData;
use YooKassa\Model\ConfirmationAttributes\AbstractConfirmationAttributes;
use YooKassa\Model\Metadata;
use YooKassa\Model\ReceiptInterface;
use YooKassa\Model\RecipientInterface;
/**
* Класс объекта запроса к API на проведение нового платежа
*
* @package YooKassa\Request\Payments
*
* @property RecipientInterface $recipient Получатель платежа, если задан
* @property AmountInterface $amount Сумма создаваемого платежа
* @property string $description Описание транзакции
* @property ReceiptInterface $receipt Данные фискального чека 54-ФЗ
* @property string $paymentToken Одноразовый токен для проведения оплаты, сформированный YooKassa JS widget
* @property string $payment_token Одноразовый токен для проведения оплаты, сформированный YooKassa JS widget
* @property string $paymentMethodId Идентификатор записи о сохраненных платежных данных покупателя
* @property string $payment_method_id Идентификатор записи о сохраненных платежных данных покупателя
* @property AbstractPaymentData $paymentMethodData Данные используемые для создания метода оплаты
* @property AbstractPaymentData $payment_method_data Данные используемые для создания метода оплаты
* @property AbstractConfirmationAttributes $confirmation Способ подтверждения платежа
* @property bool $savePaymentMethod Сохранить платежные данные для последующего использования. Значение true
* инициирует создание многоразового payment_method.
* @property bool $save_payment_method Сохранить платежные данные для последующего использования. Значение true
* инициирует создание многоразового payment_method.
* @property bool $capture Автоматически принять поступившую оплату
* @property string $clientIp IPv4 или IPv6-адрес покупателя. Если не указан, используется IP-адрес TCP-подключения.
* @property string $client_ip IPv4 или IPv6-адрес покупателя. Если не указан, используется IP-адрес TCP-подключения.
* @property Metadata $metadata Метаданные привязанные к платежу
*/
class CreatePaymentRequest extends AbstractPaymentRequest implements CreatePaymentRequestInterface
{
const MAX_LENGTH_PAYMENT_TOKEN = 10240;
/**
* @var RecipientInterface Получатель платежа
*/
private $_recipient;
/**
* @var string Описание транзакции
*/
private $_description;
/**
* @var string Одноразовый токен для проведения оплаты, сформированный YooKassa JS widget
*/
private $_paymentToken;
/**
* @var string Идентификатор записи о сохраненных платежных данных покупателя
*/
private $_paymentMethodId;
/**
* @var AbstractPaymentData Данные используемые для создания метода оплаты
*/
private $_paymentMethodData;
/**
* @var AbstractConfirmationAttributes Способ подтверждения платежа
*/
private $_confirmation;
/**
* @var bool Сохранить платежные данные для последующего использования. Значение true инициирует создание многоразового payment_method.
*/
private $_savePaymentMethod;
/**
* @var bool Автоматически принять поступившую оплату
*/
private $_capture;
/**
* @var string IPv4 или IPv6-адрес покупателя. Если не указан, используется IP-адрес TCP-подключения.
*/
private $_clientIp;
/**
* @var AirlineInterface Объект с данными для продажи авиабилетов
*/
private $_airline;
/**
* @var Metadata Метаданные привязанные к платежу
*/
private $_metadata;
/**
* Возвращает объект получателя платежа
* @return RecipientInterface|null Объект с информацией о получателе платежа или null если получатель не задан
*/
public function getRecipient()
{
return $this->_recipient;
}
/**
* Проверяет наличие получателя платежа в запросе
* @return bool True если получатель платежа задан, false если нет
*/
public function hasRecipient()
{
return !empty($this->_recipient);
}
/**
* Возвращает описание транзакции
* @return string
*/
public function getDescription()
{
return $this->_description;
}
/**
* Устанавливает описание транзакции
* @param string $value
*
* @throws InvalidPropertyValueException Выбрасывается если переданное значение превышает допустимую длину
* @throws InvalidPropertyValueTypeException Выбрасывается если переданное значение не является строкой
*/
public function setDescription($value)
{
if ($value === null || $value === '') {
$this->_description = null;
} elseif (TypeCast::canCastToString($value)) {
$length = mb_strlen((string)$value, 'utf-8');
if ($length > Payment::MAX_LENGTH_DESCRIPTION) {
throw new InvalidPropertyValueException(
'Invalid description value', 0, 'CreatePaymentRequest.description', $value
);
}
$this->_description = (string)$value;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid description value type', 0, 'CreatePaymentRequest.description', $value
);
}
}
/**
* Проверяет наличие описания транзакции в создаваемом платеже
* @return bool True если описание транзакции есть, false если нет
*/
public function hasDescription()
{
return $this->_description !== null;
}
/**
* Устанавливает объект с информацией о получателе платежа
* @param RecipientInterface|null $value Инстанс объекта информации о получателе платежа или null
*/
public function setRecipient($value)
{
if ($value === null || $value === '') {
$this->_recipient = null;
} elseif (is_object($value) && $value instanceof RecipientInterface) {
$this->_recipient = $value;
} else {
throw new \InvalidArgumentException('Invalid recipient value type');
}
}
/**
* Возвращает одноразовый токен для проведения оплаты
* @return string Одноразовый токен для проведения оплаты, сформированный YooKassa JS widget
*/
public function getPaymentToken()
{
return $this->_paymentToken;
}
/**
* Проверяет наличие одноразового токена для проведения оплаты
* @return bool True если токен установлен, false если нет
*/
public function hasPaymentToken()
{
return !empty($this->_paymentToken);
}
/**
* Устанавливает одноразовый токен для проведения оплаты, сформированный YooKassa JS widget
* @param string $value Одноразовый токен для проведения оплаты
*
* @throws InvalidPropertyValueException Выбрасывается если переданное значение превышает допустимую длину
* @throws InvalidPropertyValueTypeException Выбрасывается если переданное значение не является строкой
*/
public function setPaymentToken($value)
{
if ($value === null || $value === '') {
$this->_paymentToken = null;
} elseif (TypeCast::canCastToString($value)) {
$length = mb_strlen((string)$value, 'utf-8');
if ($length > self::MAX_LENGTH_PAYMENT_TOKEN) {
throw new InvalidPropertyValueException(
'Invalid paymentToken value', 0, 'CreatePaymentRequest.paymentToken', $value
);
}
$this->_paymentToken = (string)$value;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid paymentToken value type', 0, 'CreatePaymentRequest.paymentToken', $value
);
}
}
/**
* Устанавливает идентификатор закиси платёжных данных покупателя
* @return string Идентификатор записи о сохраненных платежных данных покупателя
*/
public function getPaymentMethodId()
{
return $this->_paymentMethodId;
}
/**
* Проверяет наличие идентификатора записи о платёжных данных покупателя
* @return bool True если идентификатор задан, false если нет
*/
public function hasPaymentMethodId()
{
return !empty($this->_paymentMethodId);
}
/**
* Устанавливает идентификатор записи о сохранённых данных покупателя
* @param string $value Идентификатор записи о сохраненных платежных данных покупателя
*
* @throws InvalidPropertyValueTypeException Генерируется если переданные значение не является строкой или null
*/
public function setPaymentMethodId($value)
{
if ($value === null || $value === '') {
$this->_paymentMethodId = null;
} elseif (TypeCast::canCastToString($value)) {
$this->_paymentMethodId = (string)$value;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid paymentMethodId value type in CreatePaymentRequest',
0,
'CreatePaymentRequest.CreatePaymentRequest',
$value
);
}
}
/**
* Возвращает данные для создания метода оплаты
* @return AbstractPaymentData Данные используемые для создания метода оплаты
*/
public function getPaymentMethodData()
{
return $this->_paymentMethodData;
}
/**
* Проверяет установлен ли объект с методом оплаты
* @return bool True если объект метода оплаты установлен, false если нет
*/
public function hasPaymentMethodData()
{
return !empty($this->_paymentMethodData);
}
/**
* Устанавливает объект с информацией для создания метода оплаты
* @param AbstractPaymentData|null $value Объект с создания метода оплаты или null
*
* @throws InvalidPropertyValueTypeException Выбрасывается если был передан объект невалидного типа
*/
public function setPaymentMethodData($value)
{
if ($value === null || $value === '') {
$this->_paymentMethodData = null;
} elseif (is_object($value) && $value instanceof AbstractPaymentData) {
$this->_paymentMethodData = $value;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid paymentMethodData value type in CreatePaymentRequest',
0,
'CreatePaymentRequest.paymentMethodData',
$value
);
}
}
/**
* Возвращает способ подтверждения платежа
* @return AbstractConfirmationAttributes Способ подтверждения платежа
*/
public function getConfirmation()
{
return $this->_confirmation;
}
/**
* Проверяет был ли установлен способ подтверждения платежа
* @return bool True если способ подтверждения платежа был установлен, false если нет
*/
public function hasConfirmation()
{
return $this->_confirmation !== null;
}
/**
* Устанавливает способ подтверждения платежа
* @param AbstractConfirmationAttributes|null $value Способ подтверждения платежа
*
* @throws InvalidPropertyValueTypeException Выбрасывается если переданное значение не является объектом типа
* AbstractConfirmationAttributes или null
*/
public function setConfirmation($value)
{
if ($value === null || $value === '') {
$this->_confirmation = null;
} elseif (is_object($value) && $value instanceof AbstractConfirmationAttributes) {
$this->_confirmation = $value;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid confirmation value type in CreatePaymentRequest',
0,
'CreatePaymentRequest.confirmation',
$value
);
}
}
/**
* Возвращает флаг сохранения платёжных данных
* @return bool Флаг сохранения платёжных данных
*/
public function getSavePaymentMethod()
{
return $this->_savePaymentMethod;
}
/**
* Проверяет был ли установлен флаг сохранения платёжных данных
* @return bool True если флыг был установлен, false если нет
*/
public function hasSavePaymentMethod()
{
return $this->_savePaymentMethod !== null;
}
/**
* Устанавливает флаг сохранения платёжных данных. Значение true инициирует создание многоразового payment_method.
* @param bool $value Сохранить платежные данные для последующего использования
*
* @throws InvalidPropertyValueTypeException Генерируется если переданный аргумент не кастится в bool
*/
public function setSavePaymentMethod($value)
{
if ($value === null || $value === '') {
$this->_savePaymentMethod = null;
} elseif (TypeCast::canCastToBoolean($value)) {
$this->_savePaymentMethod = (bool)$value;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid savePaymentMethod value type in CreatePaymentRequest',
0,
'CreatePaymentRequest.savePaymentMethod',
$value
);
}
}
/**
* Возвращает флаг автоматического принятия поступившей оплаты
* @return bool True если требуется автоматически принять поступившую оплату, false если нет
*/
public function getCapture()
{
return $this->_capture;
}
/**
* Проверяет был ли установлен флаг автоматического приняти поступившей оплаты
* @return bool True если флаг автоматического принятия оплаты был установлен, false если нет
*/
public function hasCapture()
{
return $this->_capture !== null;
}
/**
* Устанавливает флаг автоматического принятия поступившей оплаты
* @param bool $value Автоматически принять поступившую оплату
*
* @throws InvalidPropertyValueTypeException Генерируется если переданный аргумент не кастится в bool
*/
public function setCapture($value)
{
if ($value === null || $value === '') {
$this->_capture = null;
} elseif (TypeCast::canCastToBoolean($value)) {
$this->_capture = (bool)$value;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid capture value type in CreatePaymentRequest', 0, 'CreatePaymentRequest.capture', $value
);
}
}
/**
* Возвращает IPv4 или IPv6-адрес покупателя
* @return string IPv4 или IPv6-адрес покупателя
*/
public function getClientIp()
{
return $this->_clientIp;
}
/**
* Проверяет был ли установлен IPv4 или IPv6-адрес покупателя
* @return bool True если IP адрес покупателя был установлен, false если нет
*/
public function hasClientIp()
{
return $this->_clientIp !== null;
}
/**
* Устанавливает IP адрес покупателя
* @param string $value IPv4 или IPv6-адрес покупателя
*
* @throws InvalidPropertyValueTypeException Выбрасывается если переданный аргумент не является строкой
*/
public function setClientIp($value)
{
if ($value === null || $value === '') {
$this->_clientIp = null;
} elseif (TypeCast::canCastToString($value)) {
$this->_clientIp = (string)$value;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid clientIp value type in CreatePaymentRequest', 0, 'CreatePaymentRequest.clientIp', $value
);
}
}
/**
* @return AirlineInterface
*/
public function getAirline()
{
return $this->_airline;
}
/**
* @param AirlineInterface $value
*/
public function setAirline(AirlineInterface $value)
{
$this->_airline = $value;
}
/**
* Проверяет были ли установлены данные длинной записи
* @return bool
*/
function hasAirline()
{
return $this->_airline !== null;
}
/**
* Возвращает данные оплаты установленные мерчантом
* @return Metadata Метаданные, привязанные к платежу
*/
public function getMetadata()
{
return $this->_metadata;
}
/**
* Проверяет были ли установлены метаданные заказа
* @return bool True если метаданные были установлены, false если нет
*/
public function hasMetadata()
{
return !empty($this->_metadata) && $this->_metadata->count() > 0;
}
/**
* Устанавливает метаданные, привязанные к платежу
* @param Metadata|array|null $value Метаданные платежа, устанавливаемые мерчантом
*
* @throws InvalidPropertyValueTypeException Выбрасывается если переданные данные не удалось интерпретировать как
* метаданные платежа
*/
public function setMetadata($value)
{
if ($value === null || (is_array($value) && empty($value))) {
$this->_metadata = null;
} elseif (is_object($value) && $value instanceof Metadata) {
$this->_metadata = $value;
} elseif (is_array($value)) {
$this->_metadata = new Metadata();
foreach ($value as $key => $val) {
$this->_metadata->offsetSet($key, (string)$val);
}
} else {
throw new InvalidPropertyValueTypeException(
'Invalid metadata value type in CreatePaymentRequest', 0, 'CreatePaymentRequest.metadata', $value
);
}
}
/**
* Проверяет на валидность текущий объект
* @return bool True если объект запроса валиден, false если нет
*/
public function validate()
{
if (!parent::validate()) {
return false;
}
if ($this->hasPaymentToken()) {
if ($this->hasPaymentMethodId()) {
$this->setValidationError('Both paymentToken and paymentMethodID values are specified');
return false;
}
if ($this->hasPaymentMethodData()) {
$this->setValidationError('Both paymentToken and paymentData values are specified');
return false;
}
} elseif ($this->hasPaymentMethodId()) {
if ($this->hasPaymentMethodData()) {
$this->setValidationError('Both paymentMethodID and paymentData values are specified');
return false;
}
}
return true;
}
/**
* Возвращает билдер объектов запросов создания платежа
* @return CreatePaymentRequestBuilder Инстанс билдера объектов запрсов
*/
public static function builder()
{
return new CreatePaymentRequestBuilder();
}
}
@@ -0,0 +1,351 @@
<?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\Payments;
use YooKassa\Common\AbstractPaymentRequestBuilder;
use YooKassa\Common\Exceptions\EmptyPropertyValueException;
use YooKassa\Common\Exceptions\InvalidPropertyValueException;
use YooKassa\Common\Exceptions\InvalidPropertyValueTypeException;
use YooKassa\Common\Exceptions\InvalidRequestException;
use YooKassa\Model\Airline;
use YooKassa\Model\AirlineInterface;
use YooKassa\Model\ConfirmationAttributes\AbstractConfirmationAttributes;
use YooKassa\Model\ConfirmationAttributes\ConfirmationAttributesFactory;
use YooKassa\Model\Metadata;
use YooKassa\Model\PaymentData\AbstractPaymentData;
use YooKassa\Model\PaymentData\PaymentDataFactory;
use YooKassa\Model\Recipient;
use YooKassa\Model\RecipientInterface;
/**
* Класс билдера объектов запрсов к API на создание платежа
*
* @package YooKassa\Request\Payments
*/
class CreatePaymentRequestBuilder extends AbstractPaymentRequestBuilder
{
/**
* @var CreatePaymentRequest Собираемый объект запроса
*/
protected $currentObject;
/**
* @var Recipient Получатель платежа
*/
private $recipient;
/**
* @var PaymentDataFactory Фабрика методов проведения платежей
*/
private $paymentDataFactory;
/**
* @var ConfirmationAttributesFactory Фабрика объектов методов подтверждения платежей
*/
private $confirmationFactory;
/**
* @var Airline Длинная запись
*/
private $airline;
/**
* Инициализирует объект запроса, который в дальнейшем будет собираться билдером
* @return CreatePaymentRequest Инстанс собираемого объекта запроса к API
*/
protected function initCurrentObject()
{
parent::initCurrentObject();
$request = new CreatePaymentRequest();
$this->recipient = new Recipient();
$this->airline = new Airline();
return $request;
}
/**
* Устанавливает идентификатор магазина получателя платежа
* @param string $value Идентификатор магазина
* @return CreatePaymentRequestBuilder Инстанс текущего билдера
*
* @throws EmptyPropertyValueException Выбрасывается если было передано пустое значение
* @throws InvalidPropertyValueTypeException Выбрасывается если было передано не строковое значение
*/
public function setAccountId($value)
{
$this->recipient->setAccountId($value);
return $this;
}
/**
* Устанавливает идентификатор шлюза
* @param string $value Идентификатор шлюза
* @return CreatePaymentRequestBuilder Инстанс текущего билдера
*
* @throws EmptyPropertyValueException Выбрасывается если было передано пустое значение
* @throws InvalidPropertyValueTypeException Выбрасывается если было передано не строковое значение
*/
public function setGatewayId($value)
{
$this->recipient->setGatewayId($value);
return $this;
}
/**
* Устанавливает получателя платежа из объекта или ассоциативного массива
* @param RecipientInterface|array $value Получатель платежа
* @return CreatePaymentRequestBuilder
* @throws InvalidPropertyValueTypeException Выбрасывается если передан аргумент не валидного типа
*/
public function setRecipient($value)
{
if (is_array($value)) {
$this->recipient->fromArray($value);
} elseif ($value instanceof RecipientInterface) {
$this->recipient->setAccountId($value->getAccountId());
$this->recipient->setGatewayId($value->getGatewayId());
} else {
throw new InvalidPropertyValueTypeException('Invalid recipient value', 0, 'recipient', $value);
}
return $this;
}
/**
* @param AirlineInterface|array $value объект данных длинной записи или ассоциативный массив с данными
*
* @return CreatePaymentRequestBuilder
*/
public function setAirline($value)
{
if (is_array($value)) {
$this->airline->fromArray($value);
} elseif ($value instanceof AirlineInterface) {
$this->airline = clone $value;
} else {
throw new InvalidPropertyValueTypeException('Invalid receipt value type', 0, 'receipt', $value);
}
return $this;
}
/**
* Устанавливает одноразовый токен для проведения оплаты
* @param string $value Одноразовый токен для проведения оплаты
* @return CreatePaymentRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueException Выбрасывается если переданное значение превышает допустимую длину
* @throws InvalidPropertyValueTypeException Выбрасывается если переданное значение не является строкой
*/
public function setPaymentToken($value)
{
$this->currentObject->setPaymentToken($value);
return $this;
}
/**
* Устанавливает идентификатор записи о сохранённых данных покупателя
* @param string $value Идентификатор записи о сохраненных платежных данных покупателя
* @return CreatePaymentRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueTypeException Генерируется если переданные значение не является строкой или null
*/
public function setPaymentMethodId($value)
{
$this->currentObject->setPaymentMethodId($value);
return $this;
}
/**
* Устанавливает объект с информацией для создания метода оплаты
* @param AbstractPaymentData|string|array|null $value Объект с создания метода оплаты или null
* @param array $options Настройки способа оплаты в виде ассоциативного массива
* @return CreatePaymentRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueTypeException Выбрасывается если был передан объект невалидного типа
*/
public function setPaymentMethodData($value, array $options = null)
{
if (is_string($value) && $value !== '') {
if (empty($options)) {
$value = $this->getPaymentDataFactory()->factory($value);
} else {
$value = $this->getPaymentDataFactory()->factoryFromArray($options, $value);
}
} elseif (is_array($value)) {
$value = $this->getPaymentDataFactory()->factoryFromArray($value);
}
$this->currentObject->setPaymentMethodData($value);
return $this;
}
/**
* Устанавливает способ подтверждения платежа
* @param AbstractConfirmationAttributes|string|array|null $value Способ подтверждения платежа
* @param array|null $options Настройки способа подтверждения платежа в виде массива
* @return CreatePaymentRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueTypeException Выбрасывается если переданное значение не является объектом типа
* AbstractConfirmationAttributes или null
*/
public function setConfirmation($value, array $options = null)
{
if (is_string($value) && $value !== '') {
if (empty($options)) {
$value = $this->getConfirmationFactory()->factory($value);
} else {
$value = $this->getConfirmationFactory()->factoryFromArray($options, $value);
}
} elseif (is_array($value)) {
$value = $this->getConfirmationFactory()->factoryFromArray($value);
}
$this->currentObject->setConfirmation($value);
return $this;
}
/**
* Устанавливает флаг сохранения платёжных данных. Значение true инициирует создание многоразового payment_method.
* @param bool $value Сохранить платежные данные для последующего использования
* @return CreatePaymentRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueTypeException Генерируется если переданный аргумент не кастится в bool
*/
public function setSavePaymentMethod($value)
{
$this->currentObject->setSavePaymentMethod($value);
return $this;
}
/**
* Устанавливает флаг автоматического принятия поступившей оплаты
* @param bool $value Автоматически принять поступившую оплату
* @return CreatePaymentRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueTypeException Генерируется если переданный аргумент не кастится в bool
*/
public function setCapture($value)
{
$this->currentObject->setCapture($value);
return $this;
}
/**
* Устанавливает IP адрес покупателя
* @param string $value IPv4 или IPv6-адрес покупателя
* @return CreatePaymentRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueTypeException Выбрасывается если переданный аргумент не является строкой
*/
public function setClientIp($value)
{
$this->currentObject->setClientIp($value);
return $this;
}
/**
* Устанавливает метаданные, привязанные к платежу
* @param Metadata|array|null $value Метаданные платежа, устанавливаемые мерчантом
* @return CreatePaymentRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueTypeException Выбрасывается если переданные данные не удалось интерпретировать как
* метаданные платежа
*/
public function setMetadata($value)
{
$this->currentObject->setMetadata($value);
return $this;
}
/**
* Устанавливает описание транзакции
* @param string $value Описание транзакции
* @return CreatePaymentRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueException Выбрасывается если переданное значение превышает допустимую длину
* @throws InvalidPropertyValueTypeException Выбрасывается если переданное значение не является строкой
*/
public function setDescription($value)
{
$this->currentObject->setDescription($value);
return $this;
}
/**
* Строит и возвращает объект запроса для отправки в API ЮKassa
* @param array|null $options Массив параметров для установки в объект запроса
* @return CreatePaymentRequestInterface Инстанс объекта запроса
*
* @throws InvalidRequestException Выбрасывается если собрать объект запроса не удалось
*/
public function build(array $options = null)
{
if (!empty($options)) {
$this->setOptions($options);
}
$gatewayId = $this->recipient->getGatewayId();
if (!empty($gatewayId)) {
$this->currentObject->setRecipient($this->recipient);
}
if ($this->receipt->notEmpty()) {
$this->currentObject->setReceipt($this->receipt);
}
if($this->airline->notEmpty()){
$this->currentObject->setAirline($this->airline);
}
$this->currentObject->setAmount($this->amount);
$this->currentObject->setTransfers($this->transfers);
return parent::build();
}
/**
* Возвращает фабрику методов проведения платежей
* @return PaymentDataFactory Фабрика методов проведения платежей
*/
protected function getPaymentDataFactory()
{
if ($this->paymentDataFactory === null) {
$this->paymentDataFactory = new PaymentDataFactory();
}
return $this->paymentDataFactory;
}
/**
* Возвращает фабрику для создания методов подтверждения платежей
* @return ConfirmationAttributesFactory Фабрика объектов методов подтверждения платежей
*/
protected function getConfirmationFactory()
{
if ($this->confirmationFactory === null) {
$this->confirmationFactory = new ConfirmationAttributesFactory();
}
return $this->confirmationFactory;
}
}
@@ -0,0 +1,223 @@
<?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\Payments;
use YooKassa\Model\Airline;
use YooKassa\Model\AmountInterface;
use YooKassa\Model\ConfirmationAttributes\AbstractConfirmationAttributes;
use YooKassa\Model\Metadata;
use YooKassa\Model\PaymentData\AbstractPaymentData;
use YooKassa\Model\ReceiptInterface;
use YooKassa\Model\RecipientInterface;
use YooKassa\Model\TransferInterface;
/**
* Interface CreatePaymentRequestInterface
*
* @package YooKassa\Request\Payments
*
* @property-read RecipientInterface|null $recipient Получатель платежа, если задан
* @property-read AmountInterface $amount Сумма создаваемого платежа
* @property-read ReceiptInterface $receipt Данные фискального чека 54-ФЗ
* @property-read string $paymentToken Одноразовый токен для проведения оплаты, сформированный YooKassa JS widget
* @property-read string $payment_token Одноразовый токен для проведения оплаты, сформированный YooKassa JS widget
* @property-read string $paymentMethodId Идентификатор записи о сохраненных платежных данных покупателя
* @property-read string $payment_method_id Идентификатор записи о сохраненных платежных данных покупателя
* @property-read AbstractPaymentData $paymentMethodData Данные используемые для создания метода оплаты
* @property-read AbstractPaymentData $payment_method_data Данные используемые для создания метода оплаты
* @property-read AbstractConfirmationAttributes $confirmation Способ подтверждения платежа
* @property-read bool $savePaymentMethod Сохранить платежные данные для последующего использования
* @property-read bool $save_payment_method Сохранить платежные данные для последующего использования
* @property-read bool $capture Автоматически принять поступившую оплату
* @property-read string $clientIp IPv4 или IPv6-адрес покупателя. Если не указан, используется IP-адрес
* TCP-подключения.
* @property-read string $client_ip IPv4 или IPv6-адрес покупателя. Если не указан, используется IP-адрес
* TCP-подключения.
* @property-read Metadata $metadata Метаданные привязанные к платежу
*/
interface CreatePaymentRequestInterface
{
/**
* Возвращает объект получателя платежа
* @return RecipientInterface|null Объект с информацией о получателе платежа или null если получатель не задан
*/
function getRecipient();
/**
* Проверяет наличие получателя платежа в запросе
* @return bool True если получатель платежа задан, false если нет
*/
function hasRecipient();
/**
* Возвращает сумму заказа
* @return AmountInterface Сумма заказа
*/
function getAmount();
/**
* Возвращает описание транзакции
* @return string Описание транзакции
*/
function getDescription();
/**
* Проверяет наличие описания транзакции в создаваемом платеже
* @return bool True если описание транзакции установлено, false если нет
*/
function hasDescription();
/**
* Возвращает чек, если он есть
* @return ReceiptInterface|null Данные фискального чека 54-ФЗ или null если чека нет
*/
function getReceipt();
/**
* Проверяет наличие чека в создаваемом платеже
* @return bool True если чек есть, false если нет
*/
function hasReceipt();
/**
* Возвращает одноразовый токен для проведения оплаты
* @return string Одноразовый токен для проведения оплаты, сформированный YooKassa JS widget
*/
function getPaymentToken();
/**
* Проверяет наличие одноразового токена для проведения оплаты
* @return bool True если токен установлен, false если нет
*/
function hasPaymentToken();
/**
* Устанавливает идентификатор закиси платёжных данных покупателя
* @return string Идентификатор записи о сохраненных платежных данных покупателя
*/
function getPaymentMethodId();
/**
* Проверяет наличие идентификатора записи о платёжных данных покупателя
* @return bool True если идентификатор задан, false если нет
*/
function hasPaymentMethodId();
/**
* Возвращает данные для создания метода оплаты
* @return AbstractPaymentData Данные используемые для создания метода оплаты
*/
function getPaymentMethodData();
/**
* Проверяет установлен ли объект с методом оплаты
* @return bool True если объект метода оплаты установлен, false если нет
*/
function hasPaymentMethodData();
/**
* Возвращает способ подтверждения платежа
* @return AbstractConfirmationAttributes Способ подтверждения платежа
*/
function getConfirmation();
/**
* Проверяет был ли установлен способ подтверждения платежа
* @return bool True если способ подтверждения платежа был установлен, false если нет
*/
function hasConfirmation();
/**
* Возвращает флаг сохранения платёжных данных
* @return bool Флаг сохранения платёжных данных
*/
function getSavePaymentMethod();
/**
* Проверяет был ли установлен флаг сохранения платёжных данных
* @return bool True если флыг был установлен, false если нет
*/
function hasSavePaymentMethod();
/**
* Возвращает флаг автоматического принятия поступившей оплаты
* @return bool True если требуется автоматически принять поступившую оплату, false если нет
*/
function getCapture();
/**
* Проверяет был ли установлен флаг автоматического приняти поступившей оплаты
* @return bool True если флаг автоматического принятия оплаты был установлен, false если нет
*/
function hasCapture();
/**
* Возвращает IPv4 или IPv6-адрес покупателя
* @return string IPv4 или IPv6-адрес покупателя
*/
function getClientIp();
/**
* Проверяет был ли установлен IPv4 или IPv6-адрес покупателя
* @return bool True если IP адрес покупателя был установлен, false если нет
*/
function hasClientIp();
/**
* Возвращает данные оплаты установленные мерчантом
* @return Metadata Метаданные привязанные к платежу
*/
function getMetadata();
/**
* Проверяет были ли установлены метаданные заказа
* @return bool True если метаданные были установлены, false если нет
*/
function hasMetadata();
/**
* Проверяет были ли установлены данные длинной записи
* @return bool
*/
function hasAirline();
/**
* Возвращает данные длинной записи
* @return Airline
*/
function getAirline();
/**
* @return bool
*/
function hasTransfers();
/**
* @return TransferInterface[]
*/
function getTransfers();
}
@@ -0,0 +1,357 @@
<?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\Payments;
use YooKassa\Model\AmountInterface;
use YooKassa\Model\ConfirmationAttributes\AbstractConfirmationAttributes;
use YooKassa\Model\ConfirmationAttributes\ConfirmationAttributesRedirect;
use YooKassa\Model\ConfirmationType;
use YooKassa\Model\LegInterface;
use YooKassa\Model\PassengerInterface;
use YooKassa\Model\PaymentData\AbstractPaymentData;
use YooKassa\Model\PaymentData\PaymentDataAlfabank;
use YooKassa\Model\PaymentData\PaymentDataB2bSberbank;
use YooKassa\Model\PaymentData\PaymentDataBankCard;
use YooKassa\Model\PaymentData\PaymentDataGooglePay;
use YooKassa\Model\PaymentData\PaymentDataSberbank;
use YooKassa\Model\PaymentData\PaymentDataYooMoney;
use YooKassa\Model\PaymentMethodType;
use YooKassa\Model\ReceiptInterface;
use YooKassa\Model\ReceiptItem;
use YooKassa\Model\TransferInterface;
/**
* Класс сериалайзера объекта запроса к API на проведение платежа
*
* @package YooKassa\Request\Payments
*/
class CreatePaymentRequestSerializer
{
private static $propertyMap = array(
'reference_id' => 'referenceId',
'payment_token' => 'paymentToken',
'payment_method_id' => 'paymentMethodId',
'client_ip' => 'clientIp',
);
private static $paymentDataSerializerMap = array(
PaymentMethodType::BANK_CARD => 'serializePaymentDataBankCard',
PaymentMethodType::YOO_MONEY => 'serializePaymentDataYooMoney',
PaymentMethodType::APPLE_PAY => 'serializePaymentDataMobile',
PaymentMethodType::GOOGLE_PAY => 'serializePaymentDataGooglePay',
PaymentMethodType::SBERBANK => 'serializePaymentDataSberbank',
PaymentMethodType::ALFABANK => 'serializePaymentDataAlfabank',
PaymentMethodType::WEBMONEY => 'serializePaymentData',
PaymentMethodType::QIWI => 'serializePaymentDataMobilePhone',
PaymentMethodType::CASH => 'serializePaymentDataMobilePhone',
PaymentMethodType::MOBILE_BALANCE => 'serializePaymentDataMobilePhone',
PaymentMethodType::INSTALLMENTS => 'serializePaymentData',
PaymentMethodType::B2B_SBERBANK => 'serializePaymentDataB2BSberbank',
PaymentMethodType::TINKOFF_BANK => 'serializePaymentData',
PaymentMethodType::WECHAT => 'serializePaymentData',
);
public function serialize(CreatePaymentRequestInterface $request)
{
$result = array();
if ($request->getAmount()->getValue() > 0) {
$result['amount'] = $this->serializeAmount($request->getAmount());
}
if ($request->hasTransfers()) {
$result['transfers'] = $this->serializeTransfers($request->getTransfers());
}
if ($request->hasDescription()) {
$result['description'] = $request->getDescription();
}
if ($request->hasReceipt()) {
$receipt = $request->getReceipt();
if ($receipt->notEmpty()) {
$result['receipt'] = $this->serializeReceipt($receipt);
}
}
if ($request->hasRecipient()) {
$result['recipient']['account_id'] = $request->getRecipient()->getAccountId();
$result['recipient']['gateway_id'] = $request->getRecipient()->getGatewayId();
}
if ($request->hasPaymentMethodData()) {
$method = self::$paymentDataSerializerMap[$request->getPaymentMethodData()->getType()];
$result['payment_method_data'] = $this->{$method}($request->getPaymentMethodData());
}
if ($request->hasConfirmation()) {
$confirmation = $request->getConfirmation();
$result['confirmation'] = $this->serializeConfirmation($confirmation);
}
if ($request->hasMetadata()) {
$result['metadata'] = $request->getMetadata()->toArray();
}
if ($request->hasCapture()) {
$result['capture'] = $request->getCapture();
}
if ($request->hasSavePaymentMethod()) {
$result['save_payment_method'] = $request->getSavePaymentMethod();
}
if ($request->hasAirline()) {
$airline = $request->getAirline();
$result['airline'] = array();
$ticketNumber = $airline->getTicketNumber();
if (!empty($ticketNumber)) {
$result['airline']['ticket_number'] = $ticketNumber;
}
$bookingReference = $airline->getBookingReference();
if (!empty($bookingReference)) {
$result['airline']['booking_reference'] = $bookingReference;
}
foreach ($airline->getPassengers() as $passenger) {
$result['airline']['passengers'][] = array(
'first_name' => $passenger->getFirstName(),
'last_name' => $passenger->getLastName(),
);
}
foreach ($airline->getLegs() as $leg) {
$result['airline']['legs'][] = array(
'departure_airport' => $leg->getDepartureAirport(),
'destination_airport' => $leg->getDestinationAirport(),
'departure_date' => $leg->getDepartureDate(),
);
}
}
foreach (self::$propertyMap as $name => $property) {
$value = $request->{$property};
if (!empty($value)) {
$result[$name] = $value;
}
}
return $result;
}
private function serializeConfirmation(AbstractConfirmationAttributes $confirmation)
{
$result = array(
'type' => $confirmation->getType(),
);
if ($locale = $confirmation->getLocale()) {
$result['locale'] = $locale;
}
if ($confirmation->getType() === ConfirmationType::REDIRECT) {
/** @var ConfirmationAttributesRedirect $confirmation */
if ($confirmation->getEnforce()) {
$result['enforce'] = $confirmation->getEnforce();
}
$result['return_url'] = $confirmation->getReturnUrl();
}
return $result;
}
private function serializeReceipt(ReceiptInterface $receipt)
{
$result = array();
/** @var ReceiptItem $item */
foreach ($receipt->getItems() as $item) {
$result['items'][] = $item->jsonSerialize();
}
$customer = $receipt->getCustomer();
if (!empty($customer)) {
$result['customer'] = $customer->jsonSerialize();
}
$value = $receipt->getTaxSystemCode();
if (!empty($value)) {
$result['tax_system_code'] = $value;
}
return $result;
}
private function serializeAmount(AmountInterface $amount)
{
return array(
'value' => $amount->getValue(),
'currency' => $amount->getCurrency(),
);
}
private function serializePaymentDataBankCard(PaymentDataBankCard $paymentData)
{
$result = array(
'type' => $paymentData->getType(),
);
if ($paymentData->getCard() !== null) {
$result['card'] = array(
'cardholder' => $paymentData->getCard()->getCardholder(),
'expiry_year' => $paymentData->getCard()->getExpiryYear(),
'expiry_month' => $paymentData->getCard()->getExpiryMonth(),
'number' => $paymentData->getCard()->getNumber(),
'csc' => $paymentData->getCard()->getCsc(),
);
}
return $result;
}
private function serializePaymentDataYooMoney(PaymentDataYooMoney $paymentData)
{
$result = array(
'type' => $paymentData->getType(),
);
return $result;
}
private function serializePaymentDataMobile(AbstractPaymentData $paymentData)
{
$result = array(
'type' => $paymentData->getType(),
);
if ($paymentData->getPaymentData() !== null) {
$result['payment_data'] = $paymentData->getPaymentData();
}
return $result;
}
private function serializePaymentDataSberbank(PaymentDataSberbank $paymentData)
{
$result = array(
'type' => $paymentData->getType(),
);
if ($paymentData->getPhone() !== null) {
$result['phone'] = $paymentData->getPhone();
}
return $result;
}
private function serializePaymentDataAlfabank(PaymentDataAlfabank $paymentData)
{
$result = array(
'type' => $paymentData->getType(),
);
if ($paymentData->getLogin() !== null) {
$result['login'] = $paymentData->getLogin();
}
return $result;
}
private function serializePaymentData(AbstractPaymentData $paymentData)
{
return array(
'type' => $paymentData->getType(),
);
}
private function serializePaymentDataMobilePhone(AbstractPaymentData $paymentData)
{
$result = array(
'type' => $paymentData->getType(),
);
if ($paymentData->getPhone() !== null) {
$result['phone'] = $paymentData->getPhone();
}
return $result;
}
/**
* @param PaymentDataGooglePay $paymentData
*
* @return array
*/
private function serializePaymentDataGooglePay(PaymentDataGooglePay $paymentData)
{
$result = array(
'type' => $paymentData->getType(),
'payment_method_token' => $paymentData->getPaymentMethodToken(),
'google_transaction_id' => $paymentData->getGoogleTransactionId(),
);
return $result;
}
/**
* @param PaymentDataB2bSberbank $paymentData
*
* @return array
*/
private function serializePaymentDataB2BSberbank(PaymentDataB2bSberbank $paymentData)
{
$result = array(
'type' => $paymentData->getType(),
);
if ($paymentData->getPaymentPurpose() !== null) {
$result['payment_purpose'] = $paymentData->getPaymentPurpose();
}
if ($paymentData->getVatData() !== null) {
$vatData = array(
'type' => $paymentData->getVatData()->getType(),
);
if ($paymentData->getVatData()->getRate() !== null) {
$vatData['rate'] = $paymentData->getVatData()->getRate();
}
if ($paymentData->getVatData()->getAmount() !== null) {
$vatData['amount'] = $this->serializeAmount($paymentData->getVatData()->getAmount());
}
$result['vat_data'] = $vatData;
}
return $result;
}
/**
* @param TransferInterface[] $transfers
*
* @return array
*/
private function serializeTransfers(array $transfers)
{
$result = array();
foreach ($transfers as $transfer) {
$result[] = array(
'account_id' => $transfer->getAccountId(),
'amount' => $this->serializeAmount($transfer->getAmount())
);
}
return $result;
}
}
@@ -0,0 +1,35 @@
<?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\Payments;
/**
* Класс объекта ответа возвращаемого API при запросе на создание платежа
*
* @package YooKassa\Request\Payments
*/
class CreatePaymentResponse extends AbstractPaymentResponse
{}
@@ -0,0 +1,37 @@
<?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\Payments\Payment;
use YooKassa\Request\Payments\AbstractPaymentResponse;
/**
* Класс объекта ответа от API на запрос отмены платежа
*
* @package YooKassa\Request\Payments\Payment
*/
class CancelResponse extends AbstractPaymentResponse
{}
@@ -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\Payments\Payment;
use YooKassa\Common\AbstractPaymentRequest;
use YooKassa\Model\AmountInterface;
use YooKassa\Model\ReceiptInterface;
/**
* Класс объекта запроса к API на подтверждение оплаты
*
* @property AmountInterface $amount Подтверждаемая сумма оплаты
* @property ReceiptInterface $receipt Данные фискального чека 54-ФЗ
*/
class CreateCaptureRequest extends AbstractPaymentRequest implements CreateCaptureRequestInterface
{
/**
* Валидирует объект запроса
* @return bool True если запрос валиден и его можно отправить в API, false если нет
*/
public function validate()
{
if ($this->_amount !== null) {
$value = $this->_amount->getValue();
if (empty($value) || $value <= 0.0) {
$this->setValidationError('Invalid amount value: ' . $value);
return false;
}
}
if ($this->getReceipt() && $this->getReceipt()->notEmpty()) {
$email = $this->getReceipt()->getCustomer()->getEmail();
$phone = $this->getReceipt()->getCustomer()->getPhone();
if (empty($email) && empty($phone)) {
$this->setValidationError('Both email and phone values are empty in receipt');
return false;
}
}
return true;
}
/**
* Возвращает билдер объектов запросов на подтверждение оплаты
* @return CreateCaptureRequestBuilder Инстанс билдера
*/
public static function builder()
{
return new CreateCaptureRequestBuilder();
}
}
@@ -0,0 +1,75 @@
<?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\Payments\Payment;
use YooKassa\Common\AbstractPaymentRequestBuilder;
use YooKassa\Common\Exceptions\InvalidPropertyException;
use YooKassa\Common\Exceptions\InvalidRequestException;
class CreateCaptureRequestBuilder extends AbstractPaymentRequestBuilder
{
/**
* @var CreateCaptureRequest
*/
protected $currentObject;
/**
* @return CreateCaptureRequest
*/
protected function initCurrentObject()
{
parent::initCurrentObject();
return new CreateCaptureRequest();
}
/**
* Осуществляет сборку объекта запроса к API
* @param array|null $options Массив дополнительных настроек объекта
* @return CreateCaptureRequestInterface Иснатс объекта запроса к API
*
* @throws InvalidRequestException Выбрасывается если при валидации запроса произошла ошибка
* @throws InvalidPropertyException Выбрасывается если не удалось установить один из параметров, переданных в
* массиве настроек
*/
public function build(array $options = null)
{
if (!empty($options)) {
$this->setOptions($options);
}
if (!empty($this->transfers)) {
$this->currentObject->setTransfers($this->transfers);
}
if ($this->amount->getValue() > 0) {
$this->currentObject->setAmount($this->amount);
}
if ($this->receipt->notEmpty()) {
$this->currentObject->setReceipt($this->receipt);
}
return parent::build();
}
}
@@ -0,0 +1,79 @@
<?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\Payments\Payment;
use YooKassa\Model\AmountInterface;
use YooKassa\Model\MonetaryAmount;
use YooKassa\Model\ReceiptInterface;
use YooKassa\Model\TransferInterface;
/**
* Interface CreateCaptureRequestInterface
*
* @package YooKassa\Request\Payments\Payment
*
* @property-read MonetaryAmount $amount Подтверждаемая сумма оплаты
* @property-read ReceiptInterface $receipt Данные фискального чека 54-ФЗ
*/
interface CreateCaptureRequestInterface
{
/**
* Возвращает подтвердаемую сумму оплаты
* @return AmountInterface Подтверждаемая сумма оплаты
*/
function getAmount();
/**
* Проверяет была ли установлена сумма оплаты
* @return bool True если сумма оплаты была установлена, false если нет
*/
function hasAmount();
/**
* Возвращает чек, если он есть
* @return ReceiptInterface|null Данные фискального чека 54-ФЗ или null если чека нет
* @since 1.0.2
*/
function getReceipt();
/**
* Проверяет наличие чека в создаваемом платеже
* @return bool True если чек есть, false если нет
* @since 1.0.2
*/
function hasReceipt();
/**
* @return bool
*/
function hasTransfers();
/**
* @return TransferInterface[]
*/
function getTransfers();
}
@@ -0,0 +1,155 @@
<?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\Payments\Payment;
use YooKassa\Model\AmountInterface;
use YooKassa\Model\ReceiptItem;
use YooKassa\Model\TransferInterface;
/**
* Класс объекта осуществляющего сериализацию запроса к API на подтверждение заказа
*
* @package YooKassa\Request\Payments\Payment
*/
class CreateCaptureRequestSerializer
{
/**
* Сериализует объект запроса к API на подтверждение заказа в ассоциативный массив
*
* @param CreateCaptureRequestInterface $request Сериализуемый объект запроса
*
* @return array Ассоциативный массив содержащий информацию для отправки в API
*/
public function serialize(CreateCaptureRequestInterface $request)
{
$result = array();
if ($request->hasAmount()) {
$result['amount'] = $this->serializeAmount($request->getAmount());
}
if ($request->hasTransfers()) {
$result['transfers'] = $this->serializeTransfers($request->getTransfers());
}
if ($request->hasReceipt()) {
$receipt = $request->getReceipt();
if ($receipt->notEmpty()) {
$result['receipt'] = array();
/** @var ReceiptItem $item */
foreach ($receipt->getItems() as $item) {
$itemArray = array(
'description' => $item->getDescription(),
'amount' => array(
'value' => $item->getPrice()->getValue(),
'currency' => $item->getPrice()->getCurrency(),
),
'quantity' => $item->getQuantity(),
'vat_code' => $item->getVatCode(),
);
if ($value = $item->getPaymentSubject()) {
$itemArray['payment_subject'] = $value;
}
if ($value = $item->getPaymentMode()) {
$itemArray['payment_mode'] = $value;
}
if ($value = $item->getProductCode()) {
$itemArray['product_code'] = $value;
}
if ($value = $item->getCountryOfOriginCode()) {
$itemArray['country_of_origin_code'] = $value;
}
if ($value = $item->getCustomsDeclarationNumber()) {
$itemArray['customs_declaration_number'] = $value;
}
if ($value = $item->getExcise()) {
$itemArray['excise'] = $value;
}
$result['receipt']['items'][] = $itemArray;
}
if ($customer = $receipt->getCustomer()) {
$customerArray = array();
if ($value = $customer->getEmail()) {
$customerArray['email'] = $value;
}
if ($value = $customer->getPhone()) {
$customerArray['phone'] = $value;
}
if ($value = $customer->getFullName()) {
$customerArray['full_name'] = $value;
}
if ($value = $customer->getInn()) {
$customerArray['inn'] = $value;
}
$result['receipt']['customer'] = $customerArray;
}
if ($value = $receipt->getTaxSystemCode()) {
$result['receipt']['tax_system_code'] = $value;
}
}
}
return $result;
}
private function serializeAmount(AmountInterface $amount)
{
return array(
'value' => $amount->getValue(),
'currency' => $amount->getCurrency(),
);
}
/**
* @param TransferInterface[] $transfers
*
* @return array
*/
private function serializeTransfers(array $transfers)
{
$result = array();
foreach ($transfers as $transfer) {
$result[] = array(
'account_id' => $transfer->getAccountId(),
'amount' => $this->serializeAmount($transfer->getAmount())
);
}
return $result;
}
}
@@ -0,0 +1,37 @@
<?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\Payments\Payment;
use YooKassa\Request\Payments\AbstractPaymentResponse;
/**
* Класс объекта ответа от API на запрос подтверждения платежа
*
* @package YooKassa\Request\Payments\Payment
*/
class CreateCaptureResponse extends AbstractPaymentResponse
{}
@@ -0,0 +1,35 @@
<?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\Payments;
/**
* Класс объекта ответа, возвращаемого API при запросе конкретного платежа
*
* @package YooKassa\Request\Payments
*/
class PaymentResponse extends AbstractPaymentResponse
{}
@@ -0,0 +1,669 @@
<?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\Payments;
use Exception;
use YooKassa\Common\AbstractRequest;
use YooKassa\Common\Exceptions\InvalidPropertyValueException;
use YooKassa\Common\Exceptions\InvalidPropertyValueTypeException;
use YooKassa\Helpers\TypeCast;
use YooKassa\Model\PaymentMethodType;
use YooKassa\Model\PaymentStatus;
/**
* Класс объекта запроса к API для получения списка платежей магазина
*
* @property \DateTime|null $createdAtGte Время создания, от (включительно)
* @property \DateTime|null $createdAtGt Время создания, от (не включая)
* @property \DateTime|null $createdAtLte Время создания, до (включительно)
* @property \DateTime|null $createdAtLt Время создания, до (не включая)
* @property \DateTime|null $capturedAtGte Время подтверждения, от (включительно)
* @property \DateTime|null $capturedAtGt Время подтверждения, от (не включая)
* @property \DateTime|null $capturedAtLte Время подтверждения, до (включительно)
* @property \DateTime|null $capturedAtLt Время подтверждения, до (не включая)
* @property string|null $status Статус платежа
* @property string|null $paymentMethod Платежный метод
* @property integer|null $limit Ограничение количества объектов платежа, отображаемых на одной странице выдачи
* @property string|null $cursor Страница выдачи результатов, которую необходимо отобразить
*/
class PaymentsRequest extends AbstractRequest implements PaymentsRequestInterface
{
const MAX_LIMIT_VALUE = 100;
/**
* @var \DateTime Время создания, от (включительно)
*/
private $_createdAtGte;
/**
* @var \DateTime Время создания, от (не включая)
*/
private $_createdAtGt;
/**
* @var \DateTime Время создания, до (включительно)
*/
private $_createdAtLte;
/**
* @var \DateTime Время создания, до (не включая)
*/
private $_createdAtLt;
/**
* @var \DateTime Время подтверждения, от (включительно)
*/
private $_capturedAtGte;
/**
* @var \DateTime Время подтверждения, от (не включая)
*/
private $_capturedAtGt;
/**
* @var \DateTime Время подтверждения, до (включительно)
*/
private $_capturedAtLte;
/**
* @var \DateTime Время подтверждения, до (не включая)
*/
private $_capturedAtLt;
/**
* @var string Статус платежа
*/
private $_status;
/**
* @var string Платежный метод
*/
private $_paymentMethod;
/**
* @var string Ограничение количества объектов платежа
*/
private $_limit;
/**
* @var string Страница выдачи результатов, которую необходимо отобразить
*/
private $_cursor;
/**
* Возвращает дату создания от которой будут возвращены платежи или null если дата не была установлена
* @return \DateTime|null Время создания, от (включительно)
*/
public function getCreatedAtGte()
{
return $this->_createdAtGte;
}
/**
* Проверяет была ли установлена дата создания от которой выбираются платежи
* @return bool True если дата была установлена, false если нет
*/
public function hasCreatedAtGte()
{
return $this->_createdAtGte !== null;
}
/**
* Устанавливает дату создания от которой выбираются платежи
* @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 createdAtGte value in PaymentsRequest', 0, 'PaymentRequest.createdAtGte'
);
}
$this->_createdAtGte = $dateTime;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid createdAtGte value type in PaymentsRequest', 0, 'PaymentRequest.createdAtGte'
);
}
}
/**
* Возвращает дату создания от которой будут возвращены платежи или null если дата не была установлена
* @return \DateTime|null Время создания, от (не включая)
*/
public function getCreatedAtGt()
{
return $this->_createdAtGt;
}
/**
* Проверяет была ли установлена дата создания от которой выбираются платежи
* @return bool True если дата была установлена, false если нет
*/
public function hasCreatedAtGt()
{
return $this->_createdAtGt !== null;
}
/**
* Устанавливает дату создания от которой выбираются платежи
* @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 createdAtGt value in PaymentsRequest', 0, 'PaymentRequest.createdAtGt'
);
}
$this->_createdAtGt = $dateTime;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid createdAtGt value type in PaymentsRequest', 0, 'PaymentRequest.createdAtGt'
);
}
}
/**
* Возвращает дату создания до которой будут возвращены платежи или null если дата не была установлена
* @return \DateTime|null Время создания, до (включительно)
*/
public function getCreatedAtLte()
{
return $this->_createdAtLte;
}
/**
* Проверяет была ли установлена дата создания до которой выбираются платежи
* @return bool True если дата была установлена, false если нет
*/
public function hasCreatedAtLte()
{
return $this->_createdAtLte !== null;
}
/**
* Устанавливает дату создания до которой выбираются платежи
* @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 createdAtLte value in PaymentsRequest', 0, 'PaymentRequest.createdAtLte'
);
}
$this->_createdAtLte = $dateTime;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid createdAtLte value type in PaymentsRequest', 0, 'PaymentRequest.createdAtLte'
);
}
}
/**
* Возвращает дату создания до которой будут возвращены платежи или null если дата не была установлена
* @return \DateTime|null Время создания, до (не включая)
*/
public function getCreatedAtLt()
{
return $this->_createdAtLt;
}
/**
* Проверяет была ли установлена дата создания до которой выбираются платежи
* @return bool True если дата была установлена, false если нет
*/
public function hasCreatedAtLt()
{
return $this->_createdAtLt !== null;
}
/**
* Устанавливает дату создания до которой выбираются платежи
* @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 createdAtLt value in PaymentsRequest', 0, 'PaymentRequest.createdAtLt'
);
}
$this->_createdAtLt = $dateTime;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid createdAlLt value type in PaymentsRequest', 0, 'PaymentRequest.createdAtLt'
);
}
}
/**
* Возвращает дату подтверждения от которой будут возвращены платежи или null если дата не была установлена
* @return \DateTime|null Время подтверждения, от (включительно)
*/
public function getCapturedAtGte()
{
return $this->_capturedAtGte;
}
/**
* Проверяет была ли установлена дата подтверждения от которой выбираются платежи
* @return bool True если дата была установлена, false если нет
*/
public function hasCapturedAtGte()
{
return $this->_capturedAtGte !== null;
}
/**
* Устанавливает дату подтверждения от которой выбираются платежи
* @param \DateTime|string|int|null $value Время подтверждения, от (включительно) или null чтобы удалить значение
*
* @throws InvalidPropertyValueException Генерируется если была передана дата в невалидном формате (была передана
* строка или число, которые не удалось преобразовать в валидную дату)
* @throws InvalidPropertyValueTypeException|Exception Генерируется если была передана дата с не тем типом (передана не
* строка, не число и не значение типа \DateTime)
*/
public function setCapturedAtGte($value)
{
if ($value === null || $value === '') {
$this->_capturedAtGte = null;
} elseif (TypeCast::canCastToDateTime($value)) {
$dateTime = TypeCast::castToDateTime($value);
if ($dateTime === null) {
throw new InvalidPropertyValueException(
'Invalid capturedAtGte value in PaymentsRequest', 0, 'PaymentRequest.capturedAtGte'
);
}
$this->_capturedAtGte = $dateTime;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid capturedAtGte value type in PaymentsRequest', 0, 'PaymentRequest.capturedAtGte'
);
}
}
/**
* Возвращает дату подтверждения от которой будут возвращены платежи или null если дата не была установлена
* @return \DateTime|null Время подтверждения, от (не включая)
*/
public function getCapturedAtGt()
{
return $this->_capturedAtGt;
}
/**
* Проверяет была ли установлена дата подтверждения от которой выбираются платежи
* @return bool True если дата была установлена, false если нет
*/
public function hasCapturedAtGt()
{
return $this->_capturedAtGt !== null;
}
/**
* Устанавливает дату подтверждения от которой выбираются платежи
* @param \DateTime|string|int|null $value Время подтверждения, от (не включая) или null чтобы удалить значение
*
* @throws InvalidPropertyValueException Генерируется если была передана дата в невалидном формате (была передана
* строка или число, которые не удалось преобразовать в валидную дату)
* @throws InvalidPropertyValueTypeException|Exception Генерируется если была передана дата с не тем типом (передана не
* строка, не число и не значение типа \DateTime)
*/
public function setCapturedAtGt($value)
{
if ($value === null || $value === '') {
$this->_capturedAtGt = null;
} elseif (TypeCast::canCastToDateTime($value)) {
$dateTime = TypeCast::castToDateTime($value);
if ($dateTime === null) {
throw new InvalidPropertyValueException(
'Invalid capturedAtGt value in PaymentsRequest', 0, 'PaymentRequest.capturedAtGt'
);
}
$this->_capturedAtGt = $dateTime;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid capturedAtGt value type in PaymentsRequest', 0, 'PaymentRequest.capturedAtGt'
);
}
}
/**
* Возвращает дату подтверждения до которой будут возвращены платежи или null если дата не была установлена
* @return \DateTime|null Время подтверждения, до (включительно)
*/
public function getCapturedAtLte()
{
return $this->_capturedAtLte;
}
/**
* Проверяет была ли установлена дата подтверждения до которой выбираются платежи
* @return bool True если дата была установлена, false если нет
*/
public function hasCapturedAtLte()
{
return $this->_capturedAtLte !== null;
}
/**
* Устанавливает дату подтверждения до которой выбираются платежи
* @param \DateTime|string|int|null $value Время подтверждения, до (включительно) или null чтобы удалить значение
*
* @throws InvalidPropertyValueException Генерируется если была передана дата в невалидном формате (была передана
* строка или число, которые не удалось преобразовать в валидную дату)
* @throws InvalidPropertyValueTypeException|Exception Генерируется если была передана дата с не тем типом (передана не
* строка, не число и не значение типа \DateTime)
*/
public function setCapturedAtLte($value)
{
if ($value === null || $value === '') {
$this->_capturedAtLte = null;
} elseif (TypeCast::canCastToDateTime($value)) {
$dateTime = TypeCast::castToDateTime($value);
if ($dateTime === null) {
throw new InvalidPropertyValueException(
'Invalid capturedAtLte value in PaymentsRequest', 0, 'PaymentRequest.capturedAtLte'
);
}
$this->_capturedAtLte = $dateTime;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid capturedAtLte value type in PaymentsRequest', 0, 'PaymentRequest.capturedAtLte'
);
}
}
/**
* Возвращает дату подтверждения до которой будут возвращены платежи или null если дата не была установлена
* @return \DateTime|null Время подтверждения, до (не включая)
*/
public function getCapturedAtLt()
{
return $this->_capturedAtLt;
}
/**
* Проверяет была ли установлена дата подтверждения до которой выбираются платежи
* @return bool True если дата была установлена, false если нет
*/
public function hasCapturedAtLt()
{
return $this->_capturedAtLt !== null;
}
/**
* Устанавливает дату подтверждения до которой выбираются платежи
* @param \DateTime|string|int|null $value Время подтверждения, до (не включая) или null чтобы удалить значение
*
* @throws InvalidPropertyValueException Генерируется если была передана дата в невалидном формате (была передана
* строка или число, которые не удалось преобразовать в валидную дату)
* @throws InvalidPropertyValueTypeException|Exception Генерируется если была передана дата с не тем типом (передана не
* строка, не число и не значение типа \DateTime)
*/
public function setCapturedAtLt($value)
{
if ($value === null || $value === '') {
$this->_capturedAtLt = null;
} elseif (TypeCast::canCastToDateTime($value)) {
$dateTime = TypeCast::castToDateTime($value);
if ($dateTime === null) {
throw new InvalidPropertyValueException(
'Invalid capturedAtLt value in PaymentsRequest', 0, 'PaymentRequest.capturedAtLt'
);
}
$this->_capturedAtLt = $dateTime;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid capturedAlLt value type in PaymentsRequest', 0, 'PaymentRequest.capturedAtLt'
);
}
}
/**
* Возвращает статус выбираемых платежей или null если он до этого не был установлен
* @return string|null Статус выбираемых платежей
*/
public function getStatus()
{
return $this->_status;
}
/**
* Проверяет был ли установлен статус выбираемых платежей
* @return bool True если статус был установлен, false если нет
*/
public function hasStatus()
{
return $this->_status !== null;
}
/**
* Устанавливает статус выбираемых платежей
* @param string $value Статус выбираемых платежей или null чтобы удалить значение
*
* @throws InvalidPropertyValueException Выбрасывается если переданное значение не является валидным статусом
* @throws InvalidPropertyValueTypeException Выбрасывается если в метод была передана не строка
*/
public function setStatus($value)
{
if ($value === null || $value === '') {
$this->_status = null;
} elseif (TypeCast::canCastToEnumString($value)) {
if (!PaymentStatus::valueExists((string)$value)) {
throw new InvalidPropertyValueException(
'Invalid status value in PaymentsRequest', 0, 'PaymentsRequest.status', $value
);
} else {
$this->_status = (string)$value;
}
} else {
throw new InvalidPropertyValueTypeException(
'Invalid status value in PaymentsRequest', 0, 'PaymentsRequest.status', $value
);
}
}
/**
* Возвращает платежный метод выбираемых платежей или null если он до этого не был установлен
* @return string|null Платежный метод выбираемых платежей
*/
public function getPaymentMethod()
{
return $this->_paymentMethod;
}
/**
* Проверяет был ли установлен платежный метод выбираемых платежей
* @return bool True если платежный метод был установлен, false если нет
*/
public function hasPaymentMethod()
{
return $this->_paymentMethod !== null;
}
/**
* Устанавливает платежный метод выбираемых платежей
* @param string $value Платежный метод выбираемых платежей или null чтобы удалить значение
*
* @throws InvalidPropertyValueException Выбрасывается если переданное значение не является валидным статусом
* @throws InvalidPropertyValueTypeException Выбрасывается если в метод была передана не строка
*/
public function setPaymentMethod($value)
{
if ($value === null || $value === '') {
$this->_paymentMethod = null;
} elseif (TypeCast::canCastToEnumString($value)) {
if (!PaymentMethodType::valueExists((string)$value)) {
throw new InvalidPropertyValueException(
'Invalid status value in PaymentsRequest', 0, 'PaymentsRequest.paymentMethod', $value
);
} else {
$this->_paymentMethod = (string)$value;
}
} else {
throw new InvalidPropertyValueTypeException(
'Invalid status value type in PaymentsRequest', 0, 'PaymentsRequest.paymentMethod', $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 PaymentsRequest', 0, 'PaymentsRequest.limit', $value
);
}
$this->_limit = $value;
} else {
throw new InvalidPropertyValueTypeException(
'Invalid limit value type in PaymentsRequest', 0, 'PaymentsRequest.limit', $value
);
}
}
/**
* Страница выдачи результатов, которую необходимо отобразить
* @return string|null
*/
public function getCursor()
{
return $this->_cursor;
}
/**
* Проверяет был ли установлена страница выдачи результатов, которую необходимо отобразить
* @return bool True если была установлена, false если нет
*/
public function hasCursor()
{
return $this->_cursor !== null;
}
/**
* Устанавливает cтраницw выдачи результатов, которую необходимо отобразить
* @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 PaymentsRequest', 0, 'PaymentsRequest.limit', $value
);
}
}
/**
* Проверяет валидность текущего объекта запроса
* @return bool True если объект валиден, false если нет
*/
public function validate()
{
return true;
}
/**
* Возвращает инстанс билдера объектов запросов списка платежей магазина
* @return PaymentsRequestBuilder Билдер объектов запросов списка платежей
*/
public static function builder()
{
return new PaymentsRequestBuilder();
}
}
@@ -0,0 +1,248 @@
<?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\Payments;
use DateTime;
use Exception;
use YooKassa\Common\AbstractRequest;
use YooKassa\Common\AbstractRequestBuilder;
use YooKassa\Common\Exceptions\InvalidPropertyValueException;
use YooKassa\Common\Exceptions\InvalidPropertyValueTypeException;
/**
* Билдер объектов запросов к API для пролучения списка платежей магазина
*
* @package YooKassa\Request\Payments
*/
class PaymentsRequestBuilder extends AbstractRequestBuilder
{
/**
* @var PaymentsRequest Собираемый объект запроса списка платежей магазина
*/
protected $currentObject;
/**
* Возвращает новый объект запроса для получения списка платежей, который в дальнейшем будет собираться в билдере
* @return PaymentsRequest Объект запроса списка платежей магазина
*/
protected function initCurrentObject()
{
return new PaymentsRequest();
}
/**
* Устанавливает страница выдачи результатов
* @param string|null $value Страница выдачи результатов или null чтобы удалить значение
* @return PaymentsRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueTypeException Выбрасывается если в метод была передана не строка
*/
public function setCursor($value)
{
$this->currentObject->setCursor($value);
return $this;
}
/**
* Устанавливает дату создания от которой выбираются платежи
* @param DateTime|string|int|null $value Время создания, от (не включая) или null чтобы удалить значение
* @return PaymentsRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueException Генерируется если была передана дата в невалидном формате (была передана
* строка или число, которые не удалось преобразовать в валидную дату)
* @throws InvalidPropertyValueTypeException|Exception Генерируется если была передана дата с не тем типом (передана не
* строка, не число и не значение типа \DateTime)
*/
public function setCreatedAtGt($value)
{
$this->currentObject->setCreatedAtGt($value);
return $this;
}
/**
* Устанавливает дату создания от которой выбираются платежи
* @param DateTime|string|int|null $value Время создания, от (включительно) или null чтобы удалить значение
* @return PaymentsRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueException Генерируется если была передана дата в невалидном формате (была передана
* строка или число, которые не удалось преобразовать в валидную дату)
* @throws InvalidPropertyValueTypeException|Exception Генерируется если была передана дата с не тем типом (передана не
* строка, не число и не значение типа \DateTime)
*/
public function setCreatedAtGte($value)
{
$this->currentObject->setCreatedAtGte($value);
return $this;
}
/**
* Устанавливает дату создания до которой выбираются платежи
* @param DateTime|string|int|null $value Время создания, до (не включая) или null чтобы удалить значение
* @return PaymentsRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueException Генерируется если была передана дата в невалидном формате (была передана
* строка или число, которые не удалось преобразовать в валидную дату)
* @throws InvalidPropertyValueTypeException|Exception Генерируется если была передана дата с не тем типом (передана не
* строка, не число и не значение типа \DateTime)
*/
public function setCreatedAtLt($value)
{
$this->currentObject->setCreatedAtLt($value);
return $this;
}
/**
* Устанавливает дату создания до которой выбираются платежи
* @param DateTime|string|int|null $value Время создания, до (включительно) или null чтобы удалить значение
* @return PaymentsRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueException Генерируется если была передана дата в невалидном формате (была передана
* строка или число, которые не удалось преобразовать в валидную дату)
* @throws InvalidPropertyValueTypeException|Exception Генерируется если была передана дата с не тем типом (передана не
* строка, не число и не значение типа \DateTime)
*/
public function setCreatedAtLte($value)
{
$this->currentObject->setCreatedAtLte($value);
return $this;
}
/**
* Устанавливает дату подтверждения от которой выбираются платежи
* @param DateTime|string|int|null $value Время создания, до (включительно) или null чтобы удалить значение
* @return PaymentsRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueException Генерируется если была передана дата в невалидном формате (была передана
* строка или число, которые не удалось преобразовать в валидную дату)
* @throws InvalidPropertyValueTypeException|Exception Генерируется если была передана дата с не тем типом (передана не
* строка, не число и не значение типа \DateTime)
*/
public function setCapturedAtGt($value)
{
$this->currentObject->setCapturedAtGt($value);
return $this;
}
/**
* Устанавливает дату подтверждения от которой выбираются платежи
* @param DateTime|string|int|null $value Время подтверждения, от (включительно) или null чтобы удалить значение
* @return PaymentsRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueException Генерируется если была передана дата в невалидном формате (была передана
* строка или число, которые не удалось преобразовать в валидную дату)
* @throws InvalidPropertyValueTypeException|Exception Генерируется если была передана дата с не тем типом (передана не
* строка, не число и не значение типа \DateTime)
*/
public function setCapturedAtGte($value)
{
$this->currentObject->setCapturedAtGte($value);
return $this;
}
/**
* Устанавливает дату подтверждения до которой выбираются платежи
* @param DateTime|string|int|null $value Время подтверждения, до (включительно) или null чтобы удалить значение
* @return PaymentsRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueException Генерируется если была передана дата в невалидном формате (была передана
* строка или число, которые не удалось преобразовать в валидную дату)
* @throws InvalidPropertyValueTypeException|Exception Генерируется если была передана дата с не тем типом (передана не
* строка, не число и не значение типа \DateTime)
*/
public function setCapturedAtLt($value)
{
$this->currentObject->setCapturedAtLt($value);
return $this;
}
/**
* Устанавливает дату подтверждения до которой выбираются платежи
* @param DateTime|string|int|null $value Время подтверждения, до (включительно) или null чтобы удалить значение
* @return PaymentsRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueException Генерируется если была передана дата в невалидном формате (была передана
* строка или число, которые не удалось преобразовать в валидную дату)
* @throws InvalidPropertyValueTypeException|Exception Генерируется если была передана дата с не тем типом (передана не
* строка, не число и не значение типа \DateTime)
*/
public function setCapturedAtLte($value)
{
$this->currentObject->setCapturedAtLte($value);
return $this;
}
/**
* Устанавливает ограничение количества объектов платежа
* @param string $value Ограничение количества объектов платежа или null чтобы удалить значение
* @return PaymentsRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueTypeException Выбрасывается если в метод было передана не целое число
*/
public function setLimit($value)
{
$this->currentObject->setLimit($value);
return $this;
}
/**
* Устанавливает статус выбираемых платежей
* @param string $value Статус выбираемых платежей или null чтобы удалить значение
* @return PaymentsRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueException Выбрасывается если переданное значение не является валидным статусом
* @throws InvalidPropertyValueTypeException Выбрасывается если в метод была передана не строка
*/
public function setStatus($value)
{
$this->currentObject->setStatus($value);
return $this;
}
/**
* Устанавливает платежный метод выбираемых платежей
* @param string $value Платежный метод выбираемых платежей или null чтобы удалить значение
* @return PaymentsRequestBuilder Инстанс текущего билдера
*
* @throws InvalidPropertyValueException Выбрасывается если переданное значение не является валидным статусом
* @throws InvalidPropertyValueTypeException Выбрасывается если в метод была передана не строка
*/
public function setPaymentMethod($value)
{
$this->currentObject->setPaymentMethod($value);
return $this;
}
/**
* Собирает и возвращает объект запроса списка платежей магазина
* @param array|null $options Массив с настройками запроса
* @return AbstractRequest Инстанс объекта запроса к API для получения списка платежей магазина
*/
public function build(array $options = null)
{
return parent::build($options);
}
}
@@ -0,0 +1,181 @@
<?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\Payments;
/**
* Interface PaymentsRequestInterface
*
* @package YooKassa\Request\Payments
*
* @property-read string|null $cursor Страница выдачи результатов, которую необходимо отобразить
* @property-read \DateTime|null $createdAtGte Время создания, от (включительно)
* @property-read \DateTime|null $createdAtGt Время создания, от (не включая)
* @property-read \DateTime|null $createdAtLte Время создания, до (включительно)
* @property-read \DateTime|null $createdAtLt Время создания, до (не включая)
* @property-read \DateTime|null $capturedAtGte Время подтверждения, от (включительно)
* @property-read \DateTime|null $capturedAtGt Время подтверждения, от (не включая)
* @property-read \DateTime|null $capturedAtLte Время подтверждения, до (включительно)
* @property-read \DateTime|null $capturedAtLt Время подтверждения, до (не включая)
* @property-read integer|null $limit Ограничение количества объектов платежа, отображаемых на одной странице выдачи
* @property-read string|null $recipientGatewayId Идентификатор шлюза.
* @property-read string|null $status Статус платежа
*/
interface PaymentsRequestInterface
{
/**
* Возвращает страницу выдачи результатов или null если она до этого не была установлена
* @return string|null Страница выдачи результатов
*/
function getCursor();
/**
* Проверяет была ли установлена страница выдачи результатов
* @return bool True если страница выдачи результатов была установлена, false если нет
*/
function hasCursor();
/**
* Устанавливает страницу выдачи результатов
* @param string $value Страница
* @return void
*/
function setCursor($value);
/**
* Возвращает дату создания от которой будут возвращены платежи или null если дата не была установлена
* @return \DateTime|null Время создания, от (включительно)
*/
function getCreatedAtGte();
/**
* Проверяет была ли установлена дата создания от которой выбираются платежи
* @return bool True если дата была установлена, false если нет
*/
function hasCreatedAtGte();
/**
* Устанавливает дату создания от которой выбираются платежи
* @param \DateTime $value Дата
* @return void
*/
function setCreatedAtGte($value);
/**
* Возвращает дату создания от которой будут возвращены платежи или null если дата не была установлена
* @return \DateTime|null Время создания, от (не включая)
*/
function getCreatedAtGt();
/**
* Проверяет была ли установлена дата создания от которой выбираются платежи
* @return bool True если дата была установлена, false если нет
*/
function hasCreatedAtGt();
/**
* Устанавливает дату создания от которой выбираются платежи
* @param \DateTime $value Дата
* @return void
*/
function setCreatedAtGt($value);
/**
* Возвращает дату создания до которой будут возвращены платежи или null если дата не была установлена
* @return \DateTime|null Время создания, до (включительно)
*/
function getCreatedAtLte();
/**
* Проверяет была ли установлена дата создания до которой выбираются платежи
* @return bool True если дата была установлена, false если нет
*/
function hasCreatedAtLte();
/**
* Устанавливает дату создания до которой выбираются платежи
* @param \DateTime $value Дата
* @return void
*/
function setCreatedAtLte($value);
/**
* Возвращает дату создания до которой будут возвращены платежи или null если дата не была установлена
* @return \DateTime|null Время создания, до (не включая)
*/
function getCreatedAtLt();
/**
* Проверяет была ли установлена дата создания до которой выбираются платежи
* @return bool True если дата была установлена, false если нет
*/
function hasCreatedAtLt();
/**
* Устанавливает дату создания до которой выбираются платежи
* @param \DateTime $value Дата
* @return void
*/
function setCreatedAtLt($value);
/**
* Возвращает ограничение количества объектов платежа или null если оно до этого не было установлено
* @return string|null Ограничение количества объектов платежа
*/
function getLimit();
/**
* Проверяет было ли установлено ограничение количества объектов платежа
* @return bool True если ограничение количества объектов платежа было установлено, false если нет
*/
function hasLimit();
/**
* Устанавливает ограничение количества объектов платежа
* @param int $value Количества объектов платежа на странице
* @return void
*/
function setLimit($value);
/**
* Возвращает статус выбираемых платежей или null если он до этого не был установлен
* @return string|null Статус выбираемых платежей
*/
function getStatus();
/**
* Проверяет был ли установлен статус выбираемых платежей
* @return bool True если статус был установлен, false если нет
*/
function hasStatus();
/**
* Устанавливает статус выбираемых платежей
* @param string $value Статус платежей
* @return void
*/
function setStatus($value);
}
@@ -0,0 +1,76 @@
<?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\Payments;
/**
* Класс сериализатора объектов запросов к API для получения списка платежей
*
* @package YooKassa\Request\Payments
*/
class PaymentsRequestSerializer
{
/**
* @var array Карта маппинга свойств объекта запроса на поля отправляемого запроса
*/
private static $propertyMap = array(
'createdAtGte' => 'created_at.gte',
'createdAtGt' => 'created_at.gt',
'createdAtLte' => 'created_at.lte',
'createdAtLt' => 'created_at.lt',
'capturedAtGte' => 'captured_at.gte',
'capturedAtGt' => 'captured_at.gt',
'capturedAtLte' => 'captured_at.lte',
'capturedAtLt' => 'captured_at.lt',
'status' => 'status',
'paymentMethod' => 'payment_method',
'limit' => 'limit',
'cursor' => 'cursor',
);
/**
* Сериализует объект запроса к API для дальнейшей его отправки
* @param PaymentsRequestInterface $request Сериализуемый объект
* @return array Массив с инфомрацией, отпарвляемый в дальнейшем в API
*/
public function serialize(PaymentsRequestInterface $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,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\Payments;
use Exception;
use YooKassa\Common\AbstractObject;
use YooKassa\Model\PaymentInterface;
/**
* Класс объекта ответа от API со списком платежей магазина
*
* @package YooKassa\Request\Payments
*/
class PaymentsResponse extends AbstractObject
{
/**
* @var PaymentInterface[] Массив платежей
*/
private $items;
/**
* @var string|null Токен следующей страницы
*/
private $nextCursor;
/**
* Конструктор, устанавливает свойства объекта из пришедшего из API ассоциативного массива
*
* @param array $sourceArray Массив настроек, пришедший от API
* @throws Exception
*/
public function fromArray($sourceArray)
{
$this->items = array();
foreach ($sourceArray['items'] as $paymentInfo) {
$payment = new PaymentResponse($paymentInfo);
$this->items[] = $payment;
}
if (!empty($sourceArray['next_cursor'])) {
$this->nextCursor = $sourceArray['next_cursor'];
}
}
/**
* Возвращает список платежей
* @return PaymentInterface[] Список платежей
*/
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;
}
}