1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
cashboxyookassa.php
См. документацию.
1<?php
2namespace Bitrix\Sale\Cashbox;
3
4use Bitrix\Main;
5use Bitrix\Main\Error;
6use Bitrix\Main\Loader;
7use Bitrix\Main\Localization\Loc;
8use Bitrix\Main\PhoneNumber;
9use Bitrix\Main\Web\Uri;
10use Bitrix\Sale;
11use Bitrix\Seo;
12
13Loc::loadMessages(__FILE__);
14
20{
21 private const MAX_NAME_LENGTH = 128;
22
23 private const URL = 'https://api.yookassa.ru/v3/receipts/';
24
25 private const CODE_NO_VAT = 1;
26 private const CODE_VAT_0 = 2;
27 private const CODE_VAT_10 = 3;
28 private const CODE_VAT_20 = 4;
29 private const CODE_VAT_5 = 7;
30 private const CODE_VAT_7 = 8;
31
32 private const MARK_CODE_BASE64 = 1;
33 private const MARK_CODE_NOT_ENCODING = 2;
34
35 private const SETTLEMENT_TYPE_PREPAYMENT = 'prepayment';
36 private const CHECK_TYPE_PAYMENT = 'payment';
37
38 private const MARK_CODE_TYPE_GS1M = 'gs_1m';
39
40 // https://yookassa.ru/developers/api mark_mode is needed for product marking. It should take the value equal to 0
41 private const MARK_MODE = '0';
42
43 public static function getName(): string
44 {
45 return Loc::getMessage('SALE_CASHBOX_YOOKASSA_TITLE');
46 }
47
48 public function buildCheckQuery(Check $check): array
49 {
50 $checkParamsResult = $this->checkParams($check);
51 if (!$checkParamsResult->isSuccess())
52 {
53 return [];
54 }
55
57 if (!$payment)
58 {
59 return [];
60 }
61
62 $checkData = $check->getDataForCheck();
63 $fields = [
64 'customer' => [],
65 'items' => [],
66 'tax_system_code' => $this->getValueFromSettings('TAX', 'SNO'),
67 ];
68
69 if (isset($checkData['client_email']))
70 {
71 $fields['customer']['email'] = $checkData['client_email'];
72 }
73
74 if (isset($checkData['client_phone']))
75 {
76 $phoneParser = PhoneNumber\Parser::getInstance();
77 if ($phoneParser)
78 {
79 $phoneNumber = $phoneParser->parse($checkData['client_phone']);
80 if ($phoneNumber->isValid())
81 {
82 $fields['customer']['phone'] = $phoneNumber->format(PhoneNumber\Format::E164);
83 }
84 }
85 }
86
87 $paymentModeMap = $this->getCheckTypeMap();
88 $paymentMode = $paymentModeMap[$check::getType()];
89 $paymentObjectMap = $this->getPaymentObjectMap();
90
91 foreach ($checkData['items'] as $item)
92 {
93 $vat = $this->getValueFromSettings('VAT', $item['vat']);
94 $vat = $vat ?? $this->getValueFromSettings('VAT', 'NOT_VAT');
95
96 $measure = $this->getValueFromSettings('MEASURE', $item['measure_code']);
97 $measure = $measure ?? $this->getValueFromSettings('MEASURE', 'DEFAULT');
98
99 $receiptItem = [
100 'description' => mb_substr($item['name'], 0, self::MAX_NAME_LENGTH),
101 'amount' => [
102 'value' => (string)Sale\PriceMaths::roundPrecision($item['price']),
103 'currency' => (string)$item['currency'],
104 ],
105 'vat_code' => (int)$vat,
106 'quantity' => (string)$item['quantity'],
107 'measure' => (string)$measure,
108 'payment_subject' => $paymentObjectMap[$item['payment_object']],
109 'payment_mode' => $paymentMode,
110 ];
111
112 $markCodeEncoding = $this->getValueFromSettings('MARK', 'CODE') ?? self::MARK_CODE_BASE64;
113
114 if (!empty($item['marking_code']))
115 {
116 $receiptItem['mark_mode'] = self::MARK_MODE;
117
118 if ((int)$markCodeEncoding === self::MARK_CODE_BASE64)
119 {
120 $receiptItem['mark_code_info'] = $this->buildPositionMarkCodeInBase64($item);
121 }
122 else
123 {
124 $receiptItem['mark_code_info'] = $this->buildPositionMarkCode($item);
125 }
126 }
127
128 $fields['items'][] = $receiptItem;
129 }
130
131 if ($this->needDataForSecondCheck($payment))
132 {
133 $fields['send'] = true;
134 $fields['type'] = self::CHECK_TYPE_PAYMENT;
135 $fields['payment_id'] = $payment->getField('PS_INVOICE_ID');
136 $fields['settlements'] = [];
137
138 foreach ($checkData['payments'] as $paymentItem)
139 {
140 $fields['settlements'][] = [
141 'type' => self::SETTLEMENT_TYPE_PREPAYMENT,
142 'amount' => [
143 'value' => (string)Sale\PriceMaths::roundPrecision($paymentItem['sum']),
144 'currency' => (string)$paymentItem['currency'],
145 ],
146 ];
147 }
148 }
149
150 return $fields;
151 }
152
153 private function buildPositionMarkCode(array $item): array
154 {
155 return [
156 self::MARK_CODE_TYPE_GS1M => $item['marking_code'],
157 ];
158 }
159
160 private function buildPositionMarkCodeInBase64(array $item): array
161 {
162 return [
163 self::MARK_CODE_TYPE_GS1M => base64_encode($item['marking_code']),
164 ];
165 }
166
167 protected function getPrintUrl(): string
168 {
169 return self::URL;
170 }
171
172 protected function getCheckUrl(): string
173 {
174 return self::URL;
175 }
176
178 {
179 return [
180 'payment_id' => $payment->getField('PS_INVOICE_ID'),
181 ];
182 }
183
184 protected function send(string $url, Sale\Payment $payment, array $fields, string $method = self::SEND_METHOD_HTTP_POST): Sale\Result
185 {
186 $result = new Sale\Result();
187
188 $httpClient = new Main\Web\HttpClient();
189 $headers = $this->getHeaders($payment);
190 foreach ($headers as $name => $value)
191 {
192 $httpClient->setHeader($name, $value);
193 }
194
195 if ($method === self::SEND_METHOD_HTTP_POST)
196 {
197 $data = self::encode($fields);
198 Logger::addDebugInfo(__CLASS__ . ': request data: ' . $data);
199 $response = $httpClient->post($url, $data);
200 }
201 else
202 {
203 $uri = new Uri($url);
204 $uri->addParams($fields);
205 $response = $httpClient->get($uri->getUri());
206 }
207
208 if ($response === false || $response === '')
209 {
210 $result->addError(new Error(Loc::getMessage('SALE_CASHBOX_YOOKASSA_ERROR_EMPTY_RESPONSE')));
211
212 $errors = $httpClient->getError();
213 foreach ($errors as $code => $message)
214 {
215 $result->addError(new Error($message, $code));
216 }
217
218 return $result;
219 }
220
221 Logger::addDebugInfo(__CLASS__ . ': response data: ' . $response);
222
223 $response = static::decode($response);
224 if (!$response)
225 {
226 $result->addError(new Error(Loc::getMessage('SALE_CASHBOX_YOOKASSA_ERROR_DECODE_RESPONSE')));
227 return $result;
228 }
229
230 $result->setData($response);
231
232 return $result;
233 }
234
236 {
237 return new Sale\Result();
238 }
239
241 {
242 $processCheckResult = new Sale\Result();
243 $data = $result->getData();
244
248 if (isset($data['type']) && $data['type'] === 'error')
249 {
250 $errorCode = $data['code'] ?? '';
251 switch ($errorCode)
252 {
253 case 'internal_server_error':
254 case 'too_many_requests':
255 $processCheckResult->addError(new Error(Loc::getMessage('SALE_CASHBOX_YOOKASSA_ERROR_CHECK_WAIT')));
256 break;
257
258 default:
259 $processCheckResult->addError(new Error(Loc::getMessage('SALE_CASHBOX_YOOKASSA_ERROR_CHECK_PROCESSING')));
260 break;
261 }
262
263 return $processCheckResult;
264 }
265
266 $processCheckResult->setData($data);
267
268 return $processCheckResult;
269 }
270
272 {
273 $onAfterProcessCheckResult = new Sale\Result();
274 $checkList = CheckManager::getList([
275 'select' => ['ID'],
276 'filter' => [
277 'ORDER_ID' => $payment->getOrderId(),
278 ],
279 'order' => ['ID' => 'DESC'],
280 ])->fetchAll();
281
282 $data = $result->getData();
283 $checkData = [];
284 if (isset($data['type']) && $data['type'] === 'list')
285 {
286 $checkData = $data['items'] ?? [];
287 }
288
289 if ($checkList)
290 {
291 if (!$checkData)
292 {
293 $externalCheck = [
294 'checkId' => $checkList[0]['ID'],
295 'error' => [
296 'MESSAGE' => Loc::getMessage('SALE_CASHBOX_YOOKASSA_ERROR_CHECK_NOT_FOUND'),
297 'TYPE' => Errors\Error::TYPE,
298 ],
299 ];
300 $applyCheckResult = static::applyCheckResult($externalCheck);
301 $onAfterProcessCheckResult->addErrors($applyCheckResult->getErrors());
302 }
303
304 foreach ($checkData as $key => $externalCheck)
305 {
306 $checkStatus = $externalCheck['status'] ?? '';
307 switch ($checkStatus)
308 {
309 case 'pending':
310 $externalCheck['error'] = [
311 'MESSAGE' => Loc::getMessage('SALE_CASHBOX_YOOKASSA_STATUS_CHECK_PENDING'),
312 'TYPE' => Errors\Warning::TYPE,
313 ];
314 break;
315
316 case 'canceled':
317 $externalCheck['error'] = [
318 'MESSAGE' => Loc::getMessage('SALE_CASHBOX_YOOKASSA_STATUS_CHECK_CANCELLED'),
319 'TYPE' => Errors\Error::TYPE,
320 ];
321 break;
322 }
323
324 $externalCheck['checkId'] = $checkList[$key]['ID'];
325 $applyCheckResult = static::applyCheckResult($externalCheck);
326 if (!$applyCheckResult->isSuccess())
327 {
328 $onAfterProcessCheckResult->addErrors($applyCheckResult->getErrors());
329 }
330 }
331 }
332 else
333 {
334 $onAfterProcessCheckResult->addError(new Error(Loc::getMessage('SALE_CASHBOX_YOOKASSA_ERROR_CHECK_NOT_FOUND')));
335 }
336
337 return $onAfterProcessCheckResult;
338 }
339
340 protected static function extractCheckData(array $data): array
341 {
342 $result = [];
343
344 $id = $data['checkId'] ?? null;
345 if (!$id)
346 {
347 return $result;
348 }
349 $result['ID'] = $id;
350
351 if ($data['error'])
352 {
353 $result['ERROR'] = $data['error'];
354 }
355
356 if ($data['id'])
357 {
358 $result['EXTERNAL_UUID'] = $data['id'];
359 }
360
361 $check = CheckManager::getObjectById($id);
362 if ($check)
363 {
364 $result['LINK_PARAMS'] = [
365 AbstractCheck::PARAM_FISCAL_DOC_ATTR => $data['fiscal_attribute'],
366 AbstractCheck::PARAM_FISCAL_DOC_NUMBER => $data['fiscal_document_number'],
367 AbstractCheck::PARAM_FN_NUMBER => $data['fiscal_storage_number'],
368 AbstractCheck::PARAM_FISCAL_RECEIPT_NUMBER => $data['fiscal_provider_id'],
369 AbstractCheck::PARAM_DOC_SUM => (float)$check->getField('SUM'),
370 AbstractCheck::PARAM_CALCULATION_ATTR => $check::getCalculatedSign()
371 ];
372
373 if (!empty($data['registered_at']))
374 {
375 try
376 {
377 // ISO 8601 datetime
378 $dateTime = new Main\Type\DateTime($data['registered_at'], 'Y-m-d\TH:i:s.v\Z');
379 $result['LINK_PARAMS'][AbstractCheck::PARAM_DOC_TIME] = $dateTime->getTimestamp();
380 }
381 catch (Main\ObjectException $ex)
382 {}
383 }
384 }
385
386 return $result;
387 }
388
389 public static function getPaySystemCodeForKkm(): string
390 {
391 return 'YANDEX_CHECKOUT_SHOP_ID';
392 }
393
395 {
396 if (self::isOAuth())
397 {
398 return [md5(static::getYandexToken())];
399 }
400
401 return parent::getKkmValue($service);
402 }
403
404 public static function getSettings($modelId = 0): array
405 {
406 $settings = [];
407
408 $settings['TAX'] = [
409 'LABEL' => Loc::getMessage('SALE_CASHBOX_YOOKASSA_SETTINGS_SNO'),
410 'REQUIRED' => 'Y',
411 'ITEMS' => [
412 'SNO' => [
413 'TYPE' => 'ENUM',
414 'LABEL' => Loc::getMessage('SALE_CASHBOX_YOOKASSA_SETTINGS_SNO_LABEL'),
415 'VALUE' => 1,
416 'OPTIONS' => [
417 1 => Loc::getMessage('SALE_CASHBOX_YOOKASSA_SNO_OSN'),
418 2 => Loc::getMessage('SALE_CASHBOX_YOOKASSA_SNO_UI'),
419 3 => Loc::getMessage('SALE_CASHBOX_YOOKASSA_SNO_UIO'),
420 4 => Loc::getMessage('SALE_CASHBOX_YOOKASSA_SNO_ENVD'),
421 5 => Loc::getMessage('SALE_CASHBOX_YOOKASSA_SNO_ESN'),
422 6 => Loc::getMessage('SALE_CASHBOX_YOOKASSA_SNO_PATENT'),
423 ],
424 ],
425 ],
426 ];
427
428 $settings['MARK'] = [
429 'LABEL' => Loc::getMessage('SALE_CASHBOX_YOOKASSA_SETTINGS_MARKING'),
430 'REQUIRED' => 'Y',
431 'ITEMS' => [
432 'CODE' => [
433 'TYPE' => 'ENUM',
434 'LABEL' => Loc::getMessage('SALE_CASHBOX_YOOKASSA_SETTINGS_MARKING_LABEL'),
435 'VALUE' => self::MARK_CODE_BASE64,
436 'OPTIONS' => [
437 self::MARK_CODE_BASE64 => 'base64',
438 self::MARK_CODE_NOT_ENCODING => Loc::getMessage('SALE_CASHBOX_YOOKASSA_SETTINGS_MARKING_NOT_ENCODE'),
439 ],
440 ],
441 ],
442 ];
443
444 $settings['VAT'] = [
445 'LABEL' => Loc::getMessage('SALE_CASHBOX_YOOKASSA_SETTINGS_VAT'),
446 'REQUIRED' => 'Y',
447 'COLLAPSED' => 'Y',
448 'ITEMS' => [
449 'NOT_VAT' => [
450 'TYPE' => 'STRING',
451 'LABEL' => Loc::getMessage('SALE_CASHBOX_YOOKASSA_SETTINGS_VAT_LABEL_NOT_VAT'),
452 'VALUE' => self::CODE_NO_VAT,
453 ],
454 ],
455 ];
456
457 if (Loader::includeModule('catalog'))
458 {
460 'ACTIVE' => 'Y',
461 'EXCLUDE_VAT' => 'N',
462 ]]);
463 $vatList = $dbRes->fetchAll();
464 if ($vatList)
465 {
466 $defaultVatList = [
467 0 => self::CODE_VAT_0,
468 5 => self::CODE_VAT_5,
469 7 => self::CODE_VAT_7,
470 10 => self::CODE_VAT_10,
471 20 => self::CODE_VAT_20,
472 ];
473
474 foreach ($vatList as $vat)
475 {
476 $value = $defaultVatList[(int)$vat['RATE']] ?? '';
477
478 $settings['VAT']['ITEMS'][(int)$vat['ID']] = [
479 'TYPE' => 'STRING',
480 'LABEL' => $vat['NAME'] . ' (' . (int)$vat['RATE'] . '%)',
481 'VALUE' => $value,
482 ];
483 }
484 }
485 }
486
487 $measureItems = [
488 'DEFAULT' => [
489 'TYPE' => 'STRING',
490 'LABEL' => Loc::getMessage('SALE_CASHBOX_MEASURE_SUPPORT_SETTINGS_DEFAULT_VALUE'),
491 'VALUE' => 'piece',
492 ],
493 ];
494 if (Loader::includeModule('catalog'))
495 {
496 $measuresList = \CCatalogMeasure::getList();
497 while ($measure = $measuresList->fetch())
498 {
499 $measureItems[$measure['CODE']] = [
500 'TYPE' => 'STRING',
501 'LABEL' => $measure['MEASURE_TITLE'],
502 'VALUE' => MeasureCodeToTag2108MapperYooKassa::getTag2108Value($measure['CODE']),
503 ];
504 }
505 }
506
507 $settings['MEASURE'] = [
508 'LABEL' => Loc::getMessage('SALE_CASHBOX_MEASURE_SUPPORT_SETTINGS'),
509 'REQUIRED' => 'Y',
510 'COLLAPSED' => 'Y',
511 'ITEMS' => $measureItems,
512 ];
513
514 return $settings;
515 }
516
520 public static function getFfdVersion(): ?float
521 {
522 return 1.2;
523 }
524
528 protected function getCheckTypeMap(): array
529 {
530 return [
531 FullPrepaymentCheck::getType() => 'full_prepayment',
532 PrepaymentCheck::getType() => 'partial_prepayment',
533 AdvancePaymentCheck::getType() => 'advance',
534 SellCheck::getType() => 'full_payment',
535 CreditCheck::getType() => 'credit',
536 CreditPaymentCheck::getType() => 'credit_payment',
537 ];
538 }
539
543 private function getPaymentObjectMap(): array
544 {
545 return [
546 // FFD 1.05
547 Check::PAYMENT_OBJECT_COMMODITY => 'commodity',
553 Check::PAYMENT_OBJECT_GAMBLING_BET => 'gambling_bet',
554 Check::PAYMENT_OBJECT_GAMBLING_PRIZE => 'gambling_prize',
556 Check::PAYMENT_OBJECT_LOTTERY_PRIZE => 'lottery_prize',
557 Check::PAYMENT_OBJECT_INTELLECTUAL_ACTIVITY => 'intellectual_activity',
558 Check::PAYMENT_OBJECT_AGENT_COMMISSION => 'agent_commission',
559 Check::PAYMENT_OBJECT_PROPERTY_RIGHT => 'property_right',
560 Check::PAYMENT_OBJECT_NON_OPERATING_GAIN => 'non_operating_gain',
561 Check::PAYMENT_OBJECT_INSURANCE_PREMIUM => 'insurance_premium',
562 Check::PAYMENT_OBJECT_SALES_TAX => 'sales_tax',
563 Check::PAYMENT_OBJECT_RESORT_FEE => 'resort_fee',
564 Check::PAYMENT_OBJECT_COMPOSITE => 'composite',
566
567 // FFD 1.2
576 Check::PAYMENT_OBJECT_AGENT_WITHDRAWALS => 'agent_withdrawals',
577 Check::PAYMENT_OBJECT_PENSION_INSURANCE_IP => 'pension_insurance_without_payouts',
578 Check::PAYMENT_OBJECT_PENSION_INSURANCE => 'pension_insurance_with_payouts',
579 Check::PAYMENT_OBJECT_MEDICAL_INSURANCE_IP => 'health_insurance_without_payouts',
580 Check::PAYMENT_OBJECT_MEDICAL_INSURANCE => 'health_insurance_with_payouts',
581 Check::PAYMENT_OBJECT_SOCIAL_INSURANCE => 'health_insurance',
582 ];
583 }
584
585 protected function getCheckHttpMethod(): string
586 {
587 return self::SEND_METHOD_HTTP_GET;
588 }
589
590 private function needDataForSecondCheck(Sale\Payment $payment): bool
591 {
592 return (bool)$payment->getField('PS_INVOICE_ID');
593 }
594
595 private function getHeaders(Sale\Payment $payment): array
596 {
597 $headers = [
598 'Content-Type' => 'application/json',
599 'Idempotence-Key' => $this->getIdempotenceKey(),
600 ];
601
602 try
603 {
604 $headers['Authorization'] = $this->getAuthorizationHeader($payment);
605 }
606 catch (\Exception $ex)
607 {
608 $headers['Authorization'] = 'Basic '.$this->getBasicAuthString($payment);
609 }
610
611 return $headers;
612 }
613
614 private function getIdempotenceKey(): string
615 {
616 return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
617 mt_rand(0, 0xffff), mt_rand(0, 0xffff),
618 mt_rand(0, 0xffff),
619 mt_rand(0, 0x0fff) | 0x4000,
620 mt_rand(0, 0x3fff) | 0x8000,
621 mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
622 );
623 }
624
625 private function getAuthorizationHeader(Sale\Payment $payment)
626 {
627 if (self::isOAuth())
628 {
629 $token = static::getYandexToken();
630 return 'Bearer '.$token;
631 }
632
633 return 'Basic '.$this->getBasicAuthString($payment);
634 }
635
636 private static function isOAuth(): bool
637 {
638 return Main\Config\Option::get('sale', 'YANDEX_CHECKOUT_OAUTH', false) == true;
639 }
640
641 private static function getYandexToken()
642 {
643 if (!Main\Loader::includeModule('seo'))
644 {
645 return null;
646 }
647
648 $authAdapter = Seo\Checkout\Service::getAuthAdapter(Seo\Checkout\Service::TYPE_YOOKASSA);
649 $token = $authAdapter->getToken();
650 if (!$token)
651 {
652 $authAdapter = Seo\Checkout\Service::getAuthAdapter(Seo\Checkout\Service::TYPE_YANDEX);
653 $token = $authAdapter->getToken();
654 }
655
656 return $token;
657 }
658
659 private function getBasicAuthString(Sale\Payment $payment)
660 {
661 return base64_encode(
662 trim((string)$this->getPaySystemSetting($payment, 'YANDEX_CHECKOUT_SHOP_ID'))
663 . ':'
664 . trim((string)$this->getPaySystemSetting($payment, 'YANDEX_CHECKOUT_SECRET_KEY'))
665 );
666 }
667
672 private static function decode(string $data)
673 {
674 try
675 {
676 return Main\Web\Json::decode($data);
677 }
678 catch (Main\ArgumentException $exception)
679 {
680 return false;
681 }
682 }
683
684 private static function encode(array $data)
685 {
686 return Main\Web\Json::encode($data, JSON_UNESCAPED_UNICODE);
687 }
688
689 public static function isOfdSettingsNeeded(): bool
690 {
691 return true;
692 }
693}
Определения error.php:15
static getList(array $parameters=array())
Определения datamanager.php:431
const E164
Определения format.php:7
static getInstance()
Определения parser.php:78
Определения uri.php:17
const PARAM_CALCULATION_ATTR
Определения abstractcheck.php:31
const PARAM_FISCAL_DOC_ATTR
Определения abstractcheck.php:24
const PARAM_FISCAL_DOC_NUMBER
Определения abstractcheck.php:23
const PARAM_FISCAL_RECEIPT_NUMBER
Определения abstractcheck.php:25
getValueFromSettings($name, $code)
Определения cashbox.php:203
getPaySystemSetting(Sale\Payment $payment, string $code)
Определения cashboxpaysystem.php:80
checkParams(Check $check)
Определения cashboxpaysystem.php:91
send(string $url, Sale\Payment $payment, array $fields, string $method=self::SEND_METHOD_HTTP_POST)
Определения cashboxyookassa.php:184
static getPaySystemCodeForKkm()
Определения cashboxyookassa.php:389
onAfterProcessCheck(Sale\Result $result, Sale\Payment $payment)
Определения cashboxyookassa.php:271
static getSettings($modelId=0)
Определения cashboxyookassa.php:404
getDataForCheck(Sale\Payment $payment)
Определения cashboxyookassa.php:177
buildCheckQuery(Check $check)
Определения cashboxyookassa.php:48
static getKkmValue(Sale\PaySystem\Service $service)
Определения cashboxyookassa.php:394
static extractCheckData(array $data)
Определения cashboxyookassa.php:340
processCheckResult(Sale\Result $result)
Определения cashboxyookassa.php:240
processPrintResult(Sale\Result $result)
Определения cashboxyookassa.php:235
const PAYMENT_OBJECT_EXCISE
Определения check.php:25
const PAYMENT_OBJECT_LOTTERY
Определения check.php:31
const PAYMENT_OBJECT_SOCIAL_INSURANCE
Определения check.php:47
const PAYMENT_OBJECT_COMPOSITE
Определения check.php:35
const PAYMENT_OBJECT_LOTTERY_PRIZE
Определения check.php:32
const PAYMENT_OBJECT_MEDICAL_INSURANCE_IP
Определения check.php:45
const PAYMENT_OBJECT_COMMODITY_MARKING_EXCISE
Определения check.php:50
const PAYMENT_OBJECT_NON_OPERATING_GAIN
Определения check.php:38
getDataForCheck()
Определения check.php:238
const PAYMENT_OBJECT_TAX
Определения check.php:55
const PAYMENT_OBJECT_COMMODITY_MARKING_NO_MARKING_EXCISE
Определения check.php:49
const PAYMENT_OBJECT_RESORT_FEE
Определения check.php:40
const PAYMENT_OBJECT_PENSION_INSURANCE_IP
Определения check.php:43
const PAYMENT_OBJECT_FINE
Определения check.php:54
const PAYMENT_OBJECT_PROPERTY_RIGHT
Определения check.php:37
const PAYMENT_OBJECT_GAMBLING_PRIZE
Определения check.php:30
const PAYMENT_OBJECT_COMMODITY_MARKING
Определения check.php:52
const PAYMENT_OBJECT_COMMODITY
Определения check.php:24
const PAYMENT_OBJECT_AGENT_COMMISSION
Определения check.php:34
const PAYMENT_OBJECT_ANOTHER
Определения check.php:36
const PAYMENT_OBJECT_DEPOSIT
Определения check.php:41
const PAYMENT_OBJECT_MEDICAL_INSURANCE
Определения check.php:46
const PAYMENT_OBJECT_SERVICE
Определения check.php:27
const PAYMENT_OBJECT_INTELLECTUAL_ACTIVITY
Определения check.php:33
const PAYMENT_OBJECT_INSURANCE_PREMIUM
Определения check.php:53
const PAYMENT_OBJECT_AGENT_WITHDRAWALS
Определения check.php:56
const PAYMENT_OBJECT_PAYMENT
Определения check.php:28
const PAYMENT_OBJECT_EXPENSE
Определения check.php:42
const PAYMENT_OBJECT_GAMBLING_BET
Определения check.php:29
const PAYMENT_OBJECT_CASINO_PAYMENT
Определения check.php:48
const PAYMENT_OBJECT_PENSION_INSURANCE
Определения check.php:44
const PAYMENT_OBJECT_JOB
Определения check.php:26
const PAYMENT_OBJECT_COMMODITY_MARKING_NO_MARKING
Определения check.php:51
const PAYMENT_OBJECT_SALES_TAX
Определения check.php:39
static getPaymentByCheck(Check $check)
Определения checkmanager.php:1910
static getList(array $parameters=array())
Определения checkmanager.php:1722
static getObjectById($id)
Определения checkmanager.php:1698
static getType()
Определения creditcheck.php:20
const TYPE
Определения error.php:9
static addDebugInfo(?string $message, $cashboxId=null)
Определения logger.php:43
static getTag2108Value(?string $measureCode)
Определения measurecodetotag2108mapper.php:51
static getType()
Определения sellcheck.php:19
Определения payment.php:19
static roundPrecision($value)
Определения pricemaths.php:16
$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
$result
Определения get_property_values.php:14
$errors
Определения iblock_catalog_edit.php:74
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
Определения options.php:195
if(file_exists($_SERVER['DOCUMENT_ROOT'] . "/urlrewrite.php")) $uri
Определения urlrewrite.php:61
$name
Определения menu_edit.php:35
$payment
Определения payment.php:14
$service
Определения payment.php:18
$message
Определения payment.php:8
$settings
Определения product_settings.php:43
if(empty($signedUserToken)) $key
Определения quickway.php:257
$vat
Определения template.php:273
$response
Определения result.php:21
$method
Определения index.php:27
$url
Определения iframe.php:7
$dbRes
Определения yandex_detail.php:168
$vatList
Определения yandex_run.php:916