定制 noith/measurement-protocol 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

noith/measurement-protocol

Composer 安装命令:

composer require noith/measurement-protocol

包简介

PHP library for sending analytics events to Yandex Metrica and Google Analytics 4 (GA4) via the Measurement Protocol

README 文档

README

PHP-библиотека для серверной отправки аналитических событий в Яндекс Метрику и Google Analytics 4 через Measurement Protocol.

Установка

composer require noith/measurement-protocol

Яндекс Метрика

Токен и ID счётчика генерируются в настройках счётчика → Загрузка данныхMeasurement Protocol.

Клиент

use Noith\MeasurementProtocol\Yandex\Client;

$client = new Client(counterId: '5564333', token: 'your-secret-token');

cid (ClientID пользователя) передаётся в каждый вызов send() — он не является частью объекта запроса.

Просмотр страницы

use Noith\MeasurementProtocol\Yandex\Requests\PageViewRequest;

$client->send($cid, PageViewRequest::make([
    'dl' => 'https://example.com/product/123',
    'dr' => 'https://google.com',
    'dt' => 'Product Page',
]));

Цель (событие)

use Noith\MeasurementProtocol\Yandex\Requests\GoalRequest;

$client->send($cid, GoalRequest::make([
    'dl' => 'https://example.com/register',
    'ea' => 'registration',
]));

Ecommerce

use Noith\MeasurementProtocol\Yandex\DTO\Product;
use Noith\MeasurementProtocol\Yandex\Requests\PurchaseRequest;

$product = new Product();
$product->id = 'SKU-123';
$product->nm = 'iPhone 15';
$product->pr = 50000.0;
$product->qt = 1.0;
$product->br = 'Apple';      // опционально
$product->ca = 'Phones';     // опционально

$request = PurchaseRequest::make([
    'dl' => 'https://example.com/checkout',
    'ea' => 'purchase',
    'ti' => 'order-42',
    'tr' => '50000',
]);
$request->_pr = [$product];

$client->send($cid, $request);

Доступные ecom-события: DetailRequest, AddToCartRequest, RemoveFromCartRequest, PurchaseRequest.

Параметры визита и кастомные параметры

$request = GoalRequest::make([
    'dl'       => 'https://example.com',
    'ea'       => 'order-success',
    '_params'  => ['level1' => ['level2' => 'value']],  // параметры визита (JSON)
    '_custom'  => ['ev' => 1500.0],                     // произвольные доп. параметры
]);

Собственное событие

class RegistrationRequest extends GoalRequest
{
    public string $ea = 'registration';
}

$client->send($cid, RegistrationRequest::make(['dl' => 'https://example.com/register']));

Google Analytics 4

measurement_id и api_secret создаются в GA4 Admin → Data StreamsMeasurement Protocol API secrets.

Веб-клиент

use Noith\MeasurementProtocol\GA4\Client;

$client = new Client(measurementId: 'G-XXXXXXXXXX', apiSecret: 'your-api-secret');

Мобильное приложение (Firebase)

use Noith\MeasurementProtocol\GA4\AppClient;

$client = new AppClient(firebaseAppId: '1:1234567890:android:abcdef', apiSecret: 'your-api-secret');

// Вместо clientId передаётся appInstanceId
$client->send($appInstanceId, $request);

Просмотр страницы

use Noith\MeasurementProtocol\GA4\Requests\PageViewRequest;

$client->send($clientId, PageViewRequest::make([
    'page_location' => 'https://example.com/product/123',
    'page_title'    => 'Product Page',
    'page_referrer' => 'https://google.com',
]));

Произвольное событие

use Noith\MeasurementProtocol\GA4\Requests\EventRequest;

$client->send($clientId, EventRequest::make([
    'name'   => 'sign_up',
    'params' => ['method' => 'email'],
]));

Ecommerce

use Noith\MeasurementProtocol\GA4\DTO\Item;
use Noith\MeasurementProtocol\GA4\Requests\PurchaseRequest;

$item = new Item();
$item->item_id   = 'SKU-123';
$item->item_name = 'iPhone 15';
$item->price     = 50000.0;
$item->quantity  = 1;
$item->item_brand    = 'Apple';   // опционально
$item->item_category = 'Phones';  // опционально
$item->params = ['custom_color' => 'black'];  // кастомные параметры товара

$request = PurchaseRequest::make([
    'currency'       => 'RUB',
    'value'          => 50000.0,
    'transaction_id' => 'order-42',
    'items'          => [$item],
]);

$client->send($clientId, $request);

Полный список ecom-событий: ViewItemRequest, AddToCartRequest, RemoveFromCartRequest, ViewCartRequest, BeginCheckoutRequest, AddShippingInfoRequest, AddPaymentInfoRequest, PurchaseRequest, RefundRequest.

События со списком товаров: ViewItemListRequest, SelectItemRequest.

Промо-события: ViewPromotionRequest, SelectPromotionRequest.

Контекст пользователя

use Noith\MeasurementProtocol\GA4\GA4Context;

$context = new GA4Context(
    userId: 'user-42',                               // ID авторизованного пользователя
    ipOverride: '1.2.3.4',                           // IP клиента (для серверного трекинга)
    userProperties: ['plan' => ['value' => 'pro']],  // свойства пользователя
);

$client->send($clientId, $request, $context);

Debug-режим

// Маршрутизирует запрос на /debug/mp/collect
// Возвращает JSON с описанием ошибок валидации
$client->send($clientId, $request->asDebug());

Собственное событие

use Noith\MeasurementProtocol\GA4\Requests\AbstractGA4Request;

class SignUpRequest extends AbstractGA4Request
{
    public ?string $method = null;

    protected function eventName(): string { return 'sign_up'; }

    protected function eventParams(): array
    {
        return $this->method !== null ? ['method' => $this->method] : [];
    }
}

$client->send($clientId, SignUpRequest::make(['method' => 'email']));

Laravel

Провайдер регистрируется автоматически. Опубликуйте конфиг:

php artisan vendor:publish --tag=measurement-protocol

Добавьте в .env:

YANDEX_METRICA_COUNTER_ID=5564333
YANDEX_METRICA_TOKEN=your-secret-token

GA4_MEASUREMENT_ID=G-XXXXXXXXXX
GA4_API_SECRET=your-api-secret

# Для мобильных приложений (опционально)
GA4_FIREBASE_APP_ID=1:1234567890:android:abcdef
GA4_APP_API_SECRET=your-app-api-secret

Отправка через очередь

use Noith\MeasurementProtocol\Laravel\Jobs\SendYandexEventJob;
use Noith\MeasurementProtocol\Laravel\Jobs\SendGA4EventJob;
use Noith\MeasurementProtocol\Laravel\Jobs\SendGA4AppEventJob;

// Яндекс
SendYandexEventJob::dispatch(
    cid: $user->metrica_client_id,
    request: GoalRequest::make(['dl' => $url, 'ea' => 'registration']),
);

// GA4 веб
SendGA4EventJob::dispatch(
    clientId: $user->ga4_client_id,
    request: EventRequest::make(['name' => 'sign_up', 'params' => ['method' => 'email']]),
    context: new GA4Context(userId: (string) $user->id),
);

// GA4 приложение
SendGA4AppEventJob::dispatch(
    appInstanceId: $user->firebase_instance_id,
    request: EventRequest::make(['name' => 'sign_up', 'params' => []]),
);

License

MIT. See LICENSE.

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-06-28

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固