Оформление заказа требует авторизации - разбор причин
Покупатель нажимает кнопку оформления и попадает на форму входа или регистрации. Корзина при этом цела, а до полей заказа дело не доходит. Разбираем причины по убыванию частоты.
С чего начать
Запрашиваем страницу оформления без кук:
curl -sS -b '' -o /tmp/checkout.html -w 'код ответа %{http_code}\n' \ https://example.ru/personal/order/make/grep -c 'sale.order.ajax' /tmp/checkout.html # разметка формы заказаgrep -c 'system.auth.form' /tmp/checkout.html # форма входа вместо неёЭта проверка делит причины пополам. Разметка компонента в ответе означает, что гостя разворачивает сама форма заказа, а ответ без неё уводит разбор к правам группы и прологу страницы.
Смотрим гостя и настройки регистрации:
global $USER;printf("вошёл: %s, группы: %s\n", $USER->IsAuthorized() ? 'да' : 'нет', implode(',', $USER->GetUserGroupArray()));echo COption::GetOptionString('main', 'new_user_registration', 'N'), "\n";echo COption::GetOptionString('main', 'new_user_registration_email_confirmation', 'N'), "\n";// автоматическая регистрация при заказе опирается на обе эти настройки сразуЗапрет самостоятельной регистрации отменяет и автоматическую регистрацию при заказе. Параметр компонента остаётся включённым и вводит в заблуждение: в настройках разрешение стоит, а покупатель всё равно видит форму входа.
Читаем файловые права каталога оформления:
find /home/bitrix/www/personal -name '.access.php' \ -exec sh -c 'echo "== $1"; cat "$1"' _ {} \;# уровень D закрывает страницу группе, R открывает её на чтение# файл прав читается в прологе, до подключения компонента оформленияПрава наследуются по каталогам сверху вниз. Строка запрета в родительской папке закрывает оформление даже тогда, когда рядом со страницей своего файла прав нет.
Перечисляем обязательные свойства типа плательщика:
$props = CSaleOrderProps::GetList([], ['PERSON_TYPE_ID' => 1, 'ACTIVE' => 'Y']);while ($p = $props->Fetch()) { printf("%-18s тип=%-10s обязательно=%s\n", $p['CODE'], $p['TYPE'], $p['REQUIED']); // поле пишется без буквы R}Обязательность проверяется на сервере и без значения заказ не пропускает. Профиль покупателя появляется только после первого оформленного заказа, поэтому поле, заполняемое из профиля, гостю взять неоткуда.
Причины
-
Самостоятельная регистрация запрещена настройкой главного модуля примерно 28% случаев
ПризнакАвтоматическая регистрация в компоненте включена, а гость всё равно видит форму входа.
ПроверкаСмотрим в настройках главного модуля разрешение регистрации и запрос подтверждения по почте.
Что делатьРазрешаем самостоятельную регистрацию и снимаем подтверждение по почте на время проверки оформления.
-
В компоненте не включён заказ без учётной записи примерно 22% случаев
ПризнакФорма входа рисуется прямо внутри оформления, отдельной страницей она не открывается.
ПроверкаОткрываем параметры компонента оформления и ищем разрешение заказа с автоматической регистрацией.
Что делатьВключаем автоматическую регистрацию и сверяем, что правится компонент именно этой страницы.
-
Группе неавторизованных закрыт доступ к странице оформления примерно 18% случаев
ПризнакВместо полей заказа отдаётся форма входа целиком, а шапка и подвал сайта на месте.
ПроверкаЧитаем файл
.access.phpв каталоге оформления и во всех родительских папках.Что делатьСтавим группе уровень чтения на каталог оформления либо убираем лишнюю строку запрета.
-
Обязательное свойство заполняется только из профиля покупателя примерно 14% случаев
ПризнакГостя разворачивает на регистрацию, а вошедший покупатель оформляет тот же заказ спокойно.
ПроверкаПеречисляем свойства типа плательщика и смотрим у них признак обязательности заполнения.
Что делатьСнимаем обязательность у поля, которое гость заполнить не может, либо задаём значение по умолчанию.
-
Свой обработчик или префильтр разворачивает гостя примерно 10% случаев
ПризнакНа штатном шаблоне компонента картина та же, и ошибок в журнале веб-сервера нет.
ПроверкаИщем в своём коде проверку входа с редиректом и фильтр
Authenticationу контроллера.Что делатьОставляем проверку там, где она нужна по задаче, и снимаем её со страницы оформления.
-
Корзина гостя уезжает к другой учётной записи примерно 8% случаев
ПризнакПосле автоматического входа корзина пустеет, и оформление снова просит войти на сайт.
ПроверкаСравниваем идентификатор покупателя до входа и сразу после автоматической регистрации.
Что делатьУбираем из своего обработчика входа пересоздание сессии и чистку куки покупателя.
Если ничего не помогло
Ищем свои проверки входа по коду проекта:
grep -rn 'IsAuthorized\|LocalRedirect\|Authentication::class' \ /home/bitrix/www/local/php_interface/ /home/bitrix/www/local/modules/# редирект из пролога срабатывает раньше любого компонента страницыОбработчик пролога отрабатывает до вывода страницы, поэтому его редирект неотличим от запрета по правам. Отличает их одно: права видны в файле, а редирект - только в коде.
Частые вопросы
Почему требует авторизацию при оформлении заказа, хотя автоматическая регистрация включена?
Скорее всего в главном модуле запрещена самостоятельная регистрация или включено подтверждение по почте. Параметр компонента без этих двух настроек не работает.
Как настроить оформление заказа без предварительной регистрации?
Разрешить самостоятельную регистрацию, выключить подтверждение по почте и включить автоматическую регистрацию в компоненте оформления. Учётная запись создастся сама, а пароль уйдёт покупателю письмом.
Как убрать обязательность полей при регистрации в оформлении?
Снять признак обязательности у свойства заказа в настройках модуля продаж. Символьный код свойства при этом часто не совпадает с именем поля в шаблоне, и сверять надо именно код.
После автоматической регистрации пропал заказ и открылась пустая корзина. Почему?
Вход сменил идентификатор покупателя, и корзина осталась за прежним гостем. Сравнивают идентификатор до и после входа и убирают лишние действия из своего обработчика.
Оформление сломалось для гостей после обновления. Куда смотреть?
В журнал ошибок PHP: обновление модуля продаж иногда ломает ветку кода для неавторизованных. Лечится доустановкой свежих обновлений, а не правкой шаблона.
Смежное
- Оформление заказа - оглавление подтемы
- Каталог и продажи - устройство магазина целиком
- Не работает оформление заказа: корзина есть, а на оформлении пусто - когда форма открывается, но полей и товаров в ней нет
- Оформление заказа: настройка компонента и правка шаблона - штатные параметры формы
- Регистрация покупателей: форма, подтверждение, свои поля - настройки самостоятельной регистрации
- Корзина гостя и вход покупателя: привязка, слияние, чистка - что происходит с корзиной при входе
- События оформления заказа: свои проверки, запрет и допданные - свои проверки поверх компонента
- Права не применяются: разбор причин - когда уровень доступа выставлен, а не работает
- Права на файлы и папки: файловая система и права структуры - как устроен файл прав каталога
- Своё поле в оформлении заказа: свойство, группа, свой тип - где заводят обязательные свойства