[ "verify_peer" => false, "verify_peer_name" => false, ], ]; $secret = "YnFN1EcbB4osQyKx53OoMs0seHcIcoUVv2mCQOleHdn9o07bIniM5TreQNvQtgsQo6zWxsxLNFbSBrywjmerU5VnKZVQD1EGVcO"; $secret_crm = "lk_evolution_the_best_leasing_company_of_the_world_sSOvumhogyAtZydpaITb"; //$token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImNybSJ9.WxzNiB4W5kwqZoy6-kenc1X6Q7XDCVjGraux9rU9zro"; //print \Bitrix\Main\Web\JWT::encode(["username" => "crm"], $secret, 'HS256', $keyId = null, $head = null); //die(); $auth = []; //$token = ""; use Bitrix\Main\Context, Bitrix\Main\Type\DateTime, Bitrix\Main\Loader, Bitrix\Iblock; if($_SERVER['REMOTE_USER'] && strpos($_SERVER['REMOTE_USER'], "Bearer") > -1) { $token = str_replace("Bearer ", "", $_SERVER['REMOTE_USER']); try { $auth = (array) \Bitrix\Main\Web\JWT::decode($token, $secret, ["HS256"]); //print json_encode([ // "status" => "success", // "token" => $auth['username'], //]); //die(); } catch(\Exception $e) { print json_encode([ "status" => "error", "error" => "wrong_jwt", "message" => $e->getMessage(), ]); die(); } } switch ($METHOD) { case 'GET': { $REQ = $_GET; } break; case 'POST': { if($_SERVER['HTTP_ACCEPT'] == 'application/json' || strstr($_SERVER['CONTENT_TYPE'], 'application/json') !== false) { $BODY = json_decode(file_get_contents('php://input'), true); } else { $BODY = $_POST; } if(is_array($BODY)) { $REQ = array_merge($BODY, $_REQUEST); } else { $REQ = $_REQUEST; } } break; case 'OPTIONS': { die(); } break; default: { die(); } break; } switch($PARAM_1) { case "user": { switch($PARAM_2) { case "registration": { if($auth['username'] !== 'crm') { header('HTTP/1.0 401 Unauthorized'); print json_encode(["status" => "error", "error" => "unauthorized", "message" => "Unauthorized"]); die(); } $existedUserRes = \CUser::GetByLogin($REQ["email"]); if($existedUser = $existedUserRes->Fetch()) { print json_encode([ "status" => "error", "error" => "user_already_registered", "message" => "User already registered", ]); } else { $user = new \CUser; $profile = [ "XML_ID" => $REQ['crm_id'], "LOGIN" => $REQ['email'], "NAME" => $REQ['firstname'], "SECOND_NAME" => $REQ['secondname'], "LAST_NAME" => $REQ['lastname'], "PASSWORD" => $REQ['password'], "CONFIRM_PASSWORD" => $REQ['password'], "EMAIL" => $REQ['email'], "UF_ORG_TITLE" => (string)$REQ['org_title'], "UF_INN" => (string)$REQ['inn'], "UF_KPP" => (string)$REQ['kpp'], "UF_OGRN" => (string)$REQ['ogrn'], "UF_PHONE" => (int)$REQ['phone'], ]; $ID = $user->Add($profile); if (intval($ID) > 0) { print json_encode([ "status" => "success" ]); } else { $error = $user->LAST_ERROR; //echo "
".print_r($arFields, true)."
"; //echo $error; print json_encode([ "status" => "error", "error" => "wrong_payload", "message" => $error, ]); } } die(); } break; default: { print json_encode([ "status" => "error", "error" => "wrong_user_uri", "message" => "Empty user URI", ]); die(); } break; } } break; case "catalog": { switch($PARAM_2) { case "count": { if(CModule::IncludeModule('iblock')) { $filter = [ "ACTIVE" => "Y", "IBLOCK_ID" => 1 ]; if(!empty($REQ['BRAND_ID'])) { $filter["PROPERTY_BRAND"] = $REQ['BRAND_ID']; } if(!empty($REQ['MODEL_ID'])) { $filter["PROPERTY_MODEL"] = $REQ['MODEL_ID']; } if(!empty($REQ['GEAR'])) { $filter["PROPERTY_GEAR"] = $REQ['GEAR']; } if(!empty($REQ['DRIVE'])) { $filter["PROPERTY_DRIVE"] = $REQ['DRIVE']; } if(!empty($REQ['BODY'])) { $filter["PROPERTY_BODY"] = $REQ['BODY']; } if(!empty($REQ['ENGINE_FUEL'])) { $filter["PROPERTY_ENGINE_FUEL"] = $REQ['ENGINE_FUEL']; } if(!empty($REQ['ENGINE_VOLUME_FROM']) || !empty($REQ['ENGINE_VOLUME_TO'])) { $filter['> "ASC", "NAME" => "ASC" ], $filter, [], []); print json_encode([ "total" => $total, ]); } } break; case "brands": { if(CModule::IncludeModule('iblock')) { $brands = []; $brands_res = CIBlockElement::GetList(["NAME" => "ASC"], ["ACTIVE" => "Y", "IBLOCK_ID" => 8], false, []); while ($brands_ob_element = $brands_res->GetNextElement()) { $brands_ar_res = $brands_ob_element->GetFields(); $brands_ar_res['PROPERTIES'] = $brands_ob_element->GetProperties(); $brands[] = [ "ID" => $brands_ar_res['ID'], "NAME" => $brands_ar_res['NAME'], "UID" => $brands_ar_res['PROPERTIES']['UID']['VALUE'], "CODE" => $brands_ar_res['CODE'], ]; } print json_encode([ "brands" => $brands, ]); } } break; case "models": { if(CModule::IncludeModule('iblock')) { $models = []; $models_res = CIBlockElement::GetList(["NAME" => "ASC"], ["ACTIVE" => "Y", "IBLOCK_ID" => 9, "PROPERTY_BRAND_UID" => $REQ['BRAND_UID']], false, []); while ($models_ob_element = $models_res->GetNextElement()) { $models_ar_res = $models_ob_element->GetFields(); $models_ar_res['PROPERTIES'] = $models_ob_element->GetProperties(); $models[] = [ "ID" => $models_ar_res['ID'], "NAME" => $models_ar_res['NAME'], "UID" => $models_ar_res['PROPERTIES']['UID']['VALUE'], "CODE" => $models_ar_res['CODE'], ]; } print json_encode([ "models" => $models, ]); } } break; case "modifications": { if(CModule::IncludeModule('iblock')) { $modifications = []; $modifications_res = CIBlockElement::GetList(["NAME" => "ASC"], ["ACTIVE" => "Y", "IBLOCK_ID" => 10, "PROPERTY_MODEL_UID" => $REQ['MODEL_UID']], false, []); while ($modifications_ob_element = $modifications_res->GetNextElement()) { $modifications_ar_res = $modifications_ob_element->GetFields(); $modifications_ar_res['PROPERTIES'] = $modifications_ob_element->GetProperties(); $modifications[] = [ "NAME" => $modifications_ar_res['NAME'], "ID" => $modifications_ar_res['ID'], ]; } print json_encode([ "modifications" => $modifications, ]); } } break; case "parameters": { if(CModule::IncludeModule('iblock')) { $GEAR = []; $DRIVE = []; $BODY = []; $ENGINE_POWER = []; $ENGINE_VOLUME = []; $ENGINE_FUEL = []; $iterator = CIBlockElement::GetPropertyValues(1, ['ACTIVE' => 'Y', ], false, ['ID' => [ 7, 8, 9, 10, 11, 12, ] ]); while ($row = $iterator->Fetch()) { if(!in_array($row[7], $GEAR)) { array_push($GEAR, $row[7]); } if(!in_array($row[8], $DRIVE)) { array_push($DRIVE, $row[8]); } if(!in_array($row[9], $BODY)) { array_push($BODY, $row[9]); } if(!in_array(floor($row[10]), $ENGINE_POWER)) { array_push($ENGINE_POWER, floor($row[10])); } if(!in_array(floor($row[11]), $ENGINE_VOLUME)) { array_push($ENGINE_VOLUME, floor($row[11])); } if(!in_array($row[12], $ENGINE_FUEL)) { array_push($ENGINE_FUEL, $row[12]); } } sort($ENGINE_POWER); sort($ENGINE_VOLUME); print json_encode([ "bodies" => $BODY, "gears" => $GEAR, "drives" => $DRIVE, "engine_powers" => [ $ENGINE_POWER[0], $ENGINE_POWER[count($ENGINE_POWER) - 1] ], "engine_volumes" => [ $ENGINE_VOLUME[0], $ENGINE_VOLUME[count($ENGINE_VOLUME) - 1] ], "engine_fuels" => $ENGINE_FUEL, ]); } } break; } } break; case "regions": { if(CModule::IncludeModule('iblock')) { $regions = []; $regions_res = CIBlockElement::GetList(["SORT" => "ASC", "NAME" => "ASC"], ["ACTIVE" => "Y", "IBLOCK_ID" => 5, ], false, []); while ($regions_ob_element = $regions_res->GetNextElement()) { $regions_ar_res = $regions_ob_element->GetFields(); $regions_ar_res['PROPERTIES'] = $regions_ob_element->GetProperties(); $regions_ar_res['PROPERTIES']['REGION']['RELATED'] = get_related(15, $regions_ar_res['PROPERTIES']['REGION']['VALUE']); $regions[] = [ "NAME" => $regions_ar_res['PROPERTIES']['REGION']['RELATED']['NAME'], "ID" => $regions_ar_res['PROPERTIES']['REGION']['RELATED']['ID'], ]; } print json_encode([ "regions" => $regions, ]); } } break; case "account": { switch($PARAM_2) { case "token": { print \Bitrix\Main\Web\JWT::encode(["acc_number" => $REQ['acc_number']], $secret, 'HS256', null, null); die(); } break; case "auth": { switch($PARAM_3) { case "email": { $user = new \CUser; $ar_auth_result = $user->Login($REQ['email'], $REQ['password'], "N"); if($ar_auth_result == 1) { $rs_user = \CUser::GetByLogin($REQ['email']); $ar_user = $rs_user->Fetch(); //print_r($ar_user); $user_data = [ "email" => $ar_user['LOGIN'], "name" => $ar_user['NAME'], "secondname" => $ar_user['SECOND_NAME'], "lastname" => $ar_user['LAST_NAME'], "phone" => $ar_user['UF_PHONE'], ]; $company_data = [ "inn" => $ar_user['UF_INN'], "kpp" => $ar_user['UF_KPP'], "ogrn" => $ar_user['UF_OGRN'], "title" => $ar_user['UF_ORG_TITLE'], ]; print json_encode([ "status" => "success", "user" => $user_data, "company" => $company_data, "token" => \Bitrix\Main\Web\JWT::encode(["acc_number" => $ar_user['XML_ID']], $secret, 'HS256', null, null), ]); } else { print json_encode([ "status" => "error", "error" => "wrong_credentials", "message" => "Wrong username or password", ]); } print $arAuthResult; } break; case "phone": { } break; } die(); } break; case "contracts": { if($auth['acc_number']) { $token = \Bitrix\Main\Web\JWT::encode(["acc_number" => $auth['acc_number']], $secret_crm, 'HS256', null, null); $parameters = ["acc_number" => $auth['acc_number']]; $url = API_HOST."/lk/Account/GetContracts/?".http_build_query($parameters); $c = curl_init(); curl_setopt($c, CURLOPT_URL, $url); curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($c, CURLOPT_TIMEOUT, 30); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($c, CURLOPT_POST, 0); curl_setopt($c, CURLOPT_HTTPHEADER, [ "Content-Type: application/json", "Authorization: Bearer ".$token."", ]); $response = curl_exec($c); curl_close($c); print json_encode([ "status" => "success", "contracts" => $response, ]); } else { header('HTTP/1.0 401 Unauthorized'); print json_encode(["status" => "error", "error" => "unauthorized", "message" => "Unauthorized"]); } die(); } break; case "calendar": { if($auth['acc_number']) { $token = \Bitrix\Main\Web\JWT::encode(["acc_number" => $auth['acc_number']], $secret, 'HS256', null, null); $parameters = ["acc_number" => $auth['acc_number']]; $url = API_HOST."/lk/Account/GetPaymentCalendar/?".http_build_query($parameters); $c = curl_init(); curl_setopt($c, CURLOPT_URL, $url); curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($c, CURLOPT_TIMEOUT, 30); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($c, CURLOPT_POST, 0); curl_setopt($c, CURLOPT_HTTPHEADER, [ "Content-Type: application/json", "Authorization: Bearer ".$token."", ]); $response = curl_exec($c); curl_close($c); print json_encode([ "status" => "success", "contracts" => $response, ]); } else { header('HTTP/1.0 401 Unauthorized'); print json_encode(["status" => "error", "error" => "unauthorized", "message" => "Unauthorized"]); } die(); } break; case "contract": { switch($PARAM_4) { case "osago": { if($auth['acc_number']) { $token = \Bitrix\Main\Web\JWT::encode(["acc_number" => $auth['acc_number']], $secret, 'HS256', null, null); $parameters = ["acc_number" => $auth['acc_number']]; $url = API_HOST."/lk/Account/GetPaymentCalendar/?".http_build_query($parameters); $c = curl_init(); curl_setopt($c, CURLOPT_URL, $url); curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($c, CURLOPT_TIMEOUT, 30); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($c, CURLOPT_POST, 0); curl_setopt($c, CURLOPT_HTTPHEADER, [ "Content-Type: application/json", "Authorization: Bearer ".$token."", ]); $response = curl_exec($c); curl_close($c); print json_encode([ "status" => "success", "contracts" => $response, ]); } else { header('HTTP/1.0 401 Unauthorized'); print json_encode(["status" => "error", "error" => "unauthorized", "message" => "Unauthorized"]); } die(); } break; } } break; default: { print json_encode([ "status" => "error", "error" => "wrong_user_uri", "message" => "Empty user URI", ]); die(); } break; } } break; case "calculation": { /* $response = $httpClient->post(API_HOST."/calculator/", [ "car_price" => $REQ['car_price'], "initial_payment" => $REQ['initial_payment'], "lease_period" => $REQ['lease_period'], "redemption_payment" => $REQ['redemption_payment'], ], false); print "response\n\n"; print_r($response); */ $payload = json_encode([ "car_price" => $REQ['car_price'], "initial_payment" => $REQ['initial_payment'], "lease_period" => $REQ['lease_period'], "redemption_payment" => $REQ['redemption_payment'], ]); $c = curl_init(); curl_setopt($c, CURLOPT_URL, API_HOST."/calculator/"); curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($c, CURLOPT_TIMEOUT, 30); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($c, CURLOPT_POST, 1); curl_setopt($c, CURLOPT_POSTFIELDS, $payload); curl_setopt($c, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); $response = curl_exec($c); curl_close($c); /* $context = $arrContextOptions; $context['http'] = [ 'method' => 'POST', 'header' => 'Content-Type: application/x-www-form-urlencoded', 'content' => [ "car_price" => $REQ['car_price'], "initial_payment" => $REQ['initial_payment'], "lease_period" => $REQ['lease_period'], "redemption_payment" => $REQ['redemption_payment'], ] ]; //print_r($context); $response = file_get_contents(API_HOST."/calculator/", false, stream_context_create($context)); //$json = json_decode($response, true); */ print $response; //print json_encode($response); die(); } break; default: { print json_encode([]); die(); } break; }