15 private const TYPE =
'paysystem';
17 private const PAY_SYSTEM_HANDLERS = [
18 \Sale\Handlers\PaySystem\YandexCheckoutHandler::class,
19 \Sale\Handlers\PaySystem\WooppayHandler::class,
20 \Sale\Handlers\PaySystem\RoboxchangeHandler::class,
21 \Sale\Handlers\PaySystem\PlatonHandler::class,
28 private $paySystemService;
32 $this->payment = $payment;
33 $this->paySystemService = $this->payment->getPaySystem();
49 if (!$this->paySystemService)
54 $actionFile = $this->paySystemService->getField(
'ACTION_FILE');
57 $isPaySystemExists = (bool)array_filter(
58 self::PAY_SYSTEM_HANDLERS,
59 static function ($paySystemHandler) use ($paySystemClassName) {
60 return strtolower($paySystemHandler) === $paySystemClassName;
64 return $isPaySystemExists && $this->payment->isPaid();
74 $paymentData = $this->getPaymentData();
78 'pay_system' => $this->paySystemService->getField(
'ACTION_FILE'),
79 'transactions' => $paymentData,
80 'ps_mode' => $this->paySystemService->getField(
'PS_MODE'),
81 'sum' => $this->payment->getField(
'SUM'),
82 'shopId' => $this->getShopId(),
89 private function getShopId(): ?string
91 $actionFile = $this->paySystemService->getField(
'ACTION_FILE');
92 if ($actionFile ===
'yandexcheckout')
94 $paysytemId = $this->paySystemService->getField(
'ID');
96 'YANDEX_CHECKOUT_SHOP_ID',
97 'PAYSYSTEM_' . $paysytemId,
106 'YANDEX_CHECKOUT_SHOP_ID',
107 'PAYSYSTEM_' . $paysytemId,
114 if (isset(
$shopId[
'PROVIDER_VALUE']) &&
$shopId[
'PROVIDER_VALUE'])
116 return (
int)
$shopId[
'PROVIDER_VALUE'];
119 if (!\
Bitrix\
Main\Loader::includeModule(
'seo'))
124 $yookassa = new \Bitrix\Seo\Checkout\Services\AccountYookassa();
127 return $yookassa->getProfile() ? $yookassa->getProfile()[
'ID'] :
null;
130 if ($actionFile ===
'roboxchange')
132 $robokassaShopSettings = (new \Bitrix\Sale\PaySystem\Robokassa\ShopSettings())->
get();
134 return $robokassaShopSettings[
'ROBOXCHANGE_SHOPLOGIN'] ??
null;
143 private function getPaymentData():
array
147 $externalId = $this->payment->getField(
'PS_INVOICE_ID');
148 $date = $this->payment->getField(
'PS_RESPONSE_DATE') ?: $this->payment->getField(
'DATE_PAID');
150 if (!($date instanceof Main\Type\DateTime))
152 $date =
new Main\Type\DateTime();
155 $date = $date->format(
'Y-m-d H:i:s');
158 'id' => $externalId ?: $this->payment->getField(
'XML_ID'),
159 'date_time' => $date,