Сейчас в сети: 560
Настройка целей, отслеживание электронной торговли, многоканальные последовательности и тд
Подсказки
star_border
Ответить

Не отправляются данные о товарах в стандартной ЭТ

Бакалавр ✭

Доброго дня, коллеги!

Надеюсь на вашу помощь в таком вопросе.

Настраиваем стандартную ЭТ для интернет-магазина. Программист разместил коды согласно инструкциям. Однако наблюдаем такую ошибку: если в корзине более 1 товарной позиции, то данные передаются только о последнем товаре из корзины. При этом сумма транзакции передается верная. ЭТ в Метрике отображает весь состав заказа. Но вот с ГА проблемы.

Ниже привожу фрагмент кода:

 

<?if(!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die();
//--------------------------------------------
function getItemJs(&$transId, &$item) {
return <<<HTML
ga('ecommerce:addItem', {
'id': '$transId',
'name': '{$item['NAME']}',
'sku': '{}',
'category': '{}',
'price': '{$item['PRICE']}',
'quantity': '{$item['QUANTITY']}'
});
HTML;
}
//--------------------------------------------
if(!empty($arResult['ORDER'])){
?>
<script>
<?
global $APPLICATION;
$FIRST_ORDER = $APPLICATION->get_cookie("FIRST_ORDER");

if($FIRST_ORDER == "true"):?>
ga('require', 'ecommerce', 'ecommerce.js');
ga('ecommerce:addTransaction', {

'id': '<?=$arResult["ORDER_ID"]?>', // ID заказа; обязательный параметр
'affiliation': '<?=SITE_SERVER_NAME?>', // Название магазина
'revenue': '<?=$arResult["ORDER"]["PRICE"]?>', // Общая стоимость заказа
'shipping': '<?=$arResult["ORDER"]["PRICE_DELIVERY"]?>', // Стоимость доставки
'tax': '<?=$arResult["ORDER"]["TAX_VALUE"]?>' // Налог

});
var goods = [];
<?
//получим инфу по id заказа
$dbBasketItems = CSaleBasket::GetList(array("ID" => "ASC"), array("ORDER_ID"=>$arResult["ORDER_ID"]), false, false, array("ID", "PRICE", "NAME", "PRODUCT_ID", "QUANTITY"));
while ($arItems = $dbBasketItems->GetNext())
{?>
<?=getItemJs($arResult["ORDER_ID"], $arItems);?>
goods.push({
name: "<?=$arItems["NAME"]?>",
price: <?=$arItems["PRICE"]?>,
quantity: <?=$arItems["QUANTITY"]?>});

<?}
?>
ga('ecommerce:send');

var yaParams = {
"order_id": "<?=$arResult["ORDER_ID"]?>",
"order_price": <?=$arResult["ORDER"]["PRICE"]?>,
"currency": "<?=$arResult["ORDER"]["CURRENCY"]?>",
"exchange_rate": 1,
"goods": goods
};
<?$APPLICATION->set_cookie("FIRST_ORDER", "false");?>
<?endif;?>
</script>

Re: Не отправляются данные о товарах в стандартной ЭТ

Бакалавр ✭ ✭ ✭
Это вы зря приложили, не известно какие данные используются для подстановки (о коде вашего сайта, базах данных, что в куках юзеров мало что известно). Сделайте тестовый заказ на несколько позиций, скопируйте HTML код скриптов аналитикса и вот его можете вставить, либо говорите какой сайт, чтобы можно было посмотреть. Ошибка эта может быть связана с тем, что в код вставляется только последняя часть (например при переборе в коде данные перезаписываются, а не складываются), либо одинаковые идентификаторы товаров, а не разные, как пример.

Re: Не отправляются данные о товарах в стандартной ЭТ

Бакалавр ✭
Сайт minmart.ru

Re: Не отправляются данные о товарах в стандартной ЭТ

Бакалавр ✭ ✭ ✭

Вот ваш код, который получается:

 

Спойлер
<script>
ga('require', 'ecommerce', 'ecommerce.js');
ga('ecommerce:addTransaction', {
  'id': '1195', // ID заказа; обязательный параметр
  'affiliation': 'minmart.ru', // Название магазина
  'revenue': '540.00', // Общая стоимость заказа
  'shipping': '250.00', // Стоимость доставки
  'tax': '0.00' // Налог
});
var goods = [];
ga('ecommerce:addItem', {
  'id': '1195',
  'name': 'Варежка для полировки обуви — Salton (019 бесцветный)',
  'sku': '{}',
  'category': '{}',
  'price': '161.00',
  'quantity': '1.00'
});
goods.push({
  name: "Варежка для полировки обуви — Salton (019 бесцветный)",
  price: 161.00,
  quantity: 1.00
});

ga('ecommerce:addItem', {
  'id': '1195',
  'name': 'Салфетка для обуви — Salamander (Серый)',
  'sku': '{}',
  'category': '{}',
  'price': '129.00',
  'quantity': '1.00'
});
goods.push({
  name: "Салфетка для обуви — Salamander (Серый)",
  price: 129.00,
  quantity: 1.00
});

ga('ecommerce:send');
var yaParams = {
  "order_id": "1195",
  "order_price": 540.00,
  "currency": "RUB",
  "exchange_rate": 1,
  "goods": goods
};
</script>

Как и писал, у вас у товаров одинаковый id, такой же как и у транзакции, а должен быть id именно товара, свой, уникальный.

 

 

Re: Не отправляются данные о товарах в стандартной ЭТ

Бакалавр ✭
Все делалось согласно официальным справкам, в которых говорится, что посредством идентификатора все товары в итоге соотносятся с соответствующей транзакцией в отчетах ("The transaction ID. This ID is what links items to the transactions to which they belong.").
https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce#overview
Уникальному коду товара будет соответствовать параметр sku.
У нас было предположение, что, скорее всего, ошибка в функции, которая заполняет addItem'ы, раз в цикле идет не заполнение массива товарами (как для Метрики), а перезапись, поэтому и отправляются данные всегда о последнем товаре в корзине. Вопрос в том, что я не обладаю достаточными знаниями в области программирования, чтобы проверить этот момент.

Re: Не отправляются данные о товарах в стандартной ЭТ

Студент ✭
Судя по коду, у Вас у всех товаров одинаковый SKU параметр, его значение {}, вероятно GA по нему определяет, что это все один товар и включает в транзакцию только последний.

Чтобы проверить это используйте реальное значение SKU

Re: Не отправляются данные о товарах в стандартной ЭТ

Бакалавр ✭ ✭ ✭
Да, вы правы, речь про id транзакции. Попробуйте не отправлять пустые sku и category (надеюсь у вас в отчёте аналитикса не фигурируют sku и категории в виде {}).

Re: Не отправляются данные о товарах в стандартной ЭТ

Бакалавр ✭
Спасибо! Попробуем проверить, действительно ли тут дело в SKU.

Re: Не отправляются данные о товарах в стандартной ЭТ

Студент ✭
Подтверждаю, дело именно в передаваемом параметре SKU, если он одинаковый у товаров, то передается последний из группы с одинаковым SKU.
Странно что в документации ничего об этом не сказано и параметр SKU описан как необязательный.