Joywork/cron/publishToZipal.php

210 lines
8.9 KiB
PHP
Raw Normal View History

2026-05-22 20:21:54 +02:00
<?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>