Joywork/cron/publishToZipal.php
2026-05-22 21:21:54 +03:00

210 lines
8.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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 zipal_objects 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)) {
if (!$obj['zipal_id'] || $obj['zipal_id'] == null) {
$sql = "UPDATE zipal_objects SET sended = 0, send_to_update = 0 WHERE id = $obj[id]";
mysql_query($sql);
continue;
}
$objectId = $obj['object_id'];
$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']);
$requestToSend = [];
$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;
$requestToSend['request']['destination'] = json_decode($obj['destinations'], true);
$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 $result;
$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 zipal_objects SET error_text = '$result' 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);
}
$sql = "UPDATE objects SET add_to_zipal='0' WHERE id=$objectId";
mysql_query($sql);
}
$logText = "Ошибка публикации через кнопку С отчетами: $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 zipal_objects SET error_text = NULL, published = 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);
}
}
$sql = "UPDATE objects SET add_to_zipal='1' WHERE id=$objectId";
mysql_query($sql);
$logText = "Опубликовано через кнопку С отчетами на $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);
$packageDestinations = json_decode($obj['destinations'], true);
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, price_period, on_moderation, zipal_objects_id)
VALUES ('$objectId', '$objData[id_add_user]', '$curUser->id', NOW(), NOW(), DATE_ADD(NOW(), INTERVAL $obj[days] DAY), '$obj[days]', 'ZIPAL', '$zipalBase', '$zipalBase', '0', '$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;
//смотрим цену зипала
foreach ($dest['price'] as $price) {
if ($price['type'] === $dbDestFound['placementType']) {
$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, zipal_objects_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 zipal_objects SET error_text = '$result' 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);
}
$sql = "UPDATE objects SET add_to_zipal='0' WHERE id=$objectId";
mysql_query($sql);
}
$logText = "Ошибка публикации через кнопку С отчетами: $result";
$sqlLog = "INSERT INTO object_publish_log(object_id, created_at, user_id, log_text) VALUES ('$objectId', NOW(), '$curUser->id', '$logText')";
mysql_query($sqlLog);
}
}
sleep(2);
}
?>
</body>
</html>