Reputation: 3778
This is the code to send a purchase to Google Analytics E-Commerce tracking: it seems to be all right when executed on the debug URL
https://www.google-analytics.com/debug/collect
This is what the page returns:
{
"hitParsingResult":[
{
"valid":true,
"parserMessage":[
],
"hit":"/debug/collect?v=1\u0026tid=UA-XXXXXXXX-X\u0026cid=XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\u0026t=event\u0026ti=UA-XXXXXXXX-X\u0026ta=test\u0026tr=1.00\u0026tt=0.22\u0026cu=EUR\u0026ts=0\u0026pa=purchase\u0026pr1id=ord690\u0026pr1nm=test prod\u0026pr1ca=test cat"
}
],
"parserMessage":[
{
"messageType":"INFO",
"description":"Found 1 hit in the request."
}
]
}
but it returns a 500 Error when executed on the regular URL
https://www.google-analytics.com/collect
I cannot understand what I'm missing.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
function generate_cid(){
$data = openssl_random_pseudo_bytes(16);
assert(strlen($data) == 16);
$data[6] = chr(ord($data[6]) & 0x0f | 0x40); //set version to 0100
$data[8] = chr(ord($data[8]) & 0x3f | 0x80); //set bits 6-7 to 10
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
} // end generate_cid()
$data = array(
'v' => 1,
'tid' => 'UA-XXXXXXX-X',
'cid' => generate_cid(),
't' => 'event'
);
$data['ti'] = "UA-XXXXXXXX-X";
$data['ta'] = "test";
$data['tr'] = "1.00";
$data['tt'] = "0.22";
$data['cu'] = "EUR";
$data['ts'] = "0";
$data['pa'] = "purchase";
$data['pr1id'] = "ord690";
$data['pr1nm'] = "test prod";
$data['pr1ca'] = "test cat";
//ONLY FOR DEBUG
//$url = 'https://www.google-analytics.com/debug/collect';
$url = 'https://www.google-analytics.com/collect':
$content = http_build_query($data);
$content = utf8_encode($content);
$user_agent = urlencode($_SERVER['HTTP_USER_AGENT']);
$ch = curl_init();
curl_setopt($ch,CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_HTTPHEADER,array('Content-type: application/x-www-form-urlencoded'));
curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1);
curl_setopt($ch,CURLOPT_POST, TRUE);
curl_setopt($ch,CURLOPT_POSTFIELDS, $content);
curl_exec($ch);
curl_close($ch);
?>
Upvotes: 0
Views: 2289
Reputation: 21
we have the same issue as the half of transactions is attributed just to thank you page and Direct channel.
We believe the problem in generation of cid. As another half of transactions is attributed correctly and not only thank you page is seen when analyzing them in User Explorer reports in UA.
This another half of sent transactions have preserved cid parameter from cookie _ga with it normal value of 1234.5678 type.
Our code configured in such way - if this cid is preserved ,then it is passed, in other case if it is absent we generate it. Hope that helps.
Upvotes: 0
Reputation: 3778
Thanks to @alberto, I find the easy mistake:
Colon instead of semicolon.
$url = 'https://www.google-analytics.com/collect';
Upvotes: 0