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/bitrix/modules/grain.iiko/lib/rest/ |
Upload File : |
<?php namespace Grain\Iiko\Rest; use \Bitrix\Main\Localization\Loc; use \Bitrix\Main\Web\Json; use \Bitrix\Main\Application; use \Bitrix\Main\Loader; use \Bitrix\Main\Web\Uri; Loc::loadMessages(__FILE__); class v0 { const apiProtocol = 'https'; const apiPath = '/api/0'; public static function query($path,$body,$method='POST',$account) { $accessToken = self::getAuthHash($account); if(!$accessToken['result']) return $accessToken; $uri = new Uri($path); $uri->addParams(array( "access_token"=>$accessToken['result'], )); $result = static::_query($method,$uri->getUri(),$body,$account); return $result; } public static function getAuthHash($account) { $uri = new Uri('/auth/access_token'); $uri->addParams(array( "user_id"=>$account['LOGIN'], "user_secret"=>$account['PASSWORD'], )); return static::_query('GET',$uri->getUri(),false,$account); } public static function _query($method='GET',$path,$body=false,$account=false) { $method = strtoupper($method); $opts = array( 'method' => $method, 'timeout' => 60, 'ignore_errors'=> true, ); if(is_array($body)) { if($method=='POST') { $body = Json::encode($body); $opts['header'] = "Content-Type: application/json\r\nContent-Length: ".strlen($body)."\r\nAccept: application/json"; $opts['content'] = $body; } else { $uri = new Uri($path); $uri->addParams($body); $path = $uri->getUri(); } } $context = stream_context_create(array('http'=>$opts)); // do not use https $stream = @fopen(static::apiProtocol.'://'.$account['HOST'].':'.$account['PORT'].static::apiPath.$path, 'r', false, $context); //var_dump(static::apiProtocol.'://'.$account['HOST'].':'.$account['PORT'].static::apiPath.$path); if($stream!==false) { $result = stream_get_contents($stream); fclose($stream); $error = false; try { $arRes = Json::decode($result); } catch (\Bitrix\Main\SystemException $e) { $error = true; //$e->getMessage(); } if($error) { return array('error'=>Loc::getMessage('GRAIN_IIKO_REST_JSON_ERROR')); } elseif(is_array($arRes) && array_key_exists('httpStatusCode', $arRes) && $arRes['httpStatusCode']!=200) { return array('error'=>$arRes['message']); } else { return array('result'=>$arRes); } } else { $error = error_get_last(); return array('error'=>$error['message']);//.print_r($error,true); } } public static function buildIikoOrderBody($params,$restaurantId) { $order = array ( 'phone' => $params['phone'], 'isSelfService' => $params['orderServiceType']=='DeliveryByClient'?'true':'false', // self-pickup 'items' => array(), 'comment' => $params['comment'], ); if(isset($params['date'])) $order['date'] = $params['date']->format('Y-m-d\TH:i:s'.(($tz=Option::get('grain.iiko','time_zone'))?$tz:'+00:00')); if(is_string($params['orderUuid']) && strlen($params['orderUuid'])>0) $order['id'] = $params['orderUuid']; foreach($params['items'] as $item) { $newItem = array( 'id' => $item['id'], 'name' => $item['name'], 'amount' => $item['amount'], 'code' => $item['code'], 'sum' => $item['sum'], ); if(is_array($item['modifiers']) && count($item['modifiers'])>0) { $newItem['modifiers'] = array(); foreach($item['modifiers'] as $modifier) { $newModifier = array( 'id' => $modifier['id'], 'name' => $modifier['name'], 'code' => $modifier['code'], // added in 3.5.1 to fix error "Fill code for modifier with id = ..." 'amount' => $modifier['amount'], ); if($modifier['groupId']) { $newModifier['groupId'] = $modifier['groupId']; $newModifier['groupName'] = $modifier['groupName']; } $newItem['modifiers'][] = $newModifier; } } $order['items'][] = $newItem; } if(is_array($params['discounts']) && count($params['discounts'])>0) { foreach($params['discounts'] as $discount) { $order['discountCardTypeId'] = $discount['discountTypeId']; $order['discountOrIncreaseSum'] = $discount['sum']; } } if(is_array($params['payments']) && count($params['payments'])>0) { foreach($params['payments'] as $payment) { $newPayment = array( 'sum' => $payment['sum'], 'paymentType' => $payment['paymentType'], //'additionalData' => , 'isProcessedExternally' => $payment['isProcessedExternally'], 'isPreliminary' => $payment['isPreliminary'], 'isExternal' => $payment['isExternal'], ); if(array_key_exists('paymentAdditionalData', $payment)) $newPayment['additionalData'] = Json::encode(array( 'searchScope' => strtoupper($payment['paymentAdditionalData']['searchScope']), 'credential' => $payment['paymentAdditionalData']['credential'], )); $order['paymentItems'][] = $newPayment; } } if($params['orderServiceType']=='DeliveryByCourier') { $order['address'] = array ( 'city' => $params['city'], 'street' => $params['street'], 'home' => $params['house'], 'housing' => $params['building'], 'apartment' => $params['flat'], 'entrance' => $params['entrance'], 'floor' => $params['floor'], 'doorphone' => $params['doorphone'], ); } $body = array ( 'organization' => $params['organizationId'], 'customer' => array ( //'id' => md5($params['userId']), 'name' => $params['name'], 'phone' => $params['phone'], ), 'order' => $order, ); if( Loader::includeModule('grain.iikocard') && ($params['queryType']=='orderCreate' || $params['queryType']=='orderCheckCreate') ) { if(array_key_exists('couponCode',$params)) $body['coupon'] = $params['couponCode']; //if(array_key_exists('marketingCampaignId',$params)) //$body['applicableManualConditions'] = $params['marketingCampaignId']; } //$body['isLoyaltyTraceEnabled'] = true; if($params['terminalGroupId']) $body['deliveryTerminalId'] = $params['terminalGroupId']; return $body; } public static function checkAccess($account) { $connection = @fsockopen($account['HOST'], $account['PORT']); if (is_resource($connection)) { fclose($connection); return true; } else { return false; } } }