/** * @override * @see _P::execute() * @return \Magento\Framework\Controller\Result\Redirect */ public function execute() { // 2016-06-05 // @see urldecode() здесь вызывать уже не надо, проверял. /** @var string $redirectUrl */ $redirectUrl = df_request($this->redirectUrlKey()) ?: df_url(); /** * 2016-12-02 * Если адрес для перенаправления покупателя передётся в адресе возврата, * то адрес для перенаправления там закодирован посредством @see base64_encode() * @see \Dfe\BlackbaudNetCommunity\Url::get() */ if (!df_starts_with($redirectUrl, 'http')) { $redirectUrl = base64_decode($redirectUrl); } try { /** @var Session|DfSession $s */ $s = df_customer_session(); if (!$this->mc()) { /** * 2016-12-01 * Учётная запись покупателя отсутствует в Magento, * и в то же время информации провайдера SSO недостаточно * для автоматической регистрации покупателя в Magento * (случай Blackbaud NetCommunity). * Перенаправляем покупателя на стандартную страницу регистрации Magento, * где часть полей будет уже заполнена данными от провайдера SSO, * а пароль будет либо скрытым, либо необязательным полем. * После регистрации свежесозданная учётная запись будет привязана * к учётной записи покупателя в провайдере SSO. */ $redirectUrl = df_customer_url()->getRegisterUrl(); } else { /** * 2015-10-08 * По аналогии с @see \Magento\Customer\Controller\Account\LoginPost::execute() * https://github.com/magento/magento2/blob/1.0.0-beta4/app/code/Magento/Customer/Controller/Account/LoginPost.php#L84-L85 */ $s->setCustomerDataAsLoggedIn($this->mc()->getDataModel()); $s->regenerateId(); /** * По аналогии с @see \Magento\Customer\Model\Account\Redirect::updateLastCustomerId() * Напрямую тот метод вызвать не можем, потому что он protected, * а использовать весь класс @see \Magento\Customer\Model\Account\Redirect пробовал, * но оказалось неудобно из-за слишком сложной процедуры перенаправлений. */ if ($s->getLastCustomerId() != $s->getId()) { $s->unsBeforeAuthUrl()->setLastCustomerId($s->getId()); } } } catch (\Exception $e) { df_message_error($e); } $this->postProcess(); return $this->resultRedirectFactory->create()->setUrl($redirectUrl); }
/** * 2016-07-05 * @return string */ function df_url_checkout_success() { return df_url('checkout/onepage/success'); }