2021-12-03 08:40:16 +03:00

668 lines
17 KiB
PHP

<?
//define('BX_SECURITY_SESSION_VIRTUAL', true);
require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php");
header('Content-Type: application/json; charset=utf-8');
$httpClient = new \Bitrix\Main\Web\HttpClient();
const API_HOST = "https://web-api.evoleasing.ru:8443";
$PARAM_1 = $_REQUEST["PARAM_1"];
$PARAM_2 = $_REQUEST["PARAM_2"];
$PARAM_3 = $_REQUEST["PARAM_3"];
$PARAM_4 = $_REQUEST["PARAM_4"];
$HEADERS = apache_request_headers();
$METHOD = $_SERVER['REQUEST_METHOD'];
$REQ = [];
$ORIGINS = [
'http://localhost:3000',
'https://evo.quickcode.ru',
'https://lk-evo.quickcode.ru',
'https://wow.evoleasing.ru',
'https://www.evoleasing.ru',
'http://lk.evoleasing.ru',
'https://lk.evoleasing.ru',
];
//$referer = $HEADERS['Referer'] ? $HEADERS['Referer'] : $HEADERS['referer'];
$origin = $HEADERS['Origin'] ? $HEADERS['Origin'] : $HEADERS['origin'];
if($origin == "")
{
foreach($ORIGINS as $ORIGIN)
{
if(strpos($referer, $ORIGIN) !== FALSE)
{
$origin = $ORIGIN;
break;
}
}
}
if(in_array($origin, $ORIGINS))
{
header('Access-Control-Allow-Origin: ' . $origin);
// $HEADERS['X-Full-Url-From-Referer'] = str_replace($origin, "", $referer);
// if ($HEADERS['X-Full-Url-From-Referer'] == "") {
// $HEADERS['X-Full-Url-From-Referer'] = "/";
// }
}
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Cache-Control, Accept, X-Full-Url");
header('Pragma: no-cache');
header('Cache-Control: no-cache');
header('Access-Control-Allow-Credentials: true');
//print_r(json_encode($_SERVER));
//die();
$arrContextOptions = [
"ssl" => [
"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 "<pre>".print_r($arFields, true)."</pre>";
//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['><PROPERTY_ENGINE_VOLUME'] = [ !empty($REQ['ENGINE_VOLUME_FROM']) ? $REQ['ENGINE_VOLUME_FROM'] : 0, !empty($REQ['ENGINE_VOLUME_TO']) ? $REQ['ENGINE_VOLUME_TO'] : 10000 ];
}
$total = CIBlockElement::GetList([ "SORT" => "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;
}