我有一个表单完成事件,我想从服务器端发送,这样我就可以验证和过滤出垃圾邮件第一。通过javascript发送时,它工作正常。
const measurement_id = `G-XXXXXXXXXX`;
const api_secret = `api_secret_key`;
fetch(`https://www.google-analytics.com/mp/collect?measurement_id=${measurement_id}&api_secret=${api_secret}`, {
method: "POST",
body: JSON.stringify({
client_id: '1552776741.1677766660',
events: [{
name: 'form_submission',
params: {'form_name':'Send A Message',
'is_lead':'Lead+Submission',
'submission_url':'Unknown'},
}]
})
});
当我用PHP发送它时,它从来没有发送到GA4,也没有返回任何类型的错误消息。
$measurement_id = 'G-XXXXXXXXXX';
$api_secret = 'api_secret_key';
$url = "https://www.google-analytics.com/mp/collect?measurement_id=" . $measurement_id . "&api_secret=" . $api_secret;
$data = array(
'client_id' => '1552776741.1677766660',
'events' => array(
'name' => 'form_submission',
'params' => array(
'form_name' => 'Send A Message 2',
'is_lead' => 'Non-Lead Submission',
'submission_url' => 'Unknown'
)
)
);
$options = array(
'http' => array(
'header' => "Content-type: text/plain;charset=UTF-8",
'method' => 'POST',
'content' => http_build_query($data)
)
);
$context = stream_context_create($options);
$resp = file_get_contents($url, false, $context);
echo $resp;
任何深入了解如何让这一进程将不胜感激。
1条答案
按热度按时间cngwdvgl1#
PHP代码中有一些问题可能会阻止事件发送到GA4:
events
数组应该包含具有name
和params
属性的对象,而不仅仅是一个数组。这意味着需要将name
和params
Package 在一个对象中,如下所示:Content-type
头应该设置为application/json
,因为正文是以JSON格式发送的。1.您正在使用
http_build_query()
对数据进行编码,但应该将其编码为JSON。您可以使用json_encode()
来执行以下操作:下面是正确的代码:
确保将
G-XXXXXXXXXX
替换为您的实际测量ID,将api_secret_key
替换为您的实际API密钥。