'PaymentMethodYooMoney', PaymentMethodType::YOO_MONEY => 'PaymentMethodYooMoney', PaymentMethodType::BANK_CARD => 'PaymentMethodBankCard', PaymentMethodType::SBERBANK => 'PaymentMethodSberbank', PaymentMethodType::CASH => 'PaymentMethodCash', PaymentMethodType::MOBILE_BALANCE => 'PaymentMethodMobileBalance', PaymentMethodType::APPLE_PAY => 'PaymentMethodApplePay', PaymentMethodType::GOOGLE_PAY => 'PaymentMethodGooglePay', PaymentMethodType::QIWI => 'PaymentMethodQiwi', PaymentMethodType::WEBMONEY => 'PaymentMethodWebmoney', PaymentMethodType::ALFABANK => 'PaymentMethodAlfaBank', PaymentMethodType::INSTALLMENTS => 'PaymentMethodInstallments', PaymentMethodType::B2B_SBERBANK => 'PaymentMethodB2bSberbank', PaymentMethodType::TINKOFF_BANK => 'PaymentMethodTinkoffBank', PaymentMethodType::PSB => 'PaymentMethodPsb', PaymentMethodType::WECHAT => 'PaymentMethodWechat', PaymentMethodType::SBP => 'PaymentMethodSbp', PaymentMethodType::SBER_LOAN => 'PaymentMethodSberLoan', PaymentMethodType::ELECTRONIC_CERTIFICATE => 'PaymentMethodElectronicCertificate', PaymentMethodType::SBER_BNPL => 'PaymentMethodSberBnpl', PaymentMethodType::ALFA_PAY => 'PaymentMethodAlfaPay', PaymentMethodType::UNKNOWN => 'PaymentMethodUnknown', ]; /** * Фабричный метод создания объекта платежных данных по типу. * * @param string|null $type Тип платежного метода * * @return AbstractPaymentMethod */ public function factory(?string $type): AbstractPaymentMethod { if (!array_key_exists($type, $this->typeClassMap)) { $type = PaymentMethodType::UNKNOWN; } $className = __NAMESPACE__ . '\\' . $this->typeClassMap[$type]; return new $className(); } /** * Фабричный метод создания объекта платежных данных из массива. * * @param array $data Массив платежных данных * @param null|string $type Тип платежного метода */ public function factoryFromArray(array $data, ?string $type = null): AbstractPaymentMethod { if (null === $type) { if (array_key_exists('type', $data)) { $type = $data['type']; unset($data['type']); } else { throw new InvalidArgumentException( 'Parameter type not specified in PaymentMethodFactory.factoryFromArray()' ); } } $paymentData = $this->factory($type); $paymentData->fromArray($data); return $paymentData; } }