从服务器端发送GA4事件PHP不工作

cedebl8k  于 2023-05-05  发布在  PHP
关注(0)|答案(1)|浏览(155)

我有一个表单完成事件,我想从服务器端发送,这样我就可以验证和过滤出垃圾邮件第一。通过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;

任何深入了解如何让这一进程将不胜感激。

cngwdvgl

cngwdvgl1#

PHP代码中有一些问题可能会阻止事件发送到GA4:

  1. events数组应该包含具有nameparams属性的对象,而不仅仅是一个数组。这意味着需要将nameparams Package 在一个对象中,如下所示:
'events' => array(
    array(
      'name' => 'form_submission', 
      'params' => array(
        'form_name' => 'Send A Message 2', 
        'is_lead' => 'Non-Lead Submission', 
        'submission_url' => 'Unknown'
      )
    )
  )
  1. Content-type头应该设置为application/json,因为正文是以JSON格式发送的。
    1.您正在使用http_build_query()对数据进行编码,但应该将其编码为JSON。您可以使用json_encode()来执行以下操作:
$options = array(
  'http' => array(
    'header'  => "Content-type: application/json",
    'method'  => 'POST',
    'content' => json_encode($data)
  )
);

下面是正确的代码:

$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(
    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: application/json",
    'method'  => 'POST',
    'content' => json_encode($data)
  )
);
$context  = stream_context_create($options);
$resp = file_get_contents($url, false, $context);
echo $resp;

确保将G-XXXXXXXXXX替换为您的实际测量ID,将api_secret_key替换为您的实际API密钥。

相关问题