_description; } /** * Устанавливает описание транзакции * @param string|null $description * * @return CreatePaymentRequest */ public function setDescription(?string $description): self { $this->_description = $this->validatePropertyValue('_description', $description); return $this; } /** * Проверяет наличие описания транзакции в создаваемом платеже. * * @return bool True если описание транзакции есть, false если нет */ public function hasDescription(): bool { return !empty($this->_description); } /** * Возвращает объект получателя платежа. * * @return null|Recipient Объект с информацией о получателе платежа или null, если получатель не задан */ public function getRecipient(): ?Recipient { return $this->_recipient; } /** * Проверяет наличие получателя платежа в запросе. * * @return bool True если получатель платежа задан, false если нет */ public function hasRecipient(): bool { return !empty($this->_recipient); } /** * Устанавливает объект с информацией о получателе платежа. * * @param null|array|Recipient $recipient Инстанс объекта информации о получателе платежа или null */ public function setRecipient(mixed $recipient): self { $this->_recipient = $this->validatePropertyValue('_recipient', $recipient); return $this; } /** * Возвращает одноразовый токен для проведения оплаты. * * @return string|null Одноразовый токен для проведения оплаты, сформированный YooKassa JS widget */ public function getPaymentToken(): ?string { return $this->_payment_token; } /** * Проверяет наличие одноразового токена для проведения оплаты. * * @return bool True если токен установлен, false если нет */ public function hasPaymentToken(): bool { return !empty($this->_payment_token); } /** * Устанавливает одноразовый токен для проведения оплаты, сформированный YooKassa JS widget. * * @param string|null $payment_token Одноразовый токен для проведения оплаты * * @throws InvalidPropertyValueException Выбрасывается если переданное значение превышает допустимую длину * @throws InvalidPropertyValueTypeException Выбрасывается если переданное значение не является строкой */ public function setPaymentToken(?string $payment_token): self { $this->_payment_token = $this->validatePropertyValue('_payment_token', $payment_token); return $this; } /** * Устанавливает идентификатор записи платёжных данных покупателя. * * @return string|null Идентификатор записи о сохраненных платежных данных покупателя */ public function getPaymentMethodId(): ?string { return $this->_payment_method_id; } /** * Проверяет наличие идентификатора записи о платёжных данных покупателя. * * @return bool True если идентификатор задан, false если нет */ public function hasPaymentMethodId(): bool { return !empty($this->_payment_method_id); } /** * Устанавливает идентификатор записи о сохранённых данных покупателя. * * @param string|null $payment_method_id Идентификатор записи о сохраненных платежных данных покупателя * * @throws InvalidPropertyValueTypeException Генерируется если переданные значение не является строкой или null */ public function setPaymentMethodId(?string $payment_method_id): self { $this->_payment_method_id = $this->validatePropertyValue('_payment_method_id', $payment_method_id); return $this; } /** * Возвращает данные для создания метода оплаты. * * @return AbstractPaymentData|null Данные используемые для создания метода оплаты */ public function getPaymentMethodData(): ?AbstractPaymentData { return $this->_payment_method_data; } /** * Проверяет установлен ли объект с методом оплаты. * * @return bool True если объект метода оплаты установлен, false если нет */ public function hasPaymentMethodData(): bool { return !empty($this->_payment_method_data); } /** * Устанавливает объект с информацией для создания метода оплаты. * * @param null|array|AbstractPaymentData $payment_method_data Объект создания метода оплаты или null * * @throws InvalidPropertyValueTypeException Выбрасывается если был передан объект невалидного типа */ public function setPaymentMethodData(mixed $payment_method_data): self { if (is_array($payment_method_data)) { $payment_method_data = (new PaymentDataFactory())->factoryFromArray($payment_method_data); } $this->_payment_method_data = $this->validatePropertyValue('_payment_method_data', $payment_method_data); return $this; } /** * Возвращает способ подтверждения платежа. * * @return AbstractConfirmationAttributes|null Способ подтверждения платежа */ public function getConfirmation(): ?AbstractConfirmationAttributes { return $this->_confirmation; } /** * Проверяет, был ли установлен способ подтверждения платежа. * * @return bool True если способ подтверждения платежа был установлен, false если нет */ public function hasConfirmation(): bool { return null !== $this->_confirmation; } /** * Устанавливает способ подтверждения платежа. * * @param null|array|AbstractConfirmationAttributes $confirmation Способ подтверждения платежа * * @throws InvalidPropertyValueTypeException Выбрасывается если переданное значение не является объектом типа * AbstractConfirmationAttributes или null */ public function setConfirmation(mixed $confirmation): self { if (is_array($confirmation)) { $factory = new ConfirmationAttributesFactory(); $confirmation = $factory->factoryFromArray($confirmation); } $this->_confirmation = $this->validatePropertyValue('_confirmation', $confirmation); return $this; } /** * Возвращает флаг сохранения платёжных данных. * * @return bool|null Флаг сохранения платёжных данных */ public function getSavePaymentMethod(): ?bool { return $this->_save_payment_method; } /** * Проверяет, был ли установлен флаг сохранения платёжных данных. * * @return bool True если флаг был установлен, false если нет */ public function hasSavePaymentMethod(): bool { return isset($this->_save_payment_method); } /** * Устанавливает флаг сохранения платёжных данных. Значение true инициирует создание многоразового payment_method. * * @param bool|null $save_payment_method Сохранить платежные данные для последующего использования * * @throws InvalidPropertyValueTypeException Генерируется если переданный аргумент не кастится в bool */ public function setSavePaymentMethod(?bool $save_payment_method = null): self { $this->_save_payment_method = $this->validatePropertyValue('_save_payment_method', $save_payment_method); return $this; } /** * Возвращает флаг автоматического принятия поступившей оплаты. * * @return bool True если требуется автоматически принять поступившую оплату, false если нет */ public function getCapture(): bool { return $this->_capture; } /** * Проверяет, был ли установлен флаг автоматического принятия поступившей оплаты. * * @return bool True если флаг автоматического принятия оплаты был установлен, false если нет */ public function hasCapture(): bool { return isset($this->_capture); } /** * Устанавливает флаг автоматического принятия поступившей оплаты. * * @param bool $capture Автоматически принять поступившую оплату * * @throws InvalidPropertyValueTypeException Генерируется если переданный аргумент не кастится в bool */ public function setCapture(bool $capture): self { $this->_capture = $this->validatePropertyValue('_capture', $capture); return $this; } /** * Возвращает IPv4 или IPv6-адрес покупателя. * * @return string|null IPv4 или IPv6-адрес покупателя */ public function getClientIp(): ?string { return $this->_client_ip; } /** * Проверяет, был ли установлен IPv4 или IPv6-адрес покупателя. * * @return bool True если IP адрес покупателя был установлен, false если нет */ public function hasClientIp(): bool { return null !== $this->_client_ip; } /** * Устанавливает IP адрес покупателя. * * @param string|null $client_ip IPv4 или IPv6-адрес покупателя */ public function setClientIp(?string $client_ip): self { $this->_client_ip = $this->validatePropertyValue('_client_ip', $client_ip); return $this; } /** * Возвращает данные оплаты установленные мерчантом * * @return Metadata|null Метаданные, привязанные к платежу */ public function getMetadata(): ?Metadata { return $this->_metadata; } /** * Проверяет, были ли установлены метаданные заказа. * * @return bool True если метаданные были установлены, false если нет */ public function hasMetadata(): bool { return !empty($this->_metadata) && $this->_metadata->count() > 0; } /** * Устанавливает метаданные, привязанные к платежу. * * @param null|array|Metadata $metadata Метаданные платежа, устанавливаемые мерчантом * * @throws InvalidPropertyValueTypeException Выбрасывается если переданные данные не удалось интерпретировать как * метаданные платежа */ public function setMetadata(mixed $metadata): self { $this->_metadata = $this->validatePropertyValue('_metadata', $metadata); return $this; } /** * Возвращает данные о сделке, в составе которой проходит платеж. * * @return PaymentDealInfo|null Данные о сделке, в составе которой проходит платеж */ public function getDeal(): ?PaymentDealInfo { return $this->_deal; } /** * Проверяет, были ли установлены данные о сделке. * * @return bool True если данные о сделке были установлены, false если нет */ public function hasDeal(): bool { return !empty($this->_deal); } /** * Устанавливает данные о сделке, в составе которой проходит платеж. * * @param null|array|PaymentDealInfo $deal Данные о сделке, в составе которой проходит платеж * * @throws InvalidPropertyValueTypeException Выбрасывается если переданные данные не удалось интерпретировать как метаданные платежа */ public function setDeal(mixed $deal): self { $this->_deal = $this->validatePropertyValue('_deal', $deal); return $this; } /** * Возвращает информацию для проверки операции на мошенничество. * * @deprecated Больше не поддерживается. Вместо него нужно использовать `getReceiver()` * @return null|FraudData Информация для проверки операции на мошенничество */ public function getFraudData(): ?FraudData { return null; } /** * Устанавливает информацию для проверки операции на мошенничество. * * @param null|array|FraudData $fraud_data Информация для проверки операции на мошенничество * @deprecated Больше не поддерживается. Вместо него нужно использовать `setReceiver()` */ public function setFraudData(mixed $fraud_data = null): self { return $this; } /** * Проверяет, была ли установлена информация для проверки операции на мошенничество. * * @deprecated Больше не поддерживается. Вместо него нужно использовать `hasReceiver()` * @return bool True если информация была установлена, false если нет */ public function hasFraudData(): bool { return false; } /** * Возвращает идентификатор покупателя в вашей системе. * * @return string|null Идентификатор покупателя в вашей системе */ public function getMerchantCustomerId(): ?string { return $this->_merchant_customer_id; } /** * Проверяет, был ли установлен идентификатор покупателя в вашей системе. * * @return bool True если идентификатор покупателя был установлен, false если нет */ public function hasMerchantCustomerId(): bool { return null !== $this->_merchant_customer_id; } /** * Устанавливает идентификатор покупателя в вашей системе. * * @param string|null $merchant_customer_id Идентификатор покупателя в вашей системе, например электронная почта или номер телефона. Не более 200 символов */ public function setMerchantCustomerId(?string $merchant_customer_id): self { $this->_merchant_customer_id = $this->validatePropertyValue('_merchant_customer_id', $merchant_customer_id); return $this; } /** * Возвращает платежное поручение. * * @return AbstractPaymentOrder|null */ public function getPaymentOrder(): ?AbstractPaymentOrder { return $this->_payment_order; } /** * Проверяет, было ли установлено платежное поручение. * * @return bool True если платежное поручение было установлены, false если нет */ public function hasPaymentOrder(): bool { return null !== $this->_payment_order; } /** * Устанавливает платежное поручение. * * @param AbstractPaymentOrder|array|null $payment_order Платежное поручение * * @return self */ public function setPaymentOrder(mixed $payment_order = null): self { if (is_array($payment_order)) { $payment_order = (new PaymentOrderFactory())->factoryFromArray($payment_order); } $this->_payment_order = $this->validatePropertyValue('_payment_order', $payment_order); return $this; } /** * Возвращает реквизиты получателя оплаты. * * @return AbstractReceiver|null Реквизиты получателя оплаты при пополнении электронного кошелька, банковского счета или баланса телефона. */ public function getReceiver(): ?AbstractReceiver { return $this->_receiver; } /** * Проверяет, были ли установлены реквизиты получателя оплаты. * * @return bool True если реквизиты получателя оплаты были установлены, false если нет */ public function hasReceiver(): bool { return null !== $this->_receiver; } /** * Устанавливает реквизиты получателя оплаты. * * @param AbstractReceiver|array|null $receiver Реквизиты получателя оплаты при пополнении электронного кошелька, банковского счета или баланса телефона. * * @return self */ public function setReceiver(mixed $receiver = null): self { if (is_array($receiver)) { $factory = new ReceiverFactory(); $receiver = $factory->factoryFromArray($receiver); } $this->_receiver = $this->validatePropertyValue('_receiver', $receiver); return $this; } /** * Возвращает данные для отправки справки. * * @return AbstractStatement[]|ListObjectInterface Данные для отправки справки */ public function getStatements(): ListObjectInterface { if ($this->_statements === null) { $this->_statements = new ListObject(AbstractStatement::class); } return $this->_statements; } /** * Проверяет, были ли установлены данные для отправки справки. * * @return bool True если данные для отправки справки были установлены, false если нет */ public function hasStatements(): bool { return !empty($this->_statements) && $this->_statements->count() > 0; } /** * Устанавливает данные для отправки справки. * * @param ListObjectInterface|array|null $statements Данные для отправки справки * * @return self */ public function setStatements(mixed $statements = null): self { $_statements = null; if (!empty($statements)) { if ($statements instanceof ListObjectInterface) { $_statements = $statements; } else if (is_array($statements)) { $factory = new StatementFactory(); $_statements = new ListObject(AbstractStatement::class); foreach ($statements as $item) { if (is_array($item)) { $_statements->add($factory->factoryFromArray($item)); } else if ($item instanceof AbstractStatement) { $_statements->add($item); } else { throw new InvalidArgumentException('Statements item must be an array or an object of AbstractStatement'); } } } else { throw new ValidatorParameterException('Statements must be an array or an object of ListObjectInterface'); } } $this->_statements = $this->validatePropertyValue('_statements', $_statements); return $this; } /** * Проверяет на валидность текущий объект * * @return bool True если объект запроса валиден, false если нет */ public function validate(): bool { 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(): CreatePaymentRequestBuilder { return new CreatePaymentRequestBuilder(); } }