Ecommerce

Ecommerce Яндекс.Метрика Google Analytics

Код электронной торговли Ecommerce для Яндекс.Метрики и Google Analytics.

Bitrix вариант

Код на странице успешного заказа товара:

order-success.php
<?php ob_start(); ?>
  <script>
  ga('require', 'ecommerce', 'ecommerce.js');
  ga('ecommerce:addTransaction', {
    'id': '<?php echo $arResult['ORDER_ID']; ?>', // Transaction ID. Required.
    'affiliation': 'site.ru', // Affiliation or store name.
    'revenue': '<?php echo $arResult['ORDER']['PRICE']; ?>', // Grand Total.
    'shipping': '', // Shipping.
    'tax': '' // Tax.
  });
 
  var YMGoodsAll = [], YMGoods;
 
  <?php
 
  while ($arBasketItems = $dbBasketItems->GetNext()) { ?>
 
  ga('ecommerce:addItem', {
    'id': '<?php echo $arResult['ORDER_ID']; ?>', // Transaction ID. Required.
    'name': '<?php echo $arBasketItems['NAME']; ?>', // Product name. Required.
    'sku': '<?php echo $arBasketItems['PRODUCT_ID']; ?>', // SKU/code.
    'category': '', // Category or variation.
    'price': '<?php echo $arBasketItems['PRICE']; ?>', // Unit price.
    'quantity': '<?php echo (int)$arBasketItems['QUANTITY']; ?>' // Quantity.
  });
 
  YMGoods = {
    'id': '<?php echo $arBasketItems['PRODUCT_ID']; ?>',
    'name': '<?php echo $arBasketItems['NAME']; ?>',
    'price': '<?php echo $arBasketItems['PRICE']; ?>',
    'quantity': '<?php echo (int)$arBasketItems['QUANTITY']; ?>'
  };
 
  YMGoodsAll.push(YMGoods);
 
  <?php } ?>
 
  ga('ecommerce:send');
 
 
  // YM
 
  var yaParams = {
    'order_id': '<?php echo $arResult['ORDER_ID']; ?>',
    'order_price': '<?php echo $arBasketItems['PRICE']; ?>',
    'currency': 'RUR',
    'exchange_rate': 1,
    'goods': YMGoodsAll
  };
  </script>
  <?php
  $GLOBALS['GA_ECOMMERCE'] = ob_get_contents();
  ob_end_clean();
  ?>

В футере выводим информацию о заказа из глобальной переменной GA_ECOMMERCE:

footer.php
  <?php if(isset($GLOBALS['GA_ECOMMERCE'])) echo $GLOBALS['GA_ECOMMERCE']; ?>

FIXME проверить работу YM

Вариант с Google Tag Manager

В случае `Google Tag Manager` необходимо использовать переменную `dataLayer`.

На ней необходимо разместить следующий код на JavaScript передающий данные о покупке в Googlе Tag Manager:

google-tag-manager.php
<script>
dataLayer = [{
  'transactionId': '<?php echo $arResult['ORDER']['ID']; ?>',
  'transactionAffiliation': 'site.ru',
  'transactionTotal': '<?php echo $arResult['ORDER']['PROPERTY_VALUES']['AMOUNT']; ?>',
  'transactionTax': '',
  'transactionShipping': '',
  'transactionProducts': [{
      'sku': '<?php echo $arResult['ORDER']['PROPERTY_VALUES']['BARCODE']; ?>',
      'name': '<?php echo $arResult['TARIF']->name;?>',
      'category': '<?php echo $arResult['TARIF']->cat;?>',
      'price': '<?php echo $arResult['ORDER']['PROPERTY_VALUES']['AMOUNT']; ?>',
      'quantity': '1'
  }]
}];
 
</script>

:!: Этот код необходимо разместить до загрузки контейнера `Google Tag Manager`!

Проверка: в консоли впечатать dataLayer или JSON.stringify(dataLayer), выведется объект (здесь использовался массив товаров):

[  
   {  
      "transactionId":"732",
      "transactionAffiliation":"site.ru",
      "transactionTotal":"",
      "transactionTax":"",
      "transactionShipping":"",
      "transactionProducts":[  
         {  
            "sku":"27147",
            "name":"Товар 1",
            "category":"Категория 1",
            "price":"1680",
            "quantity":"1"
         },
         {  
            "sku":"26195",
            "name":"Товар 2",
            "category":"Категория 1",
            "price":"620",
            "quantity":"1"
         },
         {  
            "sku":"26054",
            "name":"Товар 3",
            "category":"Категория 3",
            "price":"980",
            "quantity":"1"
         }
      ]
   },
   {  
      "gtm.start":1433317019838,
      "event":"gtm.js"
   },
   {  
      "event":"gtm.dom"
   },
   {  
      "event":"gtm.load"
   }
]

Источник

Третий вариант

order-success.php
<?php
$postGA = $postYM = '';
foreach($orderItems as $item) {
  $postGA .= "{
    'sku': '".$item->id."',
    'name': '".htmlspecialchars($item->name)."',
    'price': ".number_format($item->price, 2, '.', '').",
    'quantity': ".$item->count."
  },\n";
  $postYM .= "{
    'id': '".$item->id."',
    'name': '".htmlspecialchars($item->name)."',
    'price': ".number_format($item->price, 0, '.', '').",
    'quantity': ".$item->count."
  },\n";
 
  $googleAnalyticsOrderInfo = "dataLayer = [{
    'transactionId': '".$order->id."',
    'transactionTotal': ".number_format($order->amount, 2, '.', '').",
    'transactionProducts': [".$postGA."]
  }];";
  $yaMetrikaOrderInfo = "var yaParams = {
    'order_id': '".$order->id."',
    'order_price': ".number_format($order->amount, 2, '.', '').",
    'currency': \"RUR\",
    'exchange_rate': 1,
    'goods': [".$postYM."]
  };";
} ?>

FIXME добавить вывод информации о заказе