• Resolved luzinis

    (@luzinis)


    Версия WC: 3.5.3
    Версия плагина RetailCRM: 3.3.8

    Шаги для воспроизведения:

    0. Сделать новый заказ на стороне магазина. При этом НЕ ЗАКРЫВАТЬ финальную страницу. В адресной строке должен оставаться запрос вида: hostname/checkout/order-received/6269/?key=wc_order_5c32424ef23b1

    1. Увидеть заказ на стороне RetailCRM

    2. Изменить статус заказа на стороне RetailCRM на “Выполнен”

    3. На стороне магазина сделать рефреш финальной страницы

    Фактическое поведение: Статус заказа на стороне RetailCRM изменился на “Новый”
    Ожидаемое поведение: Обновление страницы не должно вызывать обновление заказа.

    • This topic was modified 5 years, 10 months ago by luzinis.
    • This topic was modified 5 years, 10 months ago by luzinis.
Viewing 15 replies - 1 through 15 (of 21 total)
  • Thread Starter luzinis

    (@luzinis)

    Как только приходят email-уведомление от RetailCRM, что статус сменился с “Выполнен” на “Новый”, сразу бегу в Google-аналитику смотреть, что происходит на самом сайте.

    А там сидит какой-то юзер, у которого как раз открыта финальная страница одного из заказов. Номер заказа в адресе страницы соответствует тому заказу, у которого только что был испорчен статус в RetailCRM. Причем это как правило заказ старый, отгруженный и закрытый еще месяц назад.

    Причем это не единичный случай, а примерно каждый 20-й покупатель заходит на страницу своего старого заказа. Есть предположение, что покупатель, сделавший заказ месяц назад, добавил финальную страницу себе в закладки, а потом по ней возвращается в магазин. Ума не приложу, зачем в закладки добавлять именно финальную страницу, но может им так удобно.

    Было такое у кого-то?

    Plugin Author Simla.com

    (@retailcrm)

    При обновлении страницы на стороне WC происходит обновление заказа, что вызывает обработчик плагина интеграции и данные летят в retailCRM.

    Thread Starter luzinis

    (@luzinis)

    Я правильно понимаю, срабатывает экшн ‘woocommerce_update_order’ или ‘woocommerce_checkout_order_processed’? Ну и по идее он не должен срабатывать, и это вопрос адресовать к Woocommerce?
    Может можно каким-то дополнительным условием защититься, не просто реагировать на хук, но еще и проверять изменения в полях?

    Plugin Author Simla.com

    (@retailcrm)

    Я сейчас проверил на стоковой версии без всяких дополнений и у меня не вызывается обработчик изменения заказа при перезагрузке страницы. Судя по коду WC там вызываются некоторые другие хуки, возможно у Вас есть расширения, которые по какому то из этих событий пересохраняют заказ, в результате чего вызывается и наш обработчик.

    Thread Starter luzinis

    (@luzinis)

    1) Деактивировал все плагины, кроме Woocommerce и RetailCRM
    2) Переключился на стоковую тему “Twenty Nineteen”
    3) Кастомные всякие functions и сss убрал
    4) В настройках плагина пробовал разные версии API —?4 и 5

    Баг воспроизводится.
    Могу дать доступ в WP-admin, FTP и CRM.

    Plugin Author Simla.com

    (@retailcrm)

    Да, сейчас обновил WC до последней версии и баг воспроизвелся, до этого пробовал версию 3.4.5 и на ней такого поведения не наблюдается (откатил потом обратно и ещё раз попробовал). Все таки проблема больше в плагине WC, но мы возможно рассмотрим варианты для решения проблемы.

    Plugin Author Simla.com

    (@retailcrm)

    Если интересно, нашел где пересохраняется заказ – https://github.com/woocommerce/woocommerce/blob/d0704182ae01cd7c9bda9a6a6469c14ddaaf31eb/includes/shortcodes/class-wc-shortcode-checkout.php#L238
    Добавлено видимо было в версии 3.5

    Thread Starter luzinis

    (@luzinis)

    Интересно, конечно, только не совсем понятно, почему строка 238. Там как будто вообще не об этом.

    Я хочу написать на форум Woocommerce. Можете сказать, какой конкретно хук вызывается в этом случае? В плагине увидел, там два используются —? ‘woocommerce_update_order’ или ‘woocommerce_checkout_order_processed’. Какой из этих?

    Plugin Author Simla.com

    (@retailcrm)

    Имелась в виду не конкретная строка, а несколько последующих строк:

    
    if ( $order ) {
        $order->set_customer_ip_address( WC_Geolocation::get_ip_address() );
        $order->save();
    }
    

    При вызове метода save() вызывается хук woocommerce_update_order

    Thread Starter luzinis

    (@luzinis)

    Ну в том смысле, что этот кусок кода должен выполняться совсем в другом случае, судя по комменту:
    // In case order is created from admin, but paid by the actual customer, store the ip address of the payer.

    Но по идее при рефреше страницы вообще не должна выполняться даже сама функция function order_received

    • This reply was modified 5 years, 10 months ago by luzinis.
    Plugin Author Simla.com

    (@retailcrm)

    Она и вызывается при загрузке страницы. Можете проверить.

    Thread Starter luzinis

    (@luzinis)

    Вызывается, но не должна вызываться в случае простого рефреша страницы, так как это не отправка нового заказ. Сегодня напишу в форуме Woocommerce об этом. Но судя по огромному количеству сообщений там, они могут нескоро добраться до этого бага) Хотя, может посчитают критическим

    Thread Starter luzinis

    (@luzinis)

    Заметил еще такое поведение: если статус заказа на стороне Woocommerce поставить “Выполнен”, то тогда он больше не сбрасывается при обновлении страницы. Но проблема в том, что со статусами мы работаем только на стороне CRM, и когда ставим “Выполнен” в CRM, то в Woocommerce этот статус не передается, там остается начальный статус, который при создании заказа выставляется.

    Вообще статусы же должны передаваться в направлении CRM -> Woocommerce?
    Сейчас передаются только в направлении Woocommerce -> CRM

    Plugin Author Simla.com

    (@retailcrm)

    Да, должны передаваться. Проверьте, активирована ли настройка для периодической выгрузки данных из retailCRM.

    Thread Starter luzinis

    (@luzinis)

    Да, теперь статусы передаются. Странно, что этот параметр был выключен, помню, что раньше включал его.

    Конечно, если обновить финальную страницу в промежутке, пока статус еще не успел синхронизироваться, то статус все равно сбрасывается на “Новый”. Но вероятность такого события в реальности все же очень низкая (надеюсь).

    Остается еще нюанс, если заказ в RetailCRM со статусом “Выполнен”, но при этом в оплате стоит статус “Не оплачен”, то при обновлении финальной страницы приходит письмо от RetailCRM “Заказ полностью оплачен”, и заказу в RetailCRM проставляется статус оплаты “Оплачен”. Тоже наверно не смертельно и маловероятно. Просто тестировал разные ситуации.

    Спасибо вам большое за помощь!
    Буду продолжать наблюдение и фидбечить.

Viewing 15 replies - 1 through 15 (of 21 total)
  • The topic ‘Статусы заказов в RetailCRM изменяются на “Новый”’ is closed to new replies.