Задать вопрос
yous
@yous

Bitrix и модуль эквайринга СберБанк 2.0?

Подскажите, можно ли отловить событие в модуле сбера когда создается заказ в платежном шлюзе?
нужно записать OrderId оплаты, что бы потом чекать статус оплаты. Т.к. родной модуль от сбера криво работает и не всегда при совершении оплаты клиентом статус доходит до Битрикса.

В модуле есть такакой файл Gateway.php с классом Gateway, метод создания заказа registerOrder() при его инициализации создаётся заказ и пишется лог
Небольшая часть из лога
RESPONSE: 
Array
(
    [orderId] => d08d121a-8e29-7837-9957-39715e28e03f
    [formUrl] => https://3dsec.sberbank.ru/payment/merchants/sbersafe/payment_ru.html?mdOrder=d08d121a-8e29-7837-9957-39715e28e03f
)


так же есть файл handler.php с классом class sberbank_ecom2Handler extends PaySystem\ServiceHandler implements PaySystem\IPrePayable
и методом public function initiatePay(Payment $payment, Request $request = null)

который подготавливает запрос для Gateway->registerOrder()

вот его конечное выполнение

public function initiatePay(Payment $payment, Request $request = null){
$RBS_Gateway = new \Sberbank\Payments\Gateway;
....
$gateResponse = $RBS_Gateway->registerOrder();
}


в $gateResponse содержится массив как раз нужной информации по созданному заказу в Сбер, то что выше попадает потом в лог.

array(16) {
  ["errorCode"]=>
  string(1) "0"
  ["errorMessage"]=>
  string(14) "Успешно"
  ["orderNumber"]=>
  string(6) "1126_1"
  ["orderStatus"]=>
  int(0)
  ["actionCode"]=>
  int(-100)
  ["actionCodeDescription"]=>
  string(0) ""
  ["amount"]=>
  int(164710)
  ["currency"]=>
  string(3) "643"
  ["date"]=>
  float(1574941478398)
  ["orderDescription"]=>
  string(0) ""
  ["merchantOrderParams"]=>
  array(3) {
    [0]=>
    array(2) {
      ["name"]=>
      string(7) "formUrl"
      ["value"]=>
      string(113) "https://3dsec.sberbank.ru/payment/merchants/sbersafe/payment_ru.html?mdOrder=d08d121a-8e29-7837-9957-39715e28e03f"
    }
    [1]=>
    array(2) {
      ["name"]=>
      string(3) "CMS"
      ["value"]=>
      string(14) "Bitrix 20.0.50"
    }
    [2]=>
    array(2) {
      ["name"]=>
      string(14) "Module-Version"
      ["value"]=>
      string(5) "1.0.2"
    }
  }
  ["attributes"]=>
  array(1) {
    [0]=>
    array(2) {
      ["name"]=>
      string(7) "mdOrder"
      ["value"]=>
      string(36) "d08d121a-8e29-7837-9957-39715e28e03f"
    }
  }
  ["terminalId"]=>
  string(6) "123456"
  ["paymentAmountInfo"]=>
.....


Да можно конечно изменить файлы модуля Сбербанка и забирать нужную информацию прям из метода, но модуль обновляется и затрет все наши доработки. Хочется как то стороне подцепится на это событие
  • Вопрос задан
  • 2341 просмотр
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@anton99zel Куратор тега 1С-Битрикс
29а класс средней школы №7
А вы не ищите легких путей?
На странице возврата в случае успешной оплаты используйте
CSaleOrder::StatusOrder
или
Поскольку сейчас используется вторая версия модуля, а у меня стоит первая версия, которая больше не обновляется, но работает отлично, то в файл
bitrix.modules.sberbank.ecom.payment.result.php можно внести правки , строка 97, если у вас тоже не ecom2.
$title = GetMessage('RBS_PAYMENT_ORDER_THANK');
            if ($response['orderStatus'] == 1) {
                $message = GetMessage('RBS_PAYMENT_ORDER_AUTH', array('#ORDER_ID#' => $orderNumberPrint));
            } else {
                $message = GetMessage('RBS_PAYMENT_ORDER_FULL_AUTH', array('#ORDER_ID#' => $orderNumberPrint));
            }

            $title = GetMessage('RBS_PAYMENT_ORDER_THANK');
            $message = GetMessage('RBS_PAYMENT_ORDER_PAY1', array('#ORDER_ID#' => $orderNumberPrint));
if (!CSaleOrder::StatusOrder($order_number, "OP")) echo "";

Зачем ловить события?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы