Нужно было подключить передачу данных электронной коммерции в Метрику в интернет-магазине на Yii. Передавать нужно номер заказа, наименование товаров, количество купленных товаров, сумму товаров.
Варианты решений
Так как не первый раз сталкиваемся с такой задачей, она казалась простой и не объемной. На реализацию должно было уйти не больше 5-6 часов.
Начали разработку по документации Яндекса https://yandex.ru/support/metrika/data/e-commerce.xml, на программную часть ушло чуть больше 4-часов. Проверили работу скрипта — вроде бы все заказы передаются. Решили подождать некоторое время чтобы накопить больше данных для проверки. Через неделю оказалось, что больше 50% товаров не попадают в статистику. Это было странно так как подобную задачу делали не первый раз и реализовано всё было корректно.
Начали проверять логи — все заказы там есть. Обратились в техническую поддержку Яндекса — получили ответ такого вида:
Хорошо, мы понимаем что не добьемся 100% точности, однако в Метрику попадает меньше 50% заказов — такой большой погрешности быть не должно. Отправили техподдержке Метрики в ответном письме номера заказов которые не попали в электронную коммерцию В ответ получили что:
Проверили данную гипотезу, но она оказалась не верна, мы не превышали допустимый размер.
Продолжили разбираться в проблеме самостоятельно. Нужно было поймать какую-либо закономерность в этой проблеме. Составили таблицу: номер заказа, с каких устройств осуществляли заказа, Тип устройств, Браузер, Разрешение, Время на странице.
После составления увидели только то, что пользователь после оформления заказа сразу уходит со страницы успешно оформленного заказа. Это было логично, т.к после оформления заказа пользователь в большинстве случаев переадресовывается на Робокассу.
Была небольшая вероятность того, что данные заказа просто не успевали передаваться в Метрику до редиректа. После клика на «Оформить заказ» поставили лоадер, который на 3 секунды задерживает пользователя на данной странице.
Но гипотеза снова оказалась не верна.
Решение проблемы
Проблему решил наш разработчик, проблема оказалась в том, что у большинства товаров в названиях присутствовали кавычки “”, которые при хранении в базе данных нужно заменять на специальные коды (экранировать). При передаче в Метрику кавычки без экранирования нарушали работу скрипта.
В итоге по данной задаче мы ушли в убыток 20+ часов — это время, которое мы потратили на выяснение лежащей казалось бы на поверхности причины. Естественно, за эти работы мы не выставляли счёт клиенту, мы их сделали за свой счёт.