Ошибка оплаты заказа с msBonus2 и mspTinkoff

Доброго дня!

Создал кнопку оплаты заказа в ЛК у пользователя, при нажатии перекидывает на Tinkoff оплату.

Получение ссылки простой код, спасибо большое Володе. (использую через аякс)
if (!$order = $modx->getObject('msOrder', ['id' => $order_id ])) {
        return $resp = ['success' => 0, 'text' => 'Такого заказа не найдено!'];
    }
    if ($payment = $order->getOne('Payment')) {
    $mShop2 = $modx->getService('miniShop2');
    if ($class = $payment->get('class')) {
        $mShop2->loadCustomClasses('payment');
        if (class_exists($class)) {

            $handler = new $class($order);
            if (method_exists($handler, 'getPaymentLink')) {
                $link = $handler->getPaymentLink($order);
                $payment_link = $link;
            }
        }
    }
}
В общем код работает. Создаю простой заказ, цены на сайте без копеек. Прохожу в ЛК нажимаю кнопку оплатить все перекидывает и можно оплачивать.

Возникает проблема при использовании бонусов. Привожу пример на реальном заказе.
1. Корзина без бонусов. сумма 620
joxi.ru/Grq5XZktk8BOQr
joxi.ru/1A5VxdktGZ8yVr

2. С бонусами. 33 бонуса сумма 587
joxi.ru/1A5VxdktGZ87Vr
joxi.ru/ZrJvYJoiMNxoRr

Стоит оплата онлайн, т.е. должно перекинуть на оплату тинькова. Но выдает ошибку.

в логах вот: (* — закоментил ненужное)
[2020-02-25 14:02:00] (ERROR @ */components/minishop2/custom/payment/msptinkoff.class.php : 394) [miniShop2:mspTinkoff] Test log.
[2020-02-25 14:02:00] (ERROR @ */core/components/minishop2/custom/payment/msptinkoff.class.php : 395) Array
(
    [TerminalKey] => 1570090465096
    [OrderId] => 658
    [Amount] => 58700
    [CustomerKey] => 1
    [Currency] => 643
    [DATA] => Array
        (
            [Email] => *
        )

    [Receipt] => Array
        (
            [Items] => Array
                (
                    [0] => Array
                        (
                            [Name] => Каша гречневая с цукатами
                            [Price] => 6627
                            [Quantity] => 5
                            [Amount] => 33135
                            [Tax] => none
                            [PaymentMethod] => full_payment
                            [PaymentObject] => commodity
                        )

                    [1] => Array
                        (
                            [Name] => Творожная запеканка с яблоками
                            [Price] => 14201
                            [Quantity] => 1
                            [Amount] => 14201
                            [Tax] => none
                            [PaymentMethod] => full_payment
                            [PaymentObject] => commodity
                        )

                    [2] => Array
                        (
                            [Name] => Творожная запеканка с черникой
                            [Price] => 11361
                            [Quantity] => 1
                            [Amount] => 11361
                            [Tax] => none
                            [PaymentMethod] => full_payment
                            [PaymentObject] => commodity
                        )

                )

            [Email] => *
            [Taxation] => envd
        )

    [Token] => 1c10ef24098028cf22e14924845c2ba95c253ca39c494507577863a2c9ee77b2
)

[2020-02-25 14:02:00] (ERROR @ */core/components/minishop2/custom/payment/msptinkoff.class.php : 396) Array
(
    [Success] => 
    [ErrorCode] => 308
    [Message] => Суммы в чеке и в платеже не совпадают.
)
Сложив из этого лога цены на товары получаю сумму 58697, что без 3х копеек почти равно сумме заказа 587, отсюда и ошибка «Суммы в чеке и в платеже не совпадают». Откуда float я так и не понял. вроде как бонусы int = 33.

В админке все ок
joxi.ru/12MvYEoi07yy7A
joxi.ru/Drljo63t0Jq7q2

В бд вроде как тоже
joxi.ru/vAWjKbotqy5Y92
joxi.ru/gmvKvnNcvQgyk2

Искал в кодах msBonus2 round думал округляет, но потом подумал вроде как mspTinkoff считает не правильно, должно же быть 587 и никаких там float, но хз может дело в msBonus2
И тут встает вопрос какой компонент косячит? как исправить? аль вообще miniShop2?
клиенты ругаются… оплаты нет на сайте…
Константин Ильин
25 февраля 2020, 14:52
modx.pro
1
999
0

Комментарии: 2

Павел Гвоздь
26 февраля 2020, 09:02
+1
Это вроде на стороне компонента Тиньков. Там округление такое сделано, чтобы была хоть какая-то возможность, чтобы сумма в чеке и платеже совпадали. То же самое и у Сбербанка…
    local
    07 мая 2022, 22:01
    0
    Как решили?
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      2