403Webshell
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 :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/rospirotorg.ru/local/yamarkethook/lib/main.php
<?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);
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit