1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
handler.php
См. документацию.
1<?php
2namespace Sale\Handlers\PaySystem;
3
4use Bitrix\Main,
5 Bitrix\Main\Web,
6 Bitrix\Main\Localization\Loc,
7 Bitrix\Sale\PaySystem,
8 Bitrix\Main\Request,
9 Bitrix\Sale,
10 Bitrix\Sale\Payment,
11 Bitrix\Sale\PriceMaths;
12
13Loc::loadMessages(__FILE__);
14
19class AdyenHandler
22{
23 private const APPLE_PAY_INITIATIVE_CONTEXT = '/bitrix/tools/sale/applepay_gateway.php';
24
26 private const PAYMENT_API_VERSION = "v51";
28 private const CHECKOUT_API_VERSION = "v51";
29
31 private const EVENT_CODE_AUTHORISATION = "AUTHORISATION";
32
33 private const HTTP_RESPONSE_CODE_OK = 200;
34
35 private const RESULT_CODE_AUTHORISED = "Authorised";
36 private const RESULT_CODE_ERROR = "Error";
37 private const RESULT_CODE_REFUSED = "Refused";
38
39 private const RESPONSE_REFUND_RECEIVED = "[refund-received]";
40 private const NOTIFICATION_RESPONSE_ACCEPTED = "[accepted]";
41
42 private const MAX_REQUEST_ATTEMPT = 3;
43
44 public const PAYMENT_METHOD_APPLE_PAY = "apple_pay";
45
56 public function initiatePay(Payment $payment, Request $request = null): PaySystem\ServiceResult
57 {
58 $result = new PaySystem\ServiceResult();
59
60 if ($request === null)
61 {
62 $request = Main\Context::getCurrent()->getRequest();
63 }
64
65 if ($action = $request->get("action"))
66 {
67 if ($this->isActionExists($action))
68 {
70 }
71 else
72 {
73 $result->addError(new Main\Error(Loc::getMessage("SALE_HPS_ADYEN_ERROR_ACTION", [
74 "#ACTION#" => $action,
75 ])));
76 }
77 }
78 else
79 {
80 $result = $this->initiatePayInternal($payment);
81 }
82
83 return $result;
84 }
85
95 private function initiatePayInternal(Payment $payment): PaySystem\ServiceResult
96 {
97 $result = new PaySystem\ServiceResult();
98
99 $params = array(
100 "PAYMENT_ID" => $payment->getId(),
101 "PAYSYSTEM_ID" => $this->service->getField("ID"),
102 "MERCHANT_ID" => $this->getBusinessValue($payment, "APPLE_PAY_MERCHANT_ID"),
103 "ORDER_ID" => $payment->getOrder()->getId(),
104 "TOTAL_SUM" => PriceMaths::roundPrecision($payment->getSum()),
105 "CURRENCY" => $payment->getField("CURRENCY"),
106 "MAKE_PAYMENT_ACTION" => "makePaymentAction",
107 );
108
109 $modeParams = $this->getModeParams($payment);
110 if (isset($modeParams["ERRORS"]))
111 {
112 $result->addErrors($modeParams["ERRORS"]);
113 return $result;
114 }
115
116 $params = array_merge($params, $modeParams);
117 $this->setExtraParams($params);
118
119 $template = "template_".$this->service->getField("PS_MODE");
120 $showTemplateResult = $this->showTemplate($payment, $template);
121 if ($showTemplateResult->isSuccess())
122 {
123 $result->setTemplate($showTemplateResult->getTemplate());
124 }
125 else
126 {
127 $result->addErrors($showTemplateResult->getErrors());
128 }
129
130 return $result;
131 }
132
139 private function isActionExists($action): bool
140 {
141 return is_callable([$this, $action]);
142 }
143
147 public static function getHandlerModeList(): array
148 {
149 return [
150 self::PAYMENT_METHOD_APPLE_PAY => "Apple Pay",
151 ];
152 }
153
159 public static function isMyResponse(Request $request, $paySystemId): bool
160 {
161 $notificationItem = static::getNotificationItem();
162 return isset($notificationItem["additionalData"]["metadata.paySystemId"])
163 && ((int)$notificationItem["additionalData"]["metadata.paySystemId"] === (int)$paySystemId);
164 }
165
169 private static function getNotificationItem()
170 {
171 $inputStream = static::readFromStream();
172 $data = static::decode($inputStream);
173 if (isset($data["notificationItems"][0]["NotificationRequestItem"])
174 && is_array($data["notificationItems"][0]["NotificationRequestItem"])
175 )
176 {
177 return $data["notificationItems"][0]["NotificationRequestItem"];
178 }
179
180 return false;
181 }
182
186 public function getCurrencyList(): array
187 {
188 return ["USD", "EUR"];
189 }
190
200 public function processRequest(Payment $payment, Request $request): PaySystem\ServiceResult
201 {
202 $result = new PaySystem\ServiceResult();
203
204 $notificationItem = static::getNotificationItem();
205 if ($notificationItem)
206 {
207 $secretKey = $this->getBusinessValue($payment, "ADYEN_HMAC_KEY");
208 if (
209 empty($secretKey)
210 || empty($notificationItem["additionalData"]["hmacSignature"])
211 || !$this->isSignatureCorrect($notificationItem, $secretKey)
212 )
213 {
214 $result->addError(new Main\Error(Loc::getMessage("SALE_HPS_ADYEN_ERROR_CHECK_SUM")));
215 return $result;
216 }
217
218 if (isset($notificationItem["eventCode"])
219 && $notificationItem["eventCode"] === self::EVENT_CODE_AUTHORISATION
220 && filter_var($notificationItem["success"], FILTER_VALIDATE_BOOLEAN)
221 )
222 {
223 $description = Loc::getMessage("SALE_HPS_ADYEN_TRANSACTION").$notificationItem["pspReference"];
224 $fields = [
225 "PS_INVOICE_ID" => $notificationItem["pspReference"],
226 "PS_STATUS_CODE" => $notificationItem["eventCode"],
227 "PS_STATUS_DESCRIPTION" => $description,
228 "PS_SUM" => $notificationItem["amount"]["value"] / 100,
229 "PS_STATUS" => "N",
230 "PS_CURRENCY" => $notificationItem["amount"]["currency"],
231 "PS_RESPONSE_DATE" => new Main\Type\DateTime()
232 ];
233
234 if ($this->isSumCorrect($payment, $notificationItem["amount"]["value"] / 100))
235 {
236 $fields["PS_STATUS"] = "Y";
237 PaySystem\Logger::addDebugInfo(
238 "Adyen: PS_CHANGE_STATUS_PAY=".$this->getBusinessValue($payment, "PS_CHANGE_STATUS_PAY")
239 );
240
241 if ($this->getBusinessValue($payment, "PS_CHANGE_STATUS_PAY") === "Y")
242 {
243 $result->setOperationType(PaySystem\ServiceResult::MONEY_COMING);
244 }
245 }
246 else
247 {
248 $error = Loc::getMessage("SALE_HPS_ADYEN_ERROR_SUM");
249 $fields["PS_STATUS_DESCRIPTION"] .= " ".$error;
250 $result->addError(new Main\Error($error));
251 }
252
253 $result->setPsData($fields);
254 }
255 }
256 else
257 {
258 $result->addError(new Main\Error(Loc::getMessage("SALE_HPS_ADYEN_ERROR_QUERY")));
259 }
260
261 return $result;
262 }
263
269 private function isSignatureCorrect($notificationItem, $secretKey): bool
270 {
271 $data = $this->getDataToSign($notificationItem);
272
273 $calculatedHmacSignature = hash_hmac("sha256", $data, pack("H*", $secretKey), true);
274 if ($calculatedHmacSignature === false)
275 {
276 return false;
277 }
278
279 $calculatedHmacSignature = base64_encode($calculatedHmacSignature);
280
281 $requestHmacSignature = $notificationItem["additionalData"]["hmacSignature"] ?? '';
282 return $calculatedHmacSignature === $requestHmacSignature;
283 }
284
289 private function getDataToSign($notificationItem): string
290 {
291 $data = [
292 $notificationItem["pspReference"] ?? "",
293 $notificationItem["originalReference"] ?? "",
294 $notificationItem["merchantAccountCode"] ?? "",
295 $notificationItem["merchantReference"] ?? "",
296 $notificationItem["amount"]["value"] ?? "",
297 $notificationItem["amount"]["currency"] ?? "",
298 $notificationItem["eventCode"] ?? "",
299 $notificationItem["success"] ?? "",
300 ];
301
302 // escape backslash and colon
303 $data = array_map(static function($value) {
304 return str_replace(":", "\\:", str_replace("\\", "\\\\", $value));
305 }, $data);
306
307 return implode(":", $data);
308 }
309
319 private function isSumCorrect(Payment $payment, $sum): bool
320 {
321 PaySystem\Logger::addDebugInfo(
322 "Adyen: adyenSum=".PriceMaths::roundPrecision($sum)."; paymentSum=".PriceMaths::roundPrecision($payment->getSum())
323 );
324
325 return PriceMaths::roundPrecision($sum) === PriceMaths::roundPrecision($payment->getSum());
326 }
327
332 public function getPaymentIdFromRequest(Request $request)
333 {
334 $notificationItem = static::getNotificationItem();
335 return $notificationItem["merchantReference"] ?? false;
336 }
337
348 private function getPaymentMethods(Payment $payment, string $channel): PaySystem\ServiceResult
349 {
350 $result = new PaySystem\ServiceResult();
351
352 $headers = $this->getHeaders($payment);
353 $requestParameters = [
354 "merchantAccount" => $this->getBusinessValue($payment, "ADYEN_MERCHANT_ID"),
355 "amount" => $this->getAmount($payment),
356 "channel" => $channel,
357 ];
358
359 $url = $this->getUrl($payment, "paymentMethod");
360 if (!$url)
361 {
362 $result->addError(new Main\Error(Loc::getMessage("SALE_HPS_ADYEN_ERROR_URL", [
363 "ACTION" => "paymentMethod",
364 ])));
365 return $result;
366 }
367
368 $sendResult = $this->send($url, $requestParameters, $headers);
369 if (!$sendResult->isSuccess())
370 {
371 $result->addErrors($sendResult->getErrors());
372 return $result;
373 }
374
375 $paymentMethods = [];
376 $response = $sendResult->getData();
377 if ($response && isset($response["groups"]))
378 {
379 foreach ($response["groups"] as $group)
380 {
381 if (isset($group["types"]))
382 {
383 $paymentMethods[] = $group["types"];
384 }
385 }
386 }
387
388 $paymentMethods = array_merge(...$paymentMethods);
389 $result->setData($paymentMethods);
390 return $result;
391 }
392
399 private function getApplePayWebSessionAction(Payment $payment, Request $request): PaySystem\ServiceResult
400 {
401 $applePay = new PaySystem\ApplePay(
402 $this->getBusinessValue($payment, "APPLE_PAY_MERCHANT_ID"),
403 $this->getBusinessValue($payment, "APPLE_PAY_MERCHANT_DISPLAY_NAME"),
404 $this->getBusinessValue($payment, "APPLE_PAY_DOMAIN"),
405 $this->getBusinessValue($payment, "APPLE_PAY_CERT_FILE")
406 );
407
408 return $applePay->getWebSession($request->get("url"));
409 }
410
422 public function makePaymentAction(Payment $payment, Request $request): PaySystem\ServiceResult
423 {
424 $result = new PaySystem\ServiceResult();
425
426 $headers = $this->getHeaders($payment);
427 $requestParameters = [
428 "amount" => $this->getAmount($payment),
429 "reference" => $payment->getId(),
430 "merchantAccount" => $this->getBusinessValue($payment, "ADYEN_MERCHANT_ID"),
431 "paymentMethod" => $this->getRequestPaymentMethod($request),
432 "metadata" => [
433 "paySystemId" => $this->service->getField("ID")
434 ]
435 ];
436
437 $url = $this->getUrl($payment, "payment");
438 if (!$url)
439 {
440 $result->addError(new Main\Error(Loc::getMessage("SALE_HPS_ADYEN_ERROR_URL", [
441 "ACTION" => "payment",
442 ])));
443 return $result;
444 }
445
446 $sendResult = $this->send($url, $requestParameters, $headers);
447 if (!$sendResult->isSuccess())
448 {
449 $result->addErrors($sendResult->getErrors());
450 return $result;
451 }
452
453 $response = $sendResult->getData();
454 $result->setPsData(array("PS_INVOICE_ID" => $response["pspReference"]));
455
456 $result->setData($response);
457 return $result;
458 }
459
471 private function getIMessagePaymentAction(Payment $payment, Request $request): PaySystem\ServiceResult
472 {
473 $paymentMethodResult = $this->getPaymentMethods($payment, "iOS");
474 if (!$paymentMethodResult->isSuccess())
475 {
476 $result = new PaySystem\ServiceResult();
477 $result->addErrors($paymentMethodResult->getErrors());
478 return $result;
479 }
480
481 $applePay = new PaySystem\ApplePay(
482 $this->getBusinessValue($payment, "APPLE_PAY_MERCHANT_ID"),
483 $this->getBusinessValue($payment, "APPLE_PAY_MERCHANT_DISPLAY_NAME"),
484 $this->getBusinessValue($payment, "APPLE_PAY_DOMAIN"),
485 $this->getBusinessValue($payment, "APPLE_PAY_CERT_FILE")
486 );
487
488 $host = $request->isHttps() ? 'https://' : 'http://';
489 $gateWayUrl = new Main\Web\Uri($host.$request->getHttpHost().static::APPLE_PAY_INITIATIVE_CONTEXT);
490 $gateWayUrl->addParams([
491 'PAYMENT_ID' => $payment->getId(),
492 'PAYSYSTEM_ID' => $this->service->getField('ID'),
493 'action' => 'makePaymentAction'
494 ]);
495
496 $applePay->setInitiativeContext($gateWayUrl->getLocator());
497
498 $config = [
499 "merchantDisplayName" => $this->getBusinessValue($payment, "APPLE_PAY_MERCHANT_DISPLAY_NAME"),
500 "supportedNetworks" => $paymentMethodResult->getData(),
501 "merchantName" => $this->getBusinessValue($payment, "APPLE_PAY_MERCHANT_DISPLAY_NAME"),
502 "countryCode" => mb_strtoupper($this->getBusinessValue($payment, "APPLE_PAY_COUNTRY_CODE")),
503 "endpoints" => [
504 "paymentGatewayUrl" => $gateWayUrl->getLocator(),
505 ]
506 ];
507
508 return $applePay->getIMessagePayment($payment, $config);
509 }
510
515 private function getRequestPaymentMethod(Request $request): array
516 {
517 $result = [];
518
519 $psMode = $this->service->getField("PS_MODE");
520 if ($psMode === self::PAYMENT_METHOD_APPLE_PAY)
521 {
522 $result = [
523 "type" => "applepay",
524 "applepay.token" => static::decode($request->get("paymentData")),
525 ];
526 }
527
528 return $result;
529 }
530
536 protected function getUrl(Payment $payment = null, $action)
537 {
538 $url = parent::getUrl($payment, $action);
539 if ($payment !== null && !$this->isTestMode($payment))
540 {
541 $liveEndpointUrlPrefix = $this->getBusinessValue($payment, "ADYEN_LIVE_URL_PREFIX");
542 if ($liveEndpointUrlPrefix)
543 {
544 $url = str_replace("#LIVE_URL_PREFIX#", $liveEndpointUrlPrefix, $url);
545 }
546 else
547 {
548 $url = "";
549 }
550 }
551
552 return $url;
553 }
554
558 protected function getUrlList(): array
559 {
560 $testCheckoutUrl = "https://checkout-test.adyen.com/".self::CHECKOUT_API_VERSION;
561 $activeCheckoutUrl = "https://#LIVE_URL_PREFIX#-checkout-live.adyenpayments.com/checkout/".self::CHECKOUT_API_VERSION;
562
563 $testPaymentUrl = "https://pal-test.adyen.com/pal/servlet/Payment/".self::PAYMENT_API_VERSION;
564 $activePaymentUrl = "https://#LIVE_URL_PREFIX#-pal-live.adyenpayments.com/pal/servlet/Payment/".self::PAYMENT_API_VERSION;
565
566 return [
567 "paymentMethod" => [
568 self::TEST_URL => $testCheckoutUrl."/paymentMethods",
569 self::ACTIVE_URL => $activeCheckoutUrl."/paymentMethods"
570 ],
571 "payment" => [
572 self::TEST_URL => $testCheckoutUrl."/payments",
573 self::ACTIVE_URL => $activeCheckoutUrl."/payments"
574 ],
575 "refund" => [
576 self::TEST_URL => $testPaymentUrl."/refund",
577 self::ACTIVE_URL => $activePaymentUrl."/refund"
578 ],
579 ];
580 }
581
586 protected function isTestMode(Payment $payment = null): bool
587 {
588 return ($this->getBusinessValue($payment, "PS_IS_TEST") === "Y");
589 }
590
595 private function getHeaders(Payment $payment): array
596 {
597 return [
598 "Content-Type" => "application/json",
599 "x-API-key" => $this->getBusinessValue($payment, "ADYEN_X_API_KEY"),
600 "Idempotency-Key" => $this->getIdempotenceKey(),
601 ];
602 }
603
607 private function getIdempotenceKey(): string
608 {
609 return sprintf("%04x%04x-%04x-%04x-%04x-%04x%04x%04x",
610 mt_rand(0, 0xffff), mt_rand(0, 0xffff),
611 mt_rand(0, 0xffff),
612 mt_rand(0, 0x0fff) | 0x4000,
613 mt_rand(0, 0x3fff) | 0x8000,
614 mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
615 );
616 }
617
628 public function refund(Payment $payment, $refundableSum): PaySystem\ServiceResult
629 {
630 $result = new PaySystem\ServiceResult();
631
632 $headers = $this->getHeaders($payment);
633 $requestParameters = [
634 "originalReference" => $payment->getField("PS_INVOICE_ID"),
635 "modificationAmount" => [
636 "value" => PriceMaths::roundPrecision($refundableSum * 100),
637 "currency" => $payment->getField("CURRENCY"),
638 ],
639 "reference" => $payment->getId(),
640 "merchantAccount" => $this->getBusinessValue($payment, "ADYEN_MERCHANT_ID"),
641 ];
642
643 $url = $this->getUrl($payment, "refund");
644 if ($url)
645 {
646 $sendResult = $this->send($url, $requestParameters, $headers);
647 if ($sendResult->isSuccess())
648 {
649 $response = $sendResult->getData();
650 if ($response["response"] === self::RESPONSE_REFUND_RECEIVED)
651 {
652 $result->setOperationType(PaySystem\ServiceResult::MONEY_LEAVING);
653 }
654 }
655 else
656 {
657 $result->addErrors($sendResult->getErrors());
658 }
659 }
660 else
661 {
662 $result->addError(new Main\Error(Loc::getMessage("SALE_HPS_ADYEN_ERROR_URL", [
663 "ACTION" => "refund",
664 ])));
665 }
666
667 if (!$result->isSuccess())
668 {
669 PaySystem\Logger::addError("Adyen: refund: ".implode("\n", $result->getErrorMessages()));
670 }
671
672 return $result;
673 }
674
686 private function send($url, array $params, array $headers = array()): PaySystem\ServiceResult
687 {
688 $result = new PaySystem\ServiceResult();
689
690 $httpClient = new Web\HttpClient();
691 foreach ($headers as $name => $value)
692 {
693 $httpClient->setHeader($name, $value);
694 }
695
696 $postData = null;
697 if ($params)
698 {
699 $postData = static::encode($params);
700 }
701
702 PaySystem\Logger::addDebugInfo("Adyen: request data: ".$postData);
703
704 $response = $httpClient->post($url, $postData);
705 if ($response === false)
706 {
707 $errors = $httpClient->getError();
708 foreach ($errors as $code =>$message)
709 {
710 $result->addError(new Main\Error($message, $code));
711 }
712
713 return $result;
714 }
715
716 PaySystem\Logger::addDebugInfo("Adyen: response data: ".$response);
717
718 static $attempt = 0;
719 $responseHeader = $httpClient->getHeaders();
720 if ($responseHeader->get("Transient-Error") && $attempt < self::MAX_REQUEST_ATTEMPT)
721 {
722 $second = 2 ** $attempt;
723 sleep($second);
724
725 $attempt++;
726 $result = $this->send($url, $headers, $params);
727 }
728
729 $response = static::decode($response);
730
731 $httpStatus = $httpClient->getStatus();
732 if ($httpStatus === self::HTTP_RESPONSE_CODE_OK)
733 {
734 $result->setData($response);
735
736 if (isset($response["resultCode"]) && $response["resultCode"] !== self::RESULT_CODE_AUTHORISED)
737 {
738 if ($response["resultCode"] === self::RESULT_CODE_ERROR || $response["resultCode"] === self::RESULT_CODE_REFUSED)
739 {
740 $result->addError(new Main\Error(Loc::getMessage("SALE_HPS_ADYEN_SEND_REFUSAL_REASON_ERROR", [
741 "#RESULT_CODE#" => $response["resultCode"],
742 "#REFUSAL_REASON#" => $response["refusalReason"],
743 ])));
744 }
745 else
746 {
747 $result->addError(new Main\Error(Loc::getMessage("SALE_HPS_ADYEN_SEND_RESULT_CODE_ERROR", [
748 "#RESULT_CODE#" => $response["resultCode"],
749 ])));
750 }
751 }
752 }
753 else
754 {
755 $result->addError(new Main\Error(Loc::getMessage("SALE_HPS_ADYEN_HTTP_STATUS", [
756 "#HTTP_STATUS#" => $httpStatus
757 ]), $httpStatus));
758
759 if (isset($response["errorCode"], $response["message"]))
760 {
761 $result->addError(new Main\Error($response["message"], $response["errorCode"]));
762 }
763 }
764
765 return $result;
766 }
767
771 public function isRefundableExtended(): bool
772 {
773 return true;
774 }
775
785 private function getModeParams(Payment $payment): array
786 {
787 $result = [];
788
789 $psMode = $this->service->getField("PS_MODE");
790 if ($psMode === self::PAYMENT_METHOD_APPLE_PAY)
791 {
792 $result = $this->getApplePayParams($payment);
793 }
794
795 return $result;
796 }
797
807 private function getApplePayParams(Payment $payment): array
808 {
809 $paymentMethodResult = $this->getPaymentMethods($payment, "Web");
810 if (!$paymentMethodResult->isSuccess())
811 {
812 return [
813 "ERRORS" => $paymentMethodResult->getErrors(),
814 ];
815 }
816
817 $paymentMethodData = $paymentMethodResult->getData();
818 return [
819 "SUPPORTED_METHOD" => "https://apple.com/apple-pay",
820 "DISPLAY_NAME" => $this->getBusinessValue($payment, "APPLE_PAY_MERCHANT_DISPLAY_NAME"),
821 "DOMAIN_NAME" => $this->getBusinessValue($payment, "APPLE_PAY_DOMAIN"),
822 "COUNTRY_CODE" => mb_strtoupper($this->getBusinessValue($payment, "APPLE_PAY_COUNTRY_CODE")),
823 "GET_SESSION_ACTION" => "getApplePayWebSessionAction",
824 "MERCHANT_CAPABILITIES" => ["supports3DS"],
825 "SUPPORTED_NETWORKS" => $paymentMethodData,
826 ];
827 }
828
834 private function getAmount(Payment $payment): array
835 {
836 return [
837 "value" => PriceMaths::roundPrecision($payment->getSum() * 100),
838 "currency" => $payment->getField("CURRENCY"),
839 ];
840 }
841
845 private static function readFromStream()
846 {
847 return file_get_contents("php://input");
848 }
849
855 private static function encode(array $data)
856 {
857 return Main\Web\Json::encode($data, JSON_UNESCAPED_UNICODE);
858 }
859
864 private static function decode($data)
865 {
866 try
867 {
868 return Main\Web\Json::decode($data);
869 }
870 catch (Main\ArgumentException $exception)
871 {
872 return false;
873 }
874 }
875
886 public function sendResponse(PaySystem\ServiceResult $result, Request $request)
887 {
888 if ($result->isSuccess())
889 {
891 global $APPLICATION;
892 $APPLICATION->RestartBuffer();
893
894 $result = static::encode([
895 "notificationResponse" => self::NOTIFICATION_RESPONSE_ACCEPTED
896 ]);
897 PaySystem\Logger::addDebugInfo("Adyen: response: ".$result);
898
899 echo $result;
900 }
901 }
902
906 public static function getModeList(): array
907 {
908 return [
909 self::PAYMENT_METHOD_APPLE_PAY
910 ];
911 }
912}
$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
showTemplate(Payment $payment=null, $template='')
Определения baseservicehandler.php:59
getBusinessValue(Payment $payment=null, $code)
Определения baseservicehandler.php:184
$data['IS_AVAILABLE']
Определения .description.php:13
$template
Определения file_edit.php:49
</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
if(Loader::includeModule( 'bitrix24')) elseif(Loader::includeModule('intranet') &&CIntranetUtils::getPortalZone() !=='ru') $description
Определения .description.php:24
$errors
Определения iblock_catalog_edit.php:74
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
Определения options.php:195
$name
Определения menu_edit.php:35
$host
Определения mysql_to_pgsql.php:32
trait Error
Определения error.php:11
$payment
Определения payment.php:14
$message
Определения payment.php:8
$config
Определения quickway.php:69
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$response
Определения result.php:21
$postData
Определения index.php:29
$error
Определения subscription_card_product.php:20
$action
Определения file_dialog.php:21
$url
Определения iframe.php:7
$fields
Определения yandex_run.php:501