1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
handler.php
См. документацию.
1<?php
2namespace Sale\Handlers\PaySystem;
3
4use Bitrix\Main;
5use Bitrix\Sale;
6
8
13class WooppayHandler extends Sale\PaySystem\ServiceHandler implements Sale\PaySystem\IRefund
14{
15 private const API_VERSION_V1 = 'v1';
16
17 private const MODE_CHECKOUT = 'checkout';
18
19 private const SEND_METHOD_GET = 'get';
20 private const SEND_METHOD_POST = 'post';
21
22 private const HTTP_CODE_OK = 200;
23 private const HTTP_CODE_UNAUTHORIZED = 401;
24 private const HTTP_CODE_UNPROCESSABLE_ENTITY = 422;
25 private const HTTP_CODE_INTERNAL_SERVER_ERROR = 500;
26
27 private const BITRIX_LABEL = 'wp_bitrix';
28
29 private const REQUEST_PAY_SYSTEM_ID_PARAM = 'paySystemId';
30 private const REQUEST_PAYMENT_ID_PARAM = 'paymentId';
31 private const REQUEST_SOURCE_PARAM = 'source';
32
33 private const HISTORY_STATUS_PAID = 14;
34
35 private const INVOICE_ID_DELIMITER = '#';
36 private const REFERENCE_ID_DELIMITER = '_';
37
41 public static function getHandlerModeList(): array
42 {
43 return Sale\PaySystem\Manager::getHandlerDescription('Wooppay')['HANDLER_MODE_LIST'];
44 }
45
49 private function isCheckoutMode(): bool
50 {
51 return $this->service->getField('PS_MODE') === self::MODE_CHECKOUT;
52 }
53
67 public function initiatePay(Sale\Payment $payment, Main\Request $request = null): Sale\PaySystem\ServiceResult
68 {
69 $result = new Sale\PaySystem\ServiceResult();
70
71 $authResult = $this->auth($payment);
72 if (!$authResult->isSuccess())
73 {
74 $result->addErrors($authResult->getErrors());
75 return $result;
76 }
77
78 $createInvoiceResult = $this->createInvoice($payment, $authResult->getData()['token']);
79 if (!$createInvoiceResult->isSuccess())
80 {
81 $result->addErrors($createInvoiceResult->getErrors());
82 return $result;
83 }
84
85 $createInvoiceData = $createInvoiceResult->getData();
86
87 $result->setPsData([
88 'PS_INVOICE_ID' => implode(
89 self::INVOICE_ID_DELIMITER,
90 [
91 $createInvoiceData['response']['invoice_id'],
92 $createInvoiceData['response']['operation_id'],
93 ]
94 )
95 ]);
96
97 $templateParams = $this->getTemplateParams($payment);
98 $templateParams['url'] = $createInvoiceData['operation_url'];
99 $this->setExtraParams($templateParams);
100
101 $showTemplateResult = $this->showTemplate($payment, $this->getTemplateName());
102 if ($showTemplateResult->isSuccess())
103 {
104 $result->setTemplate($showTemplateResult->getTemplate());
105 }
106 else
107 {
108 $result->addErrors($showTemplateResult->getErrors());
109 }
110
111 if ($this->isCheckoutMode())
112 {
113 $result->setPaymentUrl($createInvoiceData['operation_url']);
114 }
115
116 return $result;
117 }
118
124 private function getTemplateParams(Sale\Payment $payment): array
125 {
126 return [
127 'sum' => Sale\PriceMaths::roundPrecision($payment->getSum()),
128 'currency' => $payment->getField('CURRENCY'),
129 ];
130 }
131
135 private function getTemplateName(): string
136 {
137 return (string)$this->service->getField('PS_MODE');
138 }
139
149 private function auth(Sale\Payment $payment): Sale\PaySystem\ServiceResult
150 {
151 $result = new Sale\PaySystem\ServiceResult();
152
153 $url = $this->getUrl($payment, 'auth');
154 $params = [
155 'login' => $this->getBusinessValue($payment, 'WOOPPAY_LOGIN'),
156 'password' => $this->getBusinessValue($payment, 'WOOPPAY_PASSWORD'),
157 ];
158 $headers = $this->getHeaders();
159
160 $sendResult = $this->send(self::SEND_METHOD_POST, $url, $headers, $params);
161 if ($sendResult->isSuccess())
162 {
163 $sendData = $sendResult->getData();
164 if (empty($sendData['token']))
165 {
166 $result->addError(
167 new Main\Error(
168 Main\Localization\Loc::getMessage('SALE_HPS_WOOPPAY_ERROR_TOKEN_NOT_FOUND')
169 )
170 );
171 }
172 else
173 {
174 $result->setData($sendData);
175 }
176 }
177 else
178 {
179 $result->addErrors($sendResult->getErrors());
180 }
181
182 return $result;
183 }
184
198 private function createInvoice(Sale\Payment $payment, string $token): Sale\PaySystem\ServiceResult
199 {
200 $result = new Sale\PaySystem\ServiceResult();
201
202 $url = $this->getUrl($payment, 'createInvoice');
203 $params = [
204 'reference_id' => $this->getReferenceId($payment),
205 'amount' => (string)$payment->getSum(),
206 'merchant_name' => $this->getBusinessValue($payment, 'WOOPPAY_LOGIN'),
207 'add_info' => $this->getPaymentDescription($payment),
208 'request_url' => $this->getRequestUrl($payment),
209 'back_url' => $this->getBackUrl($payment),
210 ];
211
212 if ($phoneNumber = $this->getPhoneNumber($payment))
213 {
214 $params['user_phone'] = $phoneNumber;
215 }
216
217 if ($serviceName = $this->getBusinessValue($payment, 'SERVICE_NAME'))
218 {
219 $params['service_name'] = $serviceName;
220 }
221
222 $headers = $this->getHeaders();
223 $headers['Authorization'] = $token;
224
225 $sendResult = $this->send(self::SEND_METHOD_POST, $url, $headers, $params);
226 if ($sendResult->isSuccess())
227 {
228 $result->setData($sendResult->getData());
229 }
230 else
231 {
232 $result->addErrors($sendResult->getErrors());
233 }
234
235 return $result;
236 }
237
242 private function getReferenceId(Sale\Payment $payment): string
243 {
244 return implode(self::REFERENCE_ID_DELIMITER, [self::BITRIX_LABEL, $payment->getId(), uniqid()]);
245 }
246
256 protected function getPaymentDescription(Sale\Payment $payment)
257 {
259 $collection = $payment->getCollection();
260 $order = $collection->getOrder();
261 $userEmail = $order->getPropertyCollection()->getUserEmail();
262
263 return str_replace(
264 [
265 '#PAYMENT_NUMBER#',
266 '#ORDER_NUMBER#',
267 '#PAYMENT_ID#',
268 '#ORDER_ID#',
269 '#USER_EMAIL#'
270 ],
271 [
272 $payment->getField('ACCOUNT_NUMBER'),
273 $order->getField('ACCOUNT_NUMBER'),
274 $payment->getId(),
275 $order->getId(),
276 ($userEmail) ? $userEmail->getValue() : ''
277 ],
278 $this->getBusinessValue($payment, 'WOOPPAY_PAYMENT_DESCRIPTION')
279 );
280 }
281
286 private function getRequestUrl(Sale\Payment $payment): string
287 {
288 $requestUrl = $this->getBusinessValue($payment, 'WOOPPAY_REQUEST_URL');
289 $uri = new Main\Web\Uri($requestUrl);
290 $uri->addParams([
291 self::REQUEST_PAY_SYSTEM_ID_PARAM => $this->service->getField('ID'),
292 self::REQUEST_PAYMENT_ID_PARAM => $payment->getId(),
293 self::REQUEST_SOURCE_PARAM => self::BITRIX_LABEL,
294 ]);
295
296 return $uri->getLocator();
297 }
298
303 private function getBackUrl(Sale\Payment $payment)
304 {
305 return $this->getBusinessValue($payment, 'WOOPPAY_BACK_URL')?: $this->service->getContext()->getUrl();
306 }
307
320 private function getPhoneNumber(Sale\Payment $payment): ?string
321 {
322 $phoneNumber = null;
323
325 $collection = $payment->getCollection();
326 $order = $collection->getOrder();
327
328 if ($order instanceof \Bitrix\Crm\Order\Order
329 && $clientCollection = $order->getContactCompanyCollection()
330 )
331 {
332 $primaryClient = $clientCollection->getPrimaryContact();
333 $entityId = \CCrmOwnerType::ContactName;
334
335 if ($primaryClient === null)
336 {
337 $primaryClient = $clientCollection->getPrimaryCompany();
338 $entityId = \CCrmOwnerType::CompanyName;
339 }
340
341 if ($primaryClient)
342 {
343 $clientId = $primaryClient->getField('ENTITY_ID');
344 $crmFieldMultiResult = \CCrmFieldMulti::GetList(
345 ['ID' => 'desc'],
346 [
347 'ENTITY_ID' => $entityId,
348 'ELEMENT_ID' => $clientId,
349 'TYPE_ID' => 'PHONE',
350 ]
351 );
352 while ($crmFieldMultiData = $crmFieldMultiResult->Fetch())
353 {
354 $phoneNumber = $crmFieldMultiData['VALUE'];
355 if ($phoneNumber)
356 {
357 break;
358 }
359 }
360 }
361 }
362
363 if (!$phoneNumber)
364 {
365 $phoneNumberProp = $order->getPropertyCollection()->getPhone();
366 if ($phoneNumberProp)
367 {
368 $phoneNumber = $phoneNumberProp->getValue();
369 }
370 }
371
372 return $phoneNumber ? $this->normalizePhone($phoneNumber) : null;
373 }
374
379 private function normalizePhone($phoneNumber)
380 {
381 $result = null;
382
383 $parsedNumber = Main\PhoneNumber\Parser::getInstance()->parse($phoneNumber, 'KZ');
384 if ($parsedNumber->isValid())
385 {
386 $parsedNumber = $parsedNumber->format(Main\PhoneNumber\Format::E164);
387 $result = str_replace('+', '', $parsedNumber);
388 }
389
390 return $result;
391 }
392
405 private function send(string $method, string $url, array $headers, array $params = []): Sale\PaySystem\ServiceResult
406 {
407 $result = new Sale\PaySystem\ServiceResult();
408
409 $httpClient = new Main\Web\HttpClient();
410 $httpClient->setHeaders($headers);
411
412 if ($method === self::SEND_METHOD_GET)
413 {
414 $response = $httpClient->get($url);
415 }
416 else
417 {
418 $postData = null;
419 if ($params)
420 {
421 $postData = self::encode($params);
422 }
423
424 Sale\PaySystem\Logger::addDebugInfo(__CLASS__.': request data: '.$postData);
425
426 $response = $httpClient->post($url, $postData);
427 }
428
429 if ($response === false)
430 {
431 $errors = $httpClient->getError();
432 $result->addError(new Main\Error(Main\Localization\Loc::getMessage('SALE_HPS_WOOPPAY_ERROR_EMPTY_RESPONSE')));
433 foreach ($errors as $code => $message)
434 {
435 $result->addError(new Main\Error($message, $code));
436 }
437
438 return $result;
439 }
440
441 Sale\PaySystem\Logger::addDebugInfo(__CLASS__.': response data: '.$response);
442
443 $httpStatus = $httpClient->getStatus();
444 $verificationResult = $this->verifyResponse($response, $httpStatus);
445 if (!$verificationResult->isSuccess())
446 {
447 $result->addErrors($verificationResult->getErrors());
448 return $result;
449 }
450
451 $result->setData(self::decode($response));
452
453 return $result;
454 }
455
461 private function verifyResponse(string $response, int $httpStatus): Sale\PaySystem\ServiceResult
462 {
463 $result = new Sale\PaySystem\ServiceResult();
464
465 $responseData = self::decode($response);
466 if (!$responseData)
467 {
468 $result->addError(new Main\Error(Main\Localization\Loc::getMessage('SALE_HPS_WOOPPAY_ERROR_DECODE_RESPONSE')));
469 }
470
471 if ($httpStatus === self::HTTP_CODE_UNAUTHORIZED)
472 {
473 $result->addError(new Main\Error(Main\Localization\Loc::getMessage('SALE_HPS_WOOPPAY_ERROR_STATUS_UNAUTHORIZED')));
474 if (!empty($responseData['message']))
475 {
476 $result->addError(new Main\Error($responseData['message']));
477 }
478 }
479 elseif ($httpStatus === self::HTTP_CODE_UNPROCESSABLE_ENTITY)
480 {
481 $result->addError(new Main\Error(Main\Localization\Loc::getMessage('SALE_HPS_WOOPPAY_ERROR_STATUS_UNPROCESSABLE_ENTITY')));
482 foreach ($responseData as $error)
483 {
484 if (!empty($error['field']) && !empty($error['message']))
485 {
486 $errorMessage = implode(": ", [$error['field'], $error['message']]);
487 $result->addError(new Main\Error($errorMessage));
488 }
489 }
490 }
491 elseif ($httpStatus === self::HTTP_CODE_INTERNAL_SERVER_ERROR)
492 {
493 $result->addError(new Main\Error(Main\Localization\Loc::getMessage('SALE_HPS_WOOPPAY_ERROR_STATUS_INTERNAL_SERVER_ERROR')));
494 }
495 elseif ($httpStatus !== self::HTTP_CODE_OK)
496 {
497 $result->addError(
498 new Main\Error(
499 Main\Localization\Loc::getMessage(
500 'SALE_HPS_WOOPPAY_ERROR_STATUS',
501 [
502 '#STATUS#' => $httpStatus,
503 ]
504 )
505 )
506 );
507
508 if (!empty($responseData['message']))
509 {
510 $result->addError(new Main\Error($responseData['message']));
511 }
512 }
513
514 return $result;
515 }
516
520 private function getHeaders(): array
521 {
522 return [
523 'Content-Type' => 'application/json',
524 ];
525 }
526
531 protected function isTestMode(Sale\Payment $payment = null): bool
532 {
533 return $this->getBusinessValue($payment, 'WOOPPAY_TEST_MODE') === 'Y';
534 }
535
539 protected function getUrlList(): array
540 {
541 $testUrl = 'https://api.yii2-stage.test.wooppay.com/';
542 $activeUrl = 'https://api-core.wooppay.com/';
543
544 return [
545 'auth' => [
546 self::TEST_URL => $testUrl.self::API_VERSION_V1.'/auth',
547 self::ACTIVE_URL => $activeUrl.self::API_VERSION_V1.'/auth'
548 ],
549 'createInvoice' => [
550 self::TEST_URL => $testUrl.self::API_VERSION_V1.'/invoice/create',
551 self::ACTIVE_URL => $activeUrl.self::API_VERSION_V1.'/invoice/create'
552 ],
553 'history' => [
554 self::TEST_URL => $testUrl.self::API_VERSION_V1.'/history/{id}',
555 self::ACTIVE_URL => $activeUrl.self::API_VERSION_V1.'/history/{id}'
556 ],
557 'historyReceipt' => [
558 self::TEST_URL => $testUrl.self::API_VERSION_V1.'/history/receipt/{id}',
559 self::ACTIVE_URL => $activeUrl.self::API_VERSION_V1.'/history/receipt/{id}'
560 ],
561 'reverse' => [
562 self::TEST_URL => $testUrl.self::API_VERSION_V1.'/reverse',
563 self::ACTIVE_URL => $activeUrl.self::API_VERSION_V1.'/reverse'
564 ],
565 'reverseMobile' => [
566 self::TEST_URL => $testUrl.self::API_VERSION_V1.'/reverse/mobile-return',
567 self::ACTIVE_URL => $activeUrl.self::API_VERSION_V1.'/reverse/mobile-return'
568 ],
569 ];
570 }
571
577 protected function getUrl(Sale\Payment $payment = null, $action): string
578 {
579 $url = parent::getUrl($payment, $action);
580 if ($payment !== null && ($action === 'history' || $action === 'historyReceipt'))
581 {
582 $url = str_replace('{id}', $this->getOperationId($payment), $url);
583 }
584
585 return $url;
586 }
587
591 public function getCurrencyList(): array
592 {
593 return ['KZT'];
594 }
595
599 public static function getIndicativeFields(): array
600 {
601 return [
602 self::REQUEST_PAY_SYSTEM_ID_PARAM,
603 self::REQUEST_PAYMENT_ID_PARAM,
604 self::REQUEST_SOURCE_PARAM,
605 ];
606 }
607
618 public function refund(Sale\Payment $payment, $refundableSum): Sale\PaySystem\ServiceResult
619 {
620 $result = new Sale\PaySystem\ServiceResult();
621
622 $authResult = $this->auth($payment);
623 if (!$authResult->isSuccess())
624 {
625 $result->addErrors($authResult->getErrors());
626 return $result;
627 }
628
629 $invoiceHistoryResult = $this->getInvoiceHistory($payment, $authResult->getData()['token']);
630 if (!$invoiceHistoryResult->isSuccess())
631 {
632 $result->addErrors($invoiceHistoryResult->getErrors());
633 return $result;
634 }
635
636 if ($invoiceHistoryResult->getData()['status'] !== self::HISTORY_STATUS_PAID)
637 {
638 $result->addError(
639 new Main\Error(
640 Main\Localization\Loc::getMessage('SALE_HPS_WOOPPAY_REFUND_STATUS_ERROR')
641 )
642 );
643 }
644
645 $invoiceHistoryReceiptResult = $this->getInvoiceHistoryReceipt($payment, $authResult->getData()['token']);
646 if (!$invoiceHistoryReceiptResult->isSuccess())
647 {
648 $result->addErrors($invoiceHistoryReceiptResult->getErrors());
649 return $result;
650 }
651
652 $url = $this->getUrl($payment, 'reverse');
653 $params = [
654 'operation_id' => $this->getOperationId($payment),
655 'description' => $payment->getField('PAY_RETURN_COMMENT')
656 ?: Main\Localization\Loc::getMessage('SALE_HPS_WOOPPAY_REFUND_REASON'),
657 ];
658
659 if ($this->isMobileAgent($invoiceHistoryReceiptResult->getData()['agent']))
660 {
661 $url = $this->getUrl($payment, 'reverseMobile');
662 $params['force_refund'] = true;
663 }
664
665 $headers = $this->getHeaders();
666 $headers['Authorization'] = $authResult->getData()['token'];
667
668 $sendResult = $this->send(self::SEND_METHOD_POST, $url, $headers, $params);
669 if ($sendResult->isSuccess())
670 {
671 $result->setOperationType(Sale\PaySystem\ServiceResult::MONEY_LEAVING);
672 }
673 else
674 {
675 $result->addErrors($sendResult->getErrors());
676 }
677
678 return $result;
679 }
680
685 private function isMobileAgent(string $agent): bool
686 {
687 $agentList = ['agentkartel2', 'agentkcell', 'agenttele2'];
688 return (bool)array_filter($agentList, static function ($value) use ($agent) {
689 return mb_strpos($agent, $value) !== false;
690 });
691 }
692
703 public function processRequest(Sale\Payment $payment, Main\Request $request): Sale\PaySystem\ServiceResult
704 {
705 $result = new Sale\PaySystem\ServiceResult();
706
707 $authResult = $this->auth($payment);
708 if (!$authResult->isSuccess())
709 {
710 $result->addErrors($authResult->getErrors());
711 return $result;
712 }
713
714 $invoiceHistoryResult = $this->getInvoiceHistory($payment, $authResult->getData()['token']);
715 if (!$invoiceHistoryResult->isSuccess())
716 {
717 $result->addErrors($invoiceHistoryResult->getErrors());
718 return $result;
719 }
720
721 $invoiceHistoryData = $invoiceHistoryResult->getData();
722 if ($invoiceHistoryData['status'] === self::HISTORY_STATUS_PAID)
723 {
724 $fields = [
725 'PS_STATUS_CODE' => $invoiceHistoryData['status'],
726 'PS_SUM' => $invoiceHistoryData['amount'],
727 'PS_STATUS' => 'Y',
728 'PS_CURRENCY' => $payment->getField('CURRENCY'),
729 'PS_RESPONSE_DATE' => new Main\Type\DateTime(),
730 ];
731
732 if ($this->isSumCorrect($payment, $invoiceHistoryData['amount']))
733 {
734 $fields['PS_STATUS'] = 'Y';
735
736 Sale\PaySystem\Logger::addDebugInfo(
737 __CLASS__.': PS_CHANGE_STATUS_PAY='.$this->getBusinessValue($payment, 'PS_CHANGE_STATUS_PAY')
738 );
739
740 if ($this->getBusinessValue($payment, 'PS_CHANGE_STATUS_PAY') === 'Y')
741 {
742 $result->setOperationType(Sale\PaySystem\ServiceResult::MONEY_COMING);
743 }
744 }
745 else
746 {
747 $result->addError(new Main\Error(Main\Localization\Loc::getMessage('SALE_HPS_WOOPPAY_ERROR_SUM')));
748 }
749
750 $result->setPsData($fields);
751 }
752 else
753 {
754 $result->addError(
755 new Main\Error(
756 Main\Localization\Loc::getMessage(
757 'SALE_HPS_WOOPPAY_ERROR_REQUEST_STATUS',
758 [
759 '#STATUS#' => $invoiceHistoryData['status'],
760 ]
761 )
762 )
763 );
764 }
765
766 return $result;
767 }
768
779 private function getInvoiceHistory(Sale\Payment $payment, string $token): Sale\PaySystem\ServiceResult
780 {
781 $result = new Sale\PaySystem\ServiceResult();
782
783 $url = $this->getUrl($payment, 'history');
784 $headers['Authorization'] = $token;
785
786 $sendResult = $this->send(self::SEND_METHOD_GET, $url, $headers);
787 if ($sendResult->isSuccess())
788 {
789 $result->setData($sendResult->getData());
790 }
791 else
792 {
793 $result->addErrors($sendResult->getErrors());
794 }
795
796 return $result;
797 }
798
809 private function getInvoiceHistoryReceipt(Sale\Payment $payment, string $token): Sale\PaySystem\ServiceResult
810 {
811 $result = new Sale\PaySystem\ServiceResult();
812
813 $url = $this->getUrl($payment, 'historyReceipt');
814 $headers['Authorization'] = $token;
815
816 $sendResult = $this->send(self::SEND_METHOD_GET, $url, $headers);
817 if ($sendResult->isSuccess())
818 {
819 $result->setData($sendResult->getData());
820 }
821 else
822 {
823 $result->addErrors($sendResult->getErrors());
824 }
825
826 return $result;
827 }
828
838 private function isSumCorrect(Sale\Payment $payment, $sum): bool
839 {
840 Sale\PaySystem\Logger::addDebugInfo(
841 __CLASS__
842 .': WooppaySum = '.Sale\PriceMaths::roundPrecision($sum)
843 .'; paymentSum = '.Sale\PriceMaths::roundPrecision($payment->getSum())
844 );
845
846 return Sale\PriceMaths::roundPrecision($sum) === Sale\PriceMaths::roundPrecision($payment->getSum());
847 }
848
853 public function getPaymentIdFromRequest(Main\Request $request)
854 {
855 return $request->get(self::REQUEST_PAYMENT_ID_PARAM);
856 }
857
862 private function getOperationId(Sale\Payment $payment): ?string
863 {
864 $psInvoiceId = $payment->getField('PS_INVOICE_ID');
865 if ($psInvoiceId)
866 {
867 [, $operationId] = explode(self::INVOICE_ID_DELIMITER, $psInvoiceId);
868 return (string)$operationId;
869 }
870
871 return null;
872 }
873
879 private static function encode(array $data)
880 {
881 return Main\Web\Json::encode($data, JSON_UNESCAPED_UNICODE);
882 }
883
888 private static function decode($data)
889 {
890 try
891 {
892 return Main\Web\Json::decode($data);
893 }
894 catch (Main\ArgumentException $exception)
895 {
896 return false;
897 }
898 }
899
910 public function sendResponse(Sale\PaySystem\ServiceResult $result, Main\Request $request)
911 {
912 if ($result->isSuccess())
913 {
915 global $APPLICATION;
916 $APPLICATION->RestartBuffer();
917
918 $result = self::encode([
919 "data" => 1
920 ]);
921
922 Sale\PaySystem\Logger::addDebugInfo(__CLASS__.': response: '.$result);
923
924 echo $result;
925 }
926 }
927}
$sum
Определения checkout.php:6
global $APPLICATION
Определения include.php:80
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
Определения catalog_reindex.php:36
static loadMessages($file)
Определения loc.php:65
const E164
Определения format.php:7
showTemplate(Payment $payment=null, $template='')
Определения baseservicehandler.php:59
getBusinessValue(Payment $payment=null, $code)
Определения baseservicehandler.php:184
$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
while($arParentIBlockProperty=$dbParentIBlockProperty->Fetch()) $errorMessage
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
Order
Определения order.php:6
trait Error
Определения error.php:11
$payment
Определения payment.php:14
$order
Определения payment.php:8
$entityId
Определения payment.php:4
$message
Определения payment.php:8
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$response
Определения result.php:21
$method
Определения index.php:27
$postData
Определения index.php:29
$clientId
Определения seo_client.php:18
$error
Определения subscription_card_product.php:20
$action
Определения file_dialog.php:21
$url
Определения iframe.php:7
$fields
Определения yandex_run.php:501