'PaymentReceiptResponse', ReceiptType::REFUND => 'RefundReceiptResponse', ReceiptType::SIMPLE => 'SimpleReceiptResponse', ]; /** * Фабричный метод для работы с чеками. * * @param array $data Массив с данными чека * * @return AbstractReceiptResponse|PaymentReceiptResponse|RefundReceiptResponse|SimpleReceiptResponse Объект чека определенного типа */ public function factory(array $data) { if (array_key_exists('type', $data)) { if (!is_string($data['type'])) { throw new InvalidArgumentException('Invalid receipt type value in receipt factory'); } if (!in_array($data['type'], ReceiptType::getEnabledValues())) { throw new InvalidArgumentException('Invalid receipt data type "' . $data['type'] . '"'); } if (array_key_exists('refund_id', $data)) { $type = ReceiptType::REFUND; } elseif (array_key_exists('payment_id', $data)) { $type = ReceiptType::PAYMENT; } else { $type = ReceiptType::SIMPLE; } } else { throw new InvalidArgumentException( 'Parameter type not specified in ReceiptResponseFactory.factory()' ); } $className = __NAMESPACE__ . '\\' . $this->typeClassMap[$type]; return new $className($data); } }