Вот что я делаю:
[*] На переднем крае я извлекаю клиент_ид из _ga cookie, используя Javascript и отправить его в Backend (например, через файл _/li). /> i хранить это client_id в базе данных (связанный с пользователем или сеансом).
Позже, , когда пользователь завершает покупку (что может быть минутами или даже днями после начального посещения), я использую ранее сэкономив клиент. Протокол.
Код: Выделить всё
public function gtmPaidOrder() {
$clientId = $this->client_id; // previously saved from frontend _ga cookie
if (!$clientId) return false;
$measurement_id = 'G-XXXXXXX';
$api_secret = MY_SECRET;
$payload = [
'client_id' => $clientId,
'events' => [
[
'name' => 'purchase',
'params' => [
'transaction_id' => $this->id,
'value' => $this->getTotalPrice(),
'currency' => $this->currency,
'items' => [
[
'item_id' => '123',
'item_name' => 'Test Product',
'price' => 20,
'quantity' => 1
]
],
'debug_mode' => true
]
]
]
];
$url = "https://www.google-analytics.com/debug/mp/collect?measurement_id={$measurement_id}&api_secret={$api_secret}";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
\Log::info('GA4 MP response', ['response' => $response]);
}
Код: Выделить всё
{
"validationMessages": [ ]
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... n-sent-fro