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

217 lines
9.7 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 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>