Бортовой журнал Ктулху

Автоматическая регистрация пользователя по номеру телефона в Битриксе

Как сделать автоматическое создание заказа при покупке в один клик.

 

init.php

/**
* регистрирует пользователя по номеру телефона
* на входе номер, на выходе id пользователя в любом случае
*/
function registerUserByPhone($phone)
{
 if(checkUserByPhone($phone) == false){ // если пользователь не зарегистрирован
 $password = rand(0, 9).rand(14, 99).rand().rand().rand().rand().rand().rand().rand().rand();
 $user = new CUser;
 $fields = Array(
 "NAME" => "",
 "LAST_NAME" => "",
 "EMAIL" => "autoreg-".date('ymdhis')."@".$_SERVER['HTTP_HOST'],
 "LOGIN" => $phone, // логин - номер телефона без +
 "LID" => "ru",
 "ACTIVE" => "Y",
 "GROUP_ID" => array(3),
 "PASSWORD" => $password,
 "CONFIRM_PASSWORD" => $password,
 "PERSONAL_PHONE" => $phone,
 );
 $user->Add($fields);
 
 if (intval($ID) > 0):
 // echo "string";
 $USER->Authorize($ID);// сразу же авторизуем
 return $ID;
 else:
 // echo $user->LAST_ERROR;
 endif;

 } else { // если пользователь зарегистрирован
 return checkUserByPhone($phone);
 }
}
/**
* id пользователя по номеру телефона
* возвращает false если не существует
* возвращает id если существует
*/
function checkUserByPhone($phone) 
{
 $by = "ID";
 $order = "ASC";
 $rsUser = CUser::GetList(($by="ID"), ($order="desc"), array("PERSONAL_PHONE"=>$phone),array());
 $arUser = $rsUser->Fetch();
 
 if(!empty($arUser['ID']))
 {
 return $arUser['ID']; // пользователь существует
 }
 else
 {
 return false; // пользователь не существует
 } 
}

Вызов и авторизация. Поместить на странцу вызываемую через ajax, передавать массив с id товара и телефоном.

global $USER;
 // преобразуем url в массив
 $fields_arr = urldecode($_POST['quickordr']);
 parse_str($fields_arr, $get_array);
// регистрируем если не зарегистрирован, получаем id пользователя
 $res = registerUserByPhone((int)$get_array['phone']); // бывает что с первого раза не авторизует
 $res = registerUserByPhone((int)$get_array['phone']); // чтобы точно авторизовало
 if($res !== false) {
 $USER->Authorize($res);
 }
// добавлять в корзину 
 Add2BasketByProductID($get_array['pid'], 1, false, false);
// создавать заказ с этим товаром
 $arFields = array( 
 "LID" => SITE_ID, 
 "PERSON_TYPE_ID" => 1, 
 "PAYED" => "N", 
 "CANCELED" => "N", 
 "STATUS_ID" => "N", 
 "PRICE" => 0, 
 "CURRENCY" => CSaleLang::GetLangCurrency(SITE_ID), 
 "USER_ID" => IntVal($USER->GetID()), 
 "PAY_SYSTEM_ID" => 1, 
 "PRICE_DELIVERY" => 0, 
 "DELIVERY_ID" => 1,
 "TAX_VALUE" => 0.0, 
 "USER_DESCRIPTION" => "Покупка в один клик" 
 );

 $ORDER_ID = CSaleOrder::Add($arFields); 
 CSaleBasket::OrderBasket($ORDER_ID, CSaleBasket::GetBasketUserID(), SITE_ID, false);
if (!$ORDER_ID) 
 die("Заказ не добавили".var_dump($arFields)); 
 else 
 echo $ORDER_ID; 
 $ORDER_ID = IntVal($ORDER_ID);