· 4 years ago · Jun 29, 2021, 08:12 AM
1<?php
2require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
3
4global $USER;
5global $APPLICATION;
6$userId = $USER->GetID();
7
8$user = new CUser();
9
10$finalPhone = $_POST["reg-phone"];
11$finalMail = trim($_POST["reg-email"]);
12$finalFio = $_POST["reg-fio"];
13$finalInn = $_POST["reg-inn"];
14$finalName = $_POST["reg-company"];
15$code = $_POST['code'];
16
17if(empty($finalPhone) || !preg_match("/^[\d\+\(\)]{11,17}$/", $finalPhone)) {
18 $attentionElements[] = 'reg-phone';
19 $error = true;
20 $htmlResult = 'Телефон введён неверно';
21}
22if(empty($finalMail) || !filter_var($finalMail, FILTER_VALIDATE_EMAIL)) {
23 $attentionElements[] = 'reg-email';
24 $error = true;
25 $htmlResult = 'E-Mail введён неверно';
26}
27
28if(empty($finalFio)) {
29 $attentionElements[] = 'reg-fio';
30 $error = true;
31}
32if(empty($finalInn)) {
33 $attentionElements[] = 'reg-inn';
34 $error = true;
35}
36if(empty($finalName)) {
37 $attentionElements[] = 'reg-company';
38 $error = true;
39}
40if(strlen($code) !== 4) {
41 $attentionElements[] = 'reg-code';
42 $error = true;
43}
44
45$smsEvent = new SsdSmsEvents();
46$res = $smsEvent->smsAuth($userId, $code);
47if(!$error && $res) {
48 $strFio = trim($finalFio);
49 $arFio = explode(" ", $strFio);
50
51 $fields = Array(
52 "NAME" => $arFio[1] ? $arFio[1] : '',
53 "LAST_NAME" => $arFio[0] ? $arFio[0] : '',
54 "SECOND_NAME" => $arFio[2] ? $arFio[2] : '',
55 "EMAIL" => $finalMail,
56 "LOGIN" => $finalMail,
57 "PERSONAL_PHONE" => $finalPhone,
58 "UF_COMPANY_NAME" => $finalName,
59 "UF_INN" => $finalInn,
60 "UF_KPP" => $_POST['reg-kpp'],
61 "PERSONAL_NOTES" => $_POST['reg-comment'],
62 "UF_NDS_PRICES" => ($_POST['reg-nds']) ? false : true,
63 );
64 if(!empty($_FILES["user_files"]['tmp_name'][0]) && is_array($_FILES["user_files"])){
65 $fields["UF_FILES"] = makeCurentFilesArrayMultiple("user_files");
66 }
67
68 // Регистрация юр.лица с уже существующим ИНН
69 if(!empty($finalInn) && is_numeric($finalInn) && intval($finalInn) > 0) {
70 $order = array('sort' => 'asc');
71 $tmp = 'sort';
72 //Проверяем есть ли главный аккаунт, если есть, генерируем СМС
73 $arMainUser = CUser::GetList($order, $tmp, array("UF_INN" => intval($finalInn), "UF_MAIN_LEGAL" => true))->Fetch();
74 if (!empty($arMainUser) && ($arMainUser['ID'] != $userId)){
75 $authCode = rand(1000, 9999);
76 $user->Update($arMainUser["ID"], array(
77 "UF_MAIN_LEGAL_CODE" => $authCode,
78 ));
79
80 // Сгенерированный код отсылается на телефон, указанный при регистрации главного юзера
81 $text = "В систему добавлен новый аккаунт ".$arFio[0]." ".$arFio[1]." ".$arFio[2].", ".$finalMail.", ".$finalPhone.". Код авторизации: ".$authCode;
82 sendSms($arMainUser["PERSONAL_PHONE"], $text);
83
84 // Новому юзеру в поле SECOND_LEGAL_MAIN (строка) записывается ID главного юзера
85 $fields["UF_SECOND_LEGAL_MAIN"] = $arMainUser["ID"];
86
87 CUser::SetUserGroup($userId, array_merge(CUser::GetUserGroup($userId), array(21)));
88
89 } else { // Если нет главного аккаунта
90 $arMainUser = CUser::GetList($order, $tmp, array("UF_INN" => intval($finalInn)))->Fetch();
91 // Если такой ИНН уже существует в системе
92 if (!empty($arMainUser) && ($arMainUser['ID'] != $userId)) {
93 // Юзер с уже существующим ИНН становится главным (поле MAIN_LEGAL, чекбокс), генерится код-подтверждение (поле MAIN_LEGAL_CODE), ставится чекбокс Общие заявки и заказы
94 $authCode = rand(1000, 9999);
95 $user->Update($arMainUser["ID"], array(
96 "UF_MAIN_LEGAL" => true,
97 "UF_MAIN_LEGAL_CODE" => $authCode,
98 "UF_COMMON_APPS" => true
99 ));
100 CUser::SetUserGroup($arMainUser["ID"], array_merge(CUser::GetUserGroup($arMainUser["ID"]), array(17)));
101
102 // Сгенерированный код отсылается на телефон, указанный при регистрации главного юзера
103 $text = "В систему добавлен новый аккаунт " . $arFio[0] . " " . $arFio[1] . " " . $arFio[2] . ", " . $finalMail . ", " . $finalPhone . ". Код авторизации: " . $authCode;
104 sendSms($arMainUser["PERSONAL_PHONE"], $text);
105
106 // Новому юзеру в поле SECOND_LEGAL_MAIN (строка) записывается ID главного юзера
107 $fields["UF_SECOND_LEGAL_MAIN"] = $arMainUser["ID"];
108
109 CUser::SetUserGroup($userId, array_merge(CUser::GetUserGroup($userId), array(21)));
110 }
111 }
112
113 CUser::SetUserGroup($userId, array_merge(CUser::GetUserGroup($userId), array(19)));
114 }
115
116 $user->Update($userId, $fields);
117 $strError .= $user->LAST_ERROR;
118
119 if(!$strError) {
120 if(!empty($fields["UF_FILES"])) {
121 $arFile = $fields["UF_FILES"];
122 QEventWithFile::SendImmediate("NEW_USER", "s1", $fields, 'N', "", $arFile);
123
124 } else {
125 QEventWithFile::SendImmediate("NEW_USER", "s1", $fields, 'N', "");
126 }
127
128
129 /* Mindbox event */
130 $arUser = CUser::GetByID($userId)->Fetch();
131 $isSubscribed = ($arUser['UF_MB_SUBSCRIBE']) ? true : false;
132 $ch = curl_init();
133 $deviceUUID = $_COOKIE['mindboxDeviceUUID'];
134 if(!empty($deviceUUID)) {
135 $secretKey = '2hWVAwnRnSyelnzfvb1y';
136 $headers = array(
137 "Content-Type: application/json; charset=utf-8",
138 "Accept: application/json",
139 'Authorization: Mindbox secretKey="' . $secretKey . '"',
140 "User-Agent: " . $_SERVER['HTTP_USER_AGENT'],
141 "X-Customer-IP: " . get_ip()
142 );
143 $data = array(
144 "customer" => [
145 "email" => $fields["EMAIL"],
146 /*
147 "ids" => [
148 "bitrixID" => $userId
149 ],
150 */
151 "sex" => "",
152 "birthDate" => "",
153 "mobilePhone" => $fields["PERSONAL_PHONE"],
154 "lastName" => $fields["LAST_NAME"],
155 "firstName" => $fields["NAME"],
156 "middleName" => $fields["SECOND_NAME"],
157 "timeZone" => "Europe/Moscow",
158 "subscriptions" => [
159 [
160 "brand" => "Ssd",
161 "pointOfContact" => "email",
162 "isSubscribed" => $isSubscribed
163 ]
164 ]
165 ]
166 );
167 curl_setopt_array($ch, array(
168 CURLOPT_URL => 'https://api.mindbox.ru/v3/operations/async?endpointId=ssd&operation=EditCustomer&deviceUUID=' . $deviceUUID,
169 CURLOPT_RETURNTRANSFER => true,
170 CURLOPT_POST => true,
171 CURLOPT_HTTPHEADER => $headers,
172 CURLOPT_POSTFIELDS => json_encode($data)
173 ));
174 $response = curl_exec($ch);
175 curl_close($ch);
176 }
177
178 $status = 'ok';
179 $htmlResult = 'Регистрация завершена успешно.';
180
181 } else {
182 $status = 'fail';
183 $htmlResult = $strError;
184 }
185
186} else {
187 $status = 'fail';
188 $htmlResult = $htmlResult ?? 'Заполните поля со звёздочкой';
189}
190
191$result = Array(
192 'STATUS' => $status,
193 'HTML' => $htmlResult,
194 'ATTENTION' => $attentionElements,
195 'USER_ID' => $userId
196);
197
198$APPLICATION->RestartBuffer();
199echo json_encode($result);