1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
restclient.php
См. документацию.
1<?
2
3namespace Sale\Handlers\Delivery\Additional;
4
5use Bitrix\Main\Config\Option;
6use Bitrix\Main\Context;
7use Bitrix\Main\Error;
8use Bitrix\Sale\Delivery\ExtraServices\Manager;
9use Bitrix\Sale\Delivery\Services\Table;
10use Bitrix\Sale\Location\Admin\LocationHelper;
11use Bitrix\Sale\Location\ExternalTable;
12use Bitrix\Sale\Location\Name\LocationTable;
13use Bitrix\Sale\Result;
14use Bitrix\Sale\ResultSerializable;
15use Bitrix\Sale\Shipment;
16use Bitrix\Main\Localization\Loc;
17use Bitrix\Sale\Delivery\CalculationResult;
18use Sale\Handlers\Delivery\AdditionalHandler;
19
20Loc::loadMessages(__FILE__);
21
28class RestClient extends \Bitrix\Sale\Services\Base\RestClient
29{
30 const WRONG_LICENSE_OPTION = 'handlers_dlv_add_rest_wrong_license';
31
35 public function getDeliveryList()
36 {
37 return $this->getItem('delivery.list', CacheManager::TYPE_DELIVERY_LIST);
38 }
39
45 public function getDeliveryProfilesList($serviceType)
46 {
47 return $this->getItem(
48 'delivery.profile.list',
49 CacheManager::TYPE_PROFILES_LIST,
50 array('serviceType' => $serviceType),
51 array($serviceType)
52 );
53 }
54
61 public function getDeliveryProfileFields($serviceType, $profileType)
62 {
63 return $this->getItem(
64 'delivery.profile.fields',
65 CacheManager::TYPE_PROFILE_FIELDS,
66 array('serviceType' => $serviceType, 'profileType' => $profileType),
67 array($serviceType, $profileType)
68 );
69 }
70
76 public function getDeliveryFields($serviceType)
77 {
78 return $this->getItem(
79 'delivery.fields',
80 CacheManager::TYPE_DELIVERY_FIELDS,
81 array('serviceType' => $serviceType),
82 array($serviceType)
83 );
84 }
85
95 public function getDeliveryPrice($serviceType, $profileType, array $serviceParams, array $profileParams, Shipment $shipment)
96 {
97 $params = array(
98 'serviceType' => $serviceType,
99 'profileType' => $profileType,
100 'serviceParams' => $serviceParams,
101 'profileParams' => $profileParams,
102 'shipmentParams' => AdditionalHandler::getShipmentParams($shipment, $serviceType)
103 );
104
105 $hash = md5(serialize($params));
106
107 $answer = $this->getItem(
108 'delivery.price',
109 CacheManager::TYPE_DELIVERY_PRICE,
110 $params,
111 array($hash)
112 );
113
114 if($answer->isSuccess())
115 {
116 $data = $answer->getData();
117 $result = unserialize(rawurldecode($data['PRICE']), ['allowed_classes' => [CalculationResult::class]]);
118
119 if(!($result instanceof CalculationResult))
120 {
121 $result = new CalculationResult();
122 $result->addError(new Error('Error. Incorrect answer about price!'));
123 return $result;
124 }
125
126 if(!$result->isSuccess() && defined('SALE_HANDLERS_DLV_ADD_LOG_PRICE_ERRORS'))
127 {
128 $eventLog = new \CEventLog();
129 $eventLog->Add(array(
130 "SEVERITY" => $eventLog::SEVERITY_ERROR,
131 "AUDIT_TYPE_ID" => "SALE_HANDLERS_DLV_ADD_LOG_PRICE_ERRORS",
132 "MODULE_ID" => "sale",
133 "ITEM_ID" => $serviceType.'_'.$profileType,
134 "DESCRIPTION" => implode(', ', $result->getErrorMessages()),
135 ));
136 }
137 }
138 else
139 {
140 $result = new CalculationResult();
141 $result->addErrors($answer->getErrors());
142 }
143
144 return $result;
145 }
146
147 public function getProfileConfig($serviceType, $profileType)
148 {
149 return $this->getItem(
150 'delivery.profile.config',
151 CacheManager::TYPE_PROFILE_CONFIG,
152 array('serviceType' => $serviceType, 'profileType' => $profileType),
153 array($serviceType, $profileType)
154 );
155 }
156
157 public function getDeliveryExtraServices($serviceType)
158 {
159 return $this->getItem(
160 'delivery.extraservices',
161 CacheManager::TYPE_EXTRA_SERVICES,
162 array('serviceType' => $serviceType),
163 array($serviceType)
164 );
165 }
166
167 public function getProfileExtraServices($serviceType, $profileType, array $profileParams)
168 {
169 return $this->getItem(
170 'delivery.profile.extraservices',
171 CacheManager::TYPE_EXTRA_SERVICES,
172 array('serviceType' => $serviceType, 'profileType' => $profileType, 'profileParams' => $profileParams),
173 array($serviceType, $profileType, $profileParams)
174 );
175 }
176
177 public function getTrackingStatuses($serviceType, array $serviceParams, array $trackingNumbers = array())
178 {
179 return $this->getItem(
180 'delivery.tracking.statuses',
181 CacheManager::TYPE_NONE,
182 array('serviceType' => $serviceType, 'serviceParams' => $serviceParams, 'trackingNumbers' => $trackingNumbers)
183 );
184 }
185
186 protected function setCacheItem($result, $cacheType, array $cacheIds)
187 {
188 $cache = CacheManager::getItem($cacheType);
189 $cache->set(serialize($result), $cacheIds);
190 }
191
192 protected function getItem($callMethod, $cacheType, array $callParams = array(), array $cacheIds = array())
193 {
194 $cache = CacheManager::getItem($cacheType);
195 $isLicenseWrong = Option::get('sale', self::WRONG_LICENSE_OPTION, 'N') == 'Y';
196 $skipCache = defined('SALE_HANDLERS_DLV_ADD_SKIP_CACHE');
197 $result = false;
198
199 if(!$skipCache && !$isLicenseWrong && $cache && $result = $cache->get($cacheIds))
200 {
201 $result = unserialize($result, ['allowed_classes' => [ResultSerializable::class]]);
202 }
203
204 if(!($result instanceof ResultSerializable))
205 {
206 if($isLicenseWrong && $cache)
207 $cache->clean();
208
209 $result = $this->call(static::SCOPE.'.'.$callMethod, $callParams);
210
211 if($result->isSuccess())
212 {
213 $data = $result->getData();
214
215 if(!empty($data['ACTIONS']) && is_array($data['ACTIONS']))
216 {
217 $this->processActions($data['ACTIONS']);
218 unset($data['ACTIONS']);
219 $result->setData($data);
220 }
221
222 if($cache)
223 $cache->set(serialize($result), $cacheIds);
224 }
225 else
226 {
227 foreach($result->getErrors() as $error)
228 {
229 if($error->getCode() == self::ERROR_WRONG_LICENSE)
230 {
231 Option::set('sale', self::WRONG_LICENSE_OPTION, 'Y');
232 $isLicenseWrong = true;
233 }
234 }
235
236 if(defined('SALE_HANDLERS_DLV_ADD_LOG_REST_ERRORS'))
237 {
238 $eventLog = new \CEventLog();
239 $eventLog->Add(array(
240 "SEVERITY" => $eventLog::SEVERITY_ERROR,
241 "AUDIT_TYPE_ID" => "SALE_HANDLERS_DLV_ADD_LOG_REST_ERRORS",
242 "MODULE_ID" => "sale",
243 "ITEM_ID" => $callMethod,
244 "DESCRIPTION" => implode(', ', $result->getErrorMessages()),
245 ));
246 }
247 }
248 }
249
250 if($result->isSuccess() && $isLicenseWrong)
251 Option::delete('sale', array('name' => self::WRONG_LICENSE_OPTION));
252
253 return $result;
254 }
255
256 private function processActions(array $actions)
257 {
258 foreach($actions as $actType => $actParams)
259 {
260 $res = Action::execute($actParams);
261
262 if(!$res->isSuccess() && defined('SALE_HANDLERS_DLV_ADD_LOG_ACTIONS_ERRORS'))
263 {
264 $eventLog = new \CEventLog();
265 $eventLog->Add(array(
266 "SEVERITY" => $eventLog::SEVERITY_ERROR,
267 "AUDIT_TYPE_ID" => "SALE_HANDLERS_DLV_ADD_LOG_ACTIONS_ERRORS",
268 "MODULE_ID" => "sale",
269 "ITEM_ID" => $actType,
270 "DESCRIPTION" => implode(', ', $res->getErrorMessages()),
271 ));
272 }
273 }
274 }
275}
$hash
Определения ajax_redirector.php:8
call($methodName, $additionalParams=null, $licenseCheck=false, $clearAccessSettings=false)
Определения restclient.php:52
$data['IS_AVAILABLE']
Определения .description.php:13
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$result
Определения get_property_values.php:14
trait Error
Определения error.php:11
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$error
Определения subscription_card_product.php:20