Авторизация по номеру телефона

Создание профиля покупателя при регистрации

В некоторых случаях есть необходимость при регистрации пользователя создавать профиль покупателя, чтобы при переходе пользователя на страницу оформления заказ, у него сразу были подставлены поля из профиля, в частности номер телефона.

Для этого разместим код из примера ниже в файл bitrix/php_interface/init.php.

Перед использованием кода из примера, замените значения для идентификтора типа плательщика $personalTypeId и идентификаторы свойства заказа. Чтобы расширить набор свойств,которые попадут в профиль покупателя, дополните массив $arProfileProps.


// подписываемя на событие модуля
$eventManager = \Bitrix\Main\EventManager::getInstance();

$eventManager->addEventHandler(
    "main",
    "OnAfterUserRegister",
    "main_OnAfterUserRegister"
);
function main_OnAfterUserRegister($arFields)
{
    //идентификтаор типа плательщика
    $personalTypeId = 1;

    if (!\Bitrix\Main\Loader::includeModule('sale')) {
        return $arFields;
    }
    if (!\Bitrix\Main\Loader::includeModule('bxmaker.authuserphone')) {
        return $arFields;
    }

    $userId = (int)$arFields["USER_ID"];
    if (!$userId) {
        return $arFields;
    }


    $oManager = \BXmaker\AuthUserPhone\Manager::getInstance();
    $phone = $oManager->getPhone($userId);

   if(!$phone)
   {
      return $arFields;
   }
   $phone = preg_replace('/[^\d]*/', '', $phone);

    $arUser = \CUser::GetList(
        '',
        '',
        [
            'ID' => $userId
        ],
        [
            'FIELDS' => [
                'NAME',
                'LAST_NAME',
                'SECOND_NAME',
                'EMAIL'
            ]
        ]
    )->Fetch();
    if (!$arUser) {
        return $arFields;
    }

    $arFio = array_map('trim', [$arFields['LAST_NAME'], $arFields['NAME'], $arFields['SECOND_NAME']]);
    $fio = trim(implode(' ', array_values(array_diff($arFio, ['']))));

    $email = $arUser['EMAIL'];

    //массив свойств создаваемого профиля
    $arProfileProps = [
        [
            "ORDER_PROPS_ID" => 1, // ID свойства заказа c ФИО
            "NAME" => "ФИО",
            "VALUE" => $fio
        ],
        [
            "ORDER_PROPS_ID" => 3,  // ID свойства заказа c номером телефона
            "NAME" => "Телефон",
            "VALUE" => $phone
        ],
        [
            "ORDER_PROPS_ID" => 2, // ID свойства заказа c email адресом 
            "NAME" => "E-Mail",
            "VALUE" => $email
        ]
    ];

    //создаём новый профиль --------
    $arProfileFields = [
        "NAME" => "Профиль покупателя (" . $phone . ')',
        "USER_ID" => $userId,
        "PERSON_TYPE_ID" => $personalTypeId
    ];

    $profileId = CSaleOrderUserProps::Add($arProfileFields);
    if (!$profileId) {
        return $arFields;
    }

    //добавляем значения свойств к созданному ранее профилю
    foreach ($arProfileProps as $arProp) {
        $resultProp = CSaleOrderUserPropsValue::Add(
            array_merge($arProp, [
                "USER_PROPS_ID" => $profileId,
            ])
        );
    }

    return $arFields;
}

Чтобы проверить добавление, перейдите на страницу покупаталей - Администрирование / Магазин / Покупатели / Список покупателейи найдите добавленного пользователя.

2022-04-02_17-29.png

Затем на на странице покупателя, в соответствующей вкладке найдите профиль с названием Профиль покупателя (7 xxx xxx xx xx)

2022-04-02_17-37.png