217 lines
9.7 KiB
PHP
217 lines
9.7 KiB
PHP
<?php
|
||
require_once($_SERVER['DOCUMENT_ROOT']."/config.php");
|
||
|
||
set_time_limit(0);
|
||
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
|
||
?>
|
||
<!doctype html>
|
||
<html>
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<title>Публикация объектов через пакеты на Zipal.ru</title>
|
||
</head>
|
||
|
||
<body>
|
||
<?php
|
||
|
||
$sql = "SELECT * from advertising_package_object_publish WHERE sended = 1 AND published = 0 AND unpublish = 0 ORDER BY id DESC";
|
||
$rez_obj = mysql_query($sql);
|
||
|
||
while($obj = mysql_fetch_assoc($rez_obj)) {
|
||
|
||
$objectId = $obj['object_id'];
|
||
$packageId = $obj['advertising_package_id'];
|
||
|
||
$sqlPackData = "SELECT * from advertising_package WHERE id = $packageId";
|
||
$package = mysql_fetch_assoc(mysql_query($sqlPackData));
|
||
|
||
$sqlObjData = "SELECT id, nazv, id_add_user from objects WHERE id = $objectId";
|
||
$objData = mysql_fetch_assoc(mysql_query($sqlObjData));
|
||
|
||
$curUser = new User();
|
||
$curUser->get($obj['user_id']);
|
||
|
||
$login = $curUser->zipal_login;
|
||
$password = $curUser->zipal_password;
|
||
|
||
if (empty($login) || empty($password)) {
|
||
$login = $curUser->agencyZipalLogin;
|
||
$password = $curUser->agencyZipalPassword;
|
||
}
|
||
|
||
$requestPublishPrices = [];
|
||
$requestPublishPrices['login'] = $login;
|
||
$requestPublishPrices['password'] = $password;
|
||
$requestPublishPrices['method'] = 'GetPrices';
|
||
$requestPublishPrices['request'] = [];
|
||
$requestPublishPrices['request']['requestType'] = 'GetPricesByObjectRequestType';
|
||
$requestPublishPrices['request']['objectId'] = $obj['zipal_id'];
|
||
$requestPublishPrices['request']['days'] = $obj['days'];
|
||
|
||
$requestToSend = [];
|
||
|
||
$requestToSend['login'] = $login;
|
||
$requestToSend['password'] = $password;
|
||
$requestToSend['method'] = 'Publish';
|
||
$requestToSend['request'] = [];
|
||
$requestToSend['request']['requestType'] = 'CustomPublishRequestType';
|
||
$requestToSend['request']['objectId'] = $obj['zipal_id'];
|
||
$requestToSend['request']['days'] = $obj['days'];
|
||
$requestToSend['request']['autoProlong'] = false;
|
||
|
||
$destinations = [];
|
||
|
||
$sqlTargets = "SELECT * from advertising_package_destinations WHERE advertising_package_id=$obj[advertising_package_id] AND deleted = 0";
|
||
$rezTargets = mysql_query($sqlTargets);
|
||
|
||
$packageDestinations = [];
|
||
|
||
while($dest = mysql_fetch_assoc($rezTargets)) {
|
||
$d = [];
|
||
$d["destination"] = $dest["destination"];
|
||
$d["feed"] = $dest["feed"] == 1 ? true : false;
|
||
$d["placementType"] = $dest["placement_type"];
|
||
$destinations[] = $d;
|
||
array_push($packageDestinations, $dest);
|
||
}
|
||
|
||
$requestToSend['request']['destination'] = $destinations;
|
||
|
||
$request = json_encode($requestToSend);
|
||
$requestPrices = json_encode($requestPublishPrices);
|
||
|
||
//echo $request;
|
||
//echo "<br/>";
|
||
|
||
$user_agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; HTC_Touch_Diamond2_T5353; Windows Phone 6.5)';
|
||
|
||
//делаем запрос к zipal
|
||
$result = curl_request_zipal_json("https://zipal.ru/ws/json", $obj['user_id'], $user_agent, $request);
|
||
$resultPrices = curl_request_zipal_json("https://zipal.ru/ws/json", $obj['user_id'], $user_agent, $requestPrices);
|
||
|
||
//echo $resultPrices;
|
||
|
||
$jsonResult = json_decode($result, true);
|
||
$jsonResultPrices = json_decode($resultPrices, true);
|
||
|
||
if (!$jsonResult) {
|
||
$jsonResult['resultCode'] = "FAIL";
|
||
$jsonResult['result'] = "NO RESPONSE";
|
||
}
|
||
|
||
if ($jsonResult['resultCode'] == "FAIL") {
|
||
$sql = "UPDATE advertising_package_object_publish SET error_text = '$result', active=0 WHERE id = $obj[id]";
|
||
mysql_query($sql);
|
||
|
||
if (empty($obj['error_text'])) {
|
||
if (empty($curUser->zipal_balance)) {
|
||
$newBalance = $curUser->agencyZipalBalance + $obj['price'];
|
||
$sql = "UPDATE users SET zipal_balance='$newBalance' WHERE id=" . $curUser->agencyId;
|
||
mysql_query($sql);
|
||
} else {
|
||
$newBalance = $curUser->zipal_balance + $obj['price'];
|
||
$sql = "UPDATE users SET zipal_balance='$newBalance' WHERE id=" . $curUser->id;
|
||
mysql_query($sql);
|
||
}
|
||
}
|
||
$logText = "Ошибка публикации через пакет $package[name] (ID = $packageId): $result";
|
||
|
||
$sqlLog = "INSERT INTO object_publish_log(object_id, created_at, user_id, log_text) VALUES ('$objectId', NOW(), '$curUser->id', '$logText')";
|
||
mysql_query($sqlLog);
|
||
} else {
|
||
if ($jsonResult['result']['status'] == "SuccessPublishResponseType") {
|
||
$sql = "UPDATE advertising_package_object_publish SET error_text = NULL, published = 1, active=1 WHERE id = $obj[id]";
|
||
mysql_query($sql);
|
||
|
||
if (!empty($obj['error_text'])) {
|
||
//если была ошибка перед этим - вычитаем деньги и ставим флаг в JW
|
||
|
||
if (empty($curUser->zipal_balance)) {
|
||
$newBalance = $curUser->agencyZipalBalance - $obj['price'];
|
||
$sql = "UPDATE users SET zipal_balance='$newBalance' WHERE id=" . $curUser->agencyId;
|
||
mysql_query($sql);
|
||
} else {
|
||
$newBalance = $curUser->zipal_balance - $obj['price'];
|
||
$sql = "UPDATE users SET zipal_balance='$newBalance' WHERE id=" . $curUser->id;
|
||
mysql_query($sql);
|
||
}
|
||
}
|
||
|
||
$logText = "Опубликован через пакет $package[name] (ID = $packageId) на $obj[days] дней";
|
||
|
||
$sqlLog = "INSERT INTO object_publish_log(object_id, created_at, user_id, log_text) VALUES ('$objectId', NOW(), '$curUser->id', '$logText')";
|
||
mysql_query($sqlLog);
|
||
|
||
if ($packageDestinations && $jsonResultPrices['resultCode'] == "OK") {
|
||
|
||
$zipalBase = $jsonResultPrices['result']['basePrice'] / 100;
|
||
|
||
$sqlBaseStat = "INSERT INTO object_publish_statistic(object_id, user_owner_id, publish_user_id, created_at, publish_start_date, publish_end_date, days_count, destination, price, advertising_package_object_publish_id)
|
||
VALUES ('$objectId', '$objData[id_add_user]', '$curUser->id', NOW(), NOW(), DATE_ADD(NOW(), INTERVAL $obj[days] DAY), '$obj[days]', 'ZIPAL', '$zipalBase', '$obj[id]')";
|
||
mysql_query($sqlBaseStat);
|
||
|
||
foreach ($jsonResultPrices['result']['destination'] as $dest) {
|
||
//записываем актуальные цены публикации на те площадки, куда публикуем
|
||
|
||
$dbDestFound = null;
|
||
|
||
//ищем площадку, используется ли она в пакете
|
||
foreach ($packageDestinations as $dbDest) {
|
||
if ($dest['destination'] === $dbDest['destination']) {
|
||
$dbDestFound = $dbDest;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//если такая площадка используется, то записываем ее в БД
|
||
if ($dbDestFound != null) {
|
||
$publishPrice = 0;
|
||
|
||
//если указана цена руками - фиксируем ее
|
||
if ($dbDestFound['manual_price'] > 0) {
|
||
if ($dbDestFound['destination'] === 'AVITO') {
|
||
$publishPrice = $dbDestFound['manual_price'];
|
||
} else {
|
||
$publishPrice = $dbDestFound['manual_price'] * $obj['days'];
|
||
}
|
||
} else {
|
||
//иначе смотрим цену зипала
|
||
foreach ($dest['price'] as $price) {
|
||
if ($price['type'] === $dbDestFound['placement_type']) {
|
||
$publishPrice = $price['price'] / 100;
|
||
}
|
||
}
|
||
}
|
||
|
||
$sqlStat = "INSERT INTO object_publish_statistic(object_id, user_owner_id, publish_user_id, created_at, publish_start_date, publish_end_date, days_count, destination, price, advertising_package_object_publish_id)
|
||
VALUES ('$objectId', '$objData[id_add_user]', '$curUser->id', NOW(), NOW(), DATE_ADD(NOW(), INTERVAL $obj[days] DAY), '$obj[days]', '$dbDestFound[destination]', '$publishPrice', '$obj[id]')";
|
||
mysql_query($sqlStat);
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
$sql = "UPDATE advertising_package_object_publish SET error_text = '$result', active=0 WHERE id = $obj[id]";
|
||
mysql_query($sql);
|
||
|
||
if (empty($obj['error_text'])) {
|
||
if (empty($curUser->zipal_balance)) {
|
||
$newBalance = $curUser->agencyZipalBalance + $obj['price'];
|
||
$sql = "UPDATE users SET zipal_balance='$newBalance' WHERE id=" . $curUser->agencyId;
|
||
mysql_query($sql);
|
||
} else {
|
||
$newBalance = $curUser->zipal_balance + $obj['price'];
|
||
$sql = "UPDATE users SET zipal_balance='$newBalance' WHERE id=" . $curUser->id;
|
||
mysql_query($sql);
|
||
}
|
||
}
|
||
|
||
$logText = "Ошибка публикации через пакет $package[name] (ID = $packageId): $result";
|
||
|
||
$sqlLog = "INSERT INTO object_publish_log(object_id, created_at, user_id, log_text) VALUES ('$objectId', NOW(), '$curUser->id', '$logText')";
|
||
mysql_query($sqlLog);
|
||
}
|
||
}
|
||
}
|
||
?>
|
||
</body>
|
||
</html>
|