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