Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/local/yamarkethook/lib/ |
Upload File : |
<?php namespace Wbs24\Yamarkethook; class Main { protected $campaignId; protected $accessToken; protected $applicationId; protected $wrappers; public function __construct($accessSettings = [], $objects = []) { $this->campaignId = $accessSettings['campaignId'] ?? false; $this->accessToken = $accessSettings['accessToken'] ?? false; $this->applicationId = $accessSettings['applicationId'] ?? false; $this->wrappers = new \stdClass(); $this->wrappers->Curl = $objects['Curl'] ?? new Wrappers\Curl(); } public function getSafeRegionName($region) { return mb_ereg_replace("/[^a-zа-я]/i", "", $region); } public function getRegionChildren($regionId) { if (!$regionId) return false; $url = 'https://api.partner.market.yandex.ru/v2/regions/'.$regionId.'/children.json'; $result = $this->sendQueryToYandexApi($url); $assocResult = json_decode($result, true); return $assocResult; } public function getRegionId($regionName) { if (!$regionName) return false; $url = 'https://api.partner.market.yandex.ru/v2/regions.json?name='.urlencode($regionName); $result = $this->sendQueryToYandexApi($url); $assocResult = json_decode($result, true); return $assocResult['regions'][0]['id'] ?? false; } public function getOutletCodes($regionId = false) { $outletCodes = []; $pageToken = false; do { $result = $this->getOutlets($pageToken, $regionId); $assocResult = json_decode($result, true); $pageToken = $assocResult['paging']['nextPageToken'] ?? false; $outlets = $assocResult['outlets'] ?? false; foreach ($outlets as $outlet) { $visibility = $outlet['visibility'] ?? false; if ($visibility != 'VISIBLE') continue; $outletCodes[] = $outlet['shopOutletCode']; } } while ($pageToken); return $outletCodes; } protected function getOutlets($pageToken = false, $regionId = false) { $url = 'https://api.partner.market.yandex.ru/v2/campaigns/'.$this->campaignId.'/outlets.json'; $param = []; if ($pageToken) $param['page_token'] = $pageToken; if ($regionId) $param['region_id'] = $regionId; $query = http_build_query($param); if ($query) $url .= '?'.$query; return $this->sendQueryToYandexApi($url); } protected function sendQueryToYandexApi($url) { $ch = $this->wrappers->Curl->curl_init($url); $this->wrappers->Curl->curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $this->wrappers->Curl->curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Authorization: OAuth oauth_token="'.$this->accessToken.'", oauth_client_id="'.$this->applicationId.'"', ]); $response = $this->wrappers->Curl->curl_exec($ch); $this->wrappers->Curl->curl_close($ch); return $response; } public function excludeOutletsByRegions(array $outletCodes, string $regionIdsAsString): array { $regionIds = $this->getRegionIdsFromString($regionIdsAsString); $excludeOutlets = []; foreach ($regionIds as $regionId) { $outlets = $this->getOutletCodes($regionId); $excludeOutlets = array_merge($excludeOutlets, $outlets); } $cleanedOutlets = array_diff($outletCodes, $excludeOutlets); return array_values($cleanedOutlets); } protected function getRegionIdsFromString(string $regionIdsAsString): array { $regionIds = $regionIdsAsString ? explode(',', $regionIdsAsString) : []; $safeRegionIds = []; foreach ($regionIds as $id) { $safeRegionIds[] = intval($id); } return $safeRegionIds; } public function getFileSuffix($suffix) { $shortSuffix = preg_replace("/[^a-z]/i", "", substr($suffix, 0, 3)); if ($shortSuffix) $shortSuffix = '_'.$shortSuffix; return $shortSuffix; } public function saveArrayToJsonFile($array, $file) { $json = json_encode($array); $success = false; if ($json) { $handle = @fopen($_SERVER['DOCUMENT_ROOT']."/upload/".$file, "w"); fwrite($handle, $json); fclose($handle); $success = true; } return $success; } public function getArrayFromJsonFile($file) { $json = file_get_contents($_SERVER["DOCUMENT_ROOT"].'/upload/'.$file); $outlets = json_decode($json, true); return $outlets; } public function getDevliveryOptions($profileId) { global $DB; $options = []; $result = $DB->Query("SELECT `VALUE` FROM `yamarket_trading_settings` WHERE `NAME`='DELIVERY_OPTIONS' AND `SETUP_ID`=".$profileId); if ($fields = $result->Fetch()) { $options = $fields['VALUE']; } return unserialize(str_replace('__SERIALIZED__:', '', $options)); } public function replaceOutletsInOptions($options, $deliveryId, $outlets) { foreach ($options as $key => $delivery) { if ( $delivery['ID'] == $deliveryId && $options[$key]['TYPE'] == 'PICKUP' ) { $options[$key]['OUTLET'] = $outlets; break; } } return $options; } public function serializeOptions($options) { $serializedOptions = serialize($options); $serializedOptions = '__SERIALIZED__:'.$serializedOptions; return $serializedOptions; } public function setDevliveryOptions($profileId, $serializedOptions) { global $DB; $DB->Query("UPDATE `yamarket_trading_settings` SET `VALUE`='".$serializedOptions."' WHERE `NAME`='DELIVERY_OPTIONS' AND `SETUP_ID`=".$profileId); } }