这是一个高级用户的技术指南,解释了如何在Matomo中获得100%准确的电子商务报告。

为了实现这一目标,我们将在Matomo中测量所有的电子商务订单,以确保您的电子商务平台报告和Matomo报告之间的所有收入指标一致。这将包括你所有的在线订单以及任何线下销售。

为什么是这个指南?

虽然你通常只需要在JavaScript中跟踪电子商务订单记录在电子商务Matomo指南中有时你需要100%的电子商务跟踪精度。如果您要求100%跟踪您的订单,我们不建议使用JavaScript,因为在JS中跟踪请求可能会被广告拦截器和其他原因阻止。因此,Matomo不会跟踪所有订单,这将导致对电子商务报告缺乏信任(因为它们与您的电子商务平台报告不匹配)。

在本指南中,我们将描述在电子商务平台中实现服务器端模块的总体步骤,该模块将准确跟踪Matomo实例中的所有电子商务交互。

当您想要跟踪Matomo的线下销售和线下转换时,本指南也适用-例如在您的实体店中发生的任何购买。

假设

这里描述的解决方案假设您的网站和电子商务网站已经使用默认标记Matomo JavaScript跟踪代码,但你还没有设置电子商务跟踪。

因此,这是一种混合方法,其中:

  • 所有标准的用户交互(页面浏览量、事件、热图、表单等)都使用JavaScript标签进行跟踪

  • 所有电子商务交互(购物车更新和订单,包括可能的离线交互)都从电子商务平台的服务器端跟踪。

需求

1.最新版本的Matomo

2.在您的电子商务平台上运行代码的特殊权限,以便您可以:

  • 当购物车发生更改或记录新订单时,运行自定义代码

  • 并在您的电子商务订单记录中记录新的元数据,以便我们在每个订单中保留审计日志,以便进行故障排除和审计

3.从电子商务平台发送HTTPS请求到Matomo实例的能力。

4.秘密API身份验证令牌(token_auth),它将用于连接到您的Matomo跟踪API。

  • 如何获得token_auth:在Matomo中,创建一个新用户,专门用于跟踪API请求。例如,一个名为“跟踪API(电子商务)”的用户。然后给这个新用户“Admin”访问网站的权限。为了得到token_auth对于这个用户参见这个FAQ

5.您已经标记了您的电子商务网站与标准,非电子商务,Matomo JavaScript跟踪代码。

6.电子商务在网站管理中启用,您希望跟踪电子商务数据的网站。

注意:如果您使用的是PHP语言服务器端,请使用我们的PHP SDK追踪电子商务互动。或者查看我们的其他sdk。还有其他的联合国官员sdk可用。

在您的电子商务平台中的服务器端实现

答:当出现新的电子商务秩序时

当处理新订单时,您的电子商务平台将需要执行以下操作:

1.检查这个订单是否还没有记录在Matomo

  • 这是通过检查标志来完成的。Matomo在处理新订单时被跟踪,以确保在Matomo中没有重复计算订单
    (请参阅下面何时设置此标志)

2.存储一些关于客户和订单的元数据

  • ipAddress:客户IP地址

  • userAgent:客户的用户代理

  • matomoVisitorId: Matomo ID访客

  • attributionInfo:该订单的推荐人归属信息(获取渠道)

  • matomoTracked:这个订单是否已经在Matomo被跟踪

当使用我们的PHP SDK时,代码看起来像这样:

//假设$order->setMetadata()将为这个电子商务订单在电子商务DB $order->setMetadata(' ipAddress ', $tracker->getIp())记录一个新的元数据;订单- > setMetadata (userAgent,追踪美元- > getUserAgent ());订单- > setMetadata (matomoVisitorId,追踪美元- > getVisitorId ());订单- > setMetadata (attributionInfo,追踪美元- > getAttributionInfo ());

3.通过发送HTTPS Tracking API请求,向Matomo记录电子商务订单和所有产品

注意:由于所发送数据的类型,这些请求必须使用HTTPS发送

跟踪API请求将包含:

  1. 按顺序存储的访问者元数据(ip地址、用户代理、访问者id、推荐人属性信息)

  2. 订单细节和收入

  3. 订单中的产品列表(以及每个产品的SKU、名称、类别列表、价格、数量)

  4. 你的秘密token_auth

当使用我们的PHP SDK时,代码看起来像这样:

//假设$order是一个数组/对象,其中包含//这个电子商务订单的元数据以及产品细节$tracker = new tracker ($matomoIdSite, $matomoUrl);$tracker->setTokenAuth('my_token_auth_value_here');跟踪器- > setVisitorId($秩序[' matomoVisitorId ']);if (!empty($order['userAgent'])) {$tracker->setUserAgent($order['userAgent']);}如果(!空(美元订单[' ipAddress '])){跟踪器- > setIp($秩序[' ipAddress ']);} if (!empty($order['attributionInfo'])) {$tracker->setAttributionInfo($order['attributionInfo']);} //只有确认的订单应该跟踪Matomo(推荐)if(in_array($order['orderStatus'],数组('取消','失败','待处理','退款')){$this->log('忽略电子商务订单'。orderId美元。'因为身份:'。美元orderStatus); return; } foreach ($order->getProducts() as $product) { $sku = $product['sku']; $price = $product['total']; $title = $product['title']; $categories = $product['categories']; // an array of category names $quantity = $product['qty']; try { $tracker->addEcommerceItem($sku, $title, $categories, $price, $quantity); } catch (\Exception $e) { $this->log(sprintf('Failed to add ecommerce item: %s', $title)); } } $tracker->setRequestTimeout($PURCHASE_REQUEST_TIMEOUT_IN_SECONDS = 7); $tracker->doTrackEcommerceOrder( $order['orderId'], $order['revenueTotal'], $order['revenueSubtotal'], $order['revenueTax'], $order['revenueShipping'], $order['revenueDiscount'] ); // Important: before logging the tracking URL we make sure to remove the secret token_auth: $debug_TrackingUrlWithoutToken = str_replace('token_auth=' . $TOKEN_AUTH, 'token_auth=XYZANONYMIZED', PiwikTracker::$DEBUG_LAST_REQUESTED_URL); $this->log(sprintf('Tracked ecommerce order %s: URL was %s', $order['orderId'], $debug_TrackingUrlWithoutToken)); // we set the flag that this order has been tracked in Matomo $order->setMetadata(`matomoTracked`, 1); // we also record in the order a flag with the Tracking URL which was used to track the request $order->setMetadata(`matomoTrackingUrl`, $debug_TrackingUrlWithoutToken);

B.当有新的购物车更新

当商品从购物车中添加或删除(或任何商品的数量发生变化),或当选择购买产品或服务时(当可能没有实际的购物车时),或当应用或删除特殊优惠券时,您的电子商务平台将需要执行以下操作:

1.通过发送HTTPS Tracking API请求,记录电子商务购物车更新和所有产品到Matomo

跟踪API请求将包含:

  1. 订单中的产品列表(以及每个产品的SKU、名称、类别列表、价格、数量)

  2. 你的秘密token_auth

当使用我们的PHP SDK时,代码看起来像这样:

//假设$cart是一个数组/对象,包含//这个购物车的产品细节$tracker = new tracker ($matomoIdSite, $matomoUrl);$tracker->setTokenAuth('my_token_auth_value_here');foreach ($cart->getProducts() as $product) {$sku = $product['sku'];$price = $product['total'];$title = $product['title'];$categories = $product['categories'];//一个类别名数组$quantity = $product['qty'];尝试{$tracker->addEcommerceItem($sku, $title, $categories, $price, $quantity);} catch (\Exception $e) {$this->log(sprintf('未能添加电子商务项目:%s', $title));}} $tracker->setRequestTimeout($CART_UPDATE_REQUEST_TIMEOUT_IN_SECONDS = 2); $tracker->doTrackEcommerceCartUpdate($cart['revenueTotal']); // Important: before logging the tracking URL we make sure to remove the secret token_auth: $debug_TrackingUrlWithoutToken = str_replace('token_auth=' . $TOKEN_AUTH, 'token_auth=XYZANONYMIZED', PiwikTracker::$DEBUG_LAST_REQUESTED_URL); $this->log(sprintf('Tracked ecommerce cart update: URL was %s', $debug_TrackingUrlWithoutToken));

恭喜你,如果你遵循了上面列出的所有步骤,那么你应该已经成功地设置了服务器端电子商务跟踪。

提醒:如果您对电子商务跟踪不需要100%的数据准确性,也不需要跟踪线下销售和转换,那么您只需跟踪我们的JavaScript电子商务跟踪指南

限制

  • 在服务器端跟踪电子商务购物车更新可能会引起一个小的延迟,这可能会略微降低后续的页面视图。Matomo (Piwik)跟踪API应该在不到500毫秒的时间内响应,因此这不会对用户体验产生太大影响。在上面的代码示例中,我们为跟踪购物车更新设置了最多2秒的最大延迟,为跟踪电子商务订单设置了最多7秒的延迟。可以通过发送异步HTTP请求而不是同步请求来解决这个问题。

  • 退款和部分退款在Matomo还不完全支持。

  • 已知问题:此解决方案可能会在购物车更新时创建(一次)新访问者。如果是这种情况,所有随后的页面浏览量和操作将被跟踪到新创建的访问者。例如,当用户过去访问过您的商店时,会删除所有cookie,然后再次访问您的商店。在浏览器的“隐身窗口”中打开网站时也可能发生这种情况。我们将来会在马托摩解决这个问题。

以前的常见问题匿名电子商务订单id
Baidu