Как сделать автоматическое создание заказа при покупке в один клик.
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);



