Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

При оплате товара с разными цветами через Сбербанк, он выдает ошибку #8 [item.itemCode] дублируется


Alex5557

Recommended Posts

При оплате одного и того же товара с разными цветами через Сбербанк, он выдает ошибку #8 [item.itemCode] дублируется.

Используется официальны плагин от Сбербанка - https://securepayments.sberbank.ru/wiki/doku.php/integration:cms:opencart:start

 

При обращении в тех. поддержку Сбербанка ответили:

itemCode каждой позиции должен быть уникальным. Дублирование itemCode приводит к данной ошибке.

Я так понимаю проблема примерно здесь:

Спойлер

/**
     * Регистрация заказа.
     * Переадресация покупателя при успешной регистрации.
     * Вывод ошибки при неуспешной регистрации.
     */
    public function payment()
    {

        // for config settings
        $this->initializeRbs();

        $this->load->model('checkout/order');
        $order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);
        $order_number = (int)$order_info['order_id'];
        $amount = $order_info['total'] * 100;
        $return_url = $this->url->link('extension/payment/rbs/callback');


        // here we will collect data for orderBundle
        $orderBundle = [];

        $orderBundle['customerDetails'] = array(
            'email' => $order_info['email'],
            'phone' => preg_match('/[7]\d{9}/', $order_info['telephone']) ? $order_info['telephone'] : ''
        );

        // ITEMS
        foreach ($this->cart->getProducts() as $product) {

            $product_taxSum = $this->tax->getTax($product['price'], $product['tax_class_id']);
            $product_amount = ( $product['price'] + $product_taxSum ) * $product['quantity'];

            $product_data = array(
                'positionId' => $product['cart_id'],
                'name' => $product['name'],
                'quantity' => array(
                    'value' => $product['quantity'],
                    //todo fix piece
                    'measure' => "piece"
                ),
                'itemAmount' => $product_amount * 100,
                'itemCode' => $product['product_id'],
                'tax' => array(
                    // todo: some question taxType
                    'taxType' => $this->config->get('payment_rbs_taxType'),
                    'taxSum' => $product_taxSum * 100
                ),
                'itemPrice' => ($product['price'] + $product_taxSum) * 100,
            );

            // FFD 1.05 added
            if ($this->rbs->getFFDVersion() == 'v105') {

                $attributes = array();
                $attributes[] = array(
                    "name" => "paymentMethod",
                    "value" => $this->rbs->getPaymentMethodType()
                );
                $attributes[] = array(
                    "name" => "paymentObject",
                    "value" => $this->rbs->getPaymentObjectType()
                );

                $product_data['itemAttributes']['attributes'] = $attributes;
            }

            $orderBundle['cartItems']['items'][] = $product_data;

        }

        // DELIVERY
        if (isset($this->session->data['shipping_method']['cost']) && $this->session->data['shipping_method']['cost'] > 0) {

            $delivery['positionId'] = 'delivery';
            $delivery['name'] = $this->session->data['shipping_method']['title'];
            $delivery['itemAmount'] = $this->session->data['shipping_method']['cost'] * 100;
            $delivery['quantity']['value'] = 1;
            //todo fix piece
            $delivery['quantity']['measure'] = 'piece';
            $delivery['itemCode'] = $this->session->data['shipping_method']['code'];
            $delivery['tax']['taxType'] = $this->config->get('payment_rbs_taxType');
            $delivery['tax']['taxSum'] = 0;
            $delivery['itemPrice'] = $this->session->data['shipping_method']['cost'] * 100;

            // FFD 1.05 added
            if ($this->rbs->getFFDVersion() == 'v105') {

                $attributes = array();
                $attributes[] = array(
                    "name" => "paymentMethod",
                    "value" => 4
                );
                $attributes[] = array(
                    "name" => "paymentObject",
                    "value" => 4
                );

                $delivery['itemAttributes']['attributes'] = $attributes;
            }

            $orderBundle['cartItems']['items'][] = $delivery;
        }

        $response = $this->rbs->register_order($order_number, $amount, $return_url, $orderBundle);


        if (isset($response['errorCode'])) {
            $this->document->setTitle($this->language->get('error_title'));

            $data['header'] = $this->load->controller('common/header');
            $data['column_left'] = $this->load->controller('common/column_left');
            $data['column_right'] = $this->load->controller('common/column_right');
            $data['content_top'] = $this->load->controller('common/content_top');
            $data['button_continue'] = $this->language->get('error_continue');

            $data['heading_title'] = $this->language->get('error_title') . ' #' . $response['errorCode'];
            $data['text_error'] = $response['errorMessage'];
            $data['continue'] = $this->url->link('checkout/cart');

            $data['content_bottom'] = $this->load->controller('common/content_bottom');
            $data['footer'] = $this->load->controller('common/footer');

            $this->response->setOutput($this->get_template('error/rbs', $data));
        } else {
            $this->response->redirect($response['formUrl']);
        }
    }

 

 

Как мне в итоге быть? Проблема в Opencart или в Сбербанке?

Благодарю за помощь.

 

Змінено користувачем Alex5557
Надіслати
Поділитися на інших сайтах


18 минут назад, Alex5557 сказал:

Проблема в Opencart или в Сбербанке?

Проблема в модуле сбербанка для опенкарта, когда вы используете опции, в корзину добавляется товар с одним и тем же id, для сбербанка же id продукта должен быть видимо уникальным

Змінено користувачем Pavel666
Надіслати
Поділитися на інших сайтах

17 минут назад, Pavel666 сказал:

Воспользуетесь лучше 

 

К сожалению слишком дорого для меня.

То есть если я подправлю плагин Сбербанка чтобы передавал разные product_id ... можно ли так решить проблему?

Надіслати
Поділитися на інших сайтах


1 час назад, Alex5557 сказал:

К сожалению слишком дорого для меня.

То есть если я подправлю плагин Сбербанка чтобы передавал разные product_id ... можно ли так решить проблему?

да, попробуйте при наличии опций у товара, добавлять постфикс к id, или еще проще, записывается id в массив, и перед записью проверяете есть ли данный id в массиве, если есть добавляете префикс, или постфикс

Змінено користувачем Pavel666
Надіслати
Поділитися на інших сайтах

1 час назад, mpn2005 сказал:

На это:


'itemCode' => $product['product_id'].'-'.$product['cart_id'],

можете объяснить за что отвечает $product['cart_id'] ?

Я допустим думал сделать так

'itemCode' => $product['product_id'] . "-" . $product['option'][0]['option_id'] . "-" . $product['option'][0]['option_value_id'],

Или ваше решение логичнее?

Надіслати
Поділитися на інших сайтах


14 минут назад, Alex5557 сказал:

Я допустим думал сделать так

И получите ошибку, если у товара нет опции.

 

14 минут назад, Alex5557 сказал:

можете объяснить за что отвечает $product['cart_id'] ?

Это уникальный id товара в корзине.

Можно просто его передавать, но всё же стоит отставить id товара. Мало ли понадобится.

  • +1 2
Надіслати
Поділитися на інших сайтах

5 минут назад, mpn2005 сказал:

Это уникальный id товара в корзине.

Можно просто его передавать, но всё же стоит отставить id товара. Мало ли понадобится.

 

Спасибо

Надіслати
Поділитися на інших сайтах


  • 5 months later...
В 19.04.2019 в 19:41, mpn2005 сказал:

Замените это:


'itemCode' => $product['product_id'],

На это:


'itemCode' => $product['product_id'].'-'.$product['cart_id'],

Спасибо! Была подобная проблема, все решилось этой правкой. 

Надіслати
Поділитися на інших сайтах


  • 3 months later...
On 4/19/2019 at 8:41 PM, mpn2005 said:

Замените это:


'itemCode' => $product['product_id'],

На это:


'itemCode' => $product['product_id'].'-'.$product['cart_id'],

Я прошу прощения, можно для чайников пояснить где этот код меняется? Та же проблема. 

Надіслати
Поділитися на інших сайтах


7 часов назад, Ngg5 сказал:

Я прошу прощения, можно для чайников пояснить где этот код меняется? Та же проблема. 

У меня нет этого модуля. Поэтому не могу сказать в каком файле находится данная строка.

Надіслати
Поділитися на інших сайтах

1 минуту назад, Ngg5 сказал:

Ясно, спасибо за ответ

Откройте дистрибутив модуля и поищите в папке catalog/model

Во всех файлах по очереди в данной папке, учитывая вложенные подпапки.

 

Иногда бывает ещё в system/library

Надіслати
Поділитися на інших сайтах

  • 4 months later...
В 19.04.2019 в 13:59, Alex5557 сказал:

При оплате одного и того же товара с разными цветами через Сбербанк, он выдает ошибку #8 [item.itemCode] дублируется.

 

Как мне в итоге быть? Проблема в Opencart или в Сбербанке?

Благодарю за помощь.

 

Вот так такое тож норм

 

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.