对接百度广告主的回传api接口
第一、简单描叙一下:step 1:当用户点击百度广告时,百度将会自动在广告主落地页链接中增加百度广告ID参数(即 bd_vid)。该参数可标示百度流量,并作为归因匹配依据,所以用户不同广告展现所对应的bd_vid参数值均不相同。step 2:广告主开发人员判断该流量是否发生了所定义的转化事件(例如:表单提交成功、服务购买成功等
第一、简单描叙一下:
step 1:当用户点击百度广告时,百度将会自动在广告主落地页链接中增加百度广告ID参数(即 bd_vid)。
该参数可标示百度流量,并作为归因匹配依据,所以用户不同广告展现所对应的bd_vid参数值均不相同。
step 2:广告主开发人员判断该流量是否发生了所定义的转化事件(例如:表单提交成功、服务购买成功等)
step 3:广告主开发人员通过API接口回传该百度流量(bd_vid)所对应的转化事件。
百度接收到广告主开发人员回传的转化数据后,可根据bd_vid参数追溯到用户某次点击所对应广告的具体计划、单元、创意等信息。
这些数据将反馈至转化模型进行学习和分析,以便在后续投放中更准确地预估用户转化率,帮助广告主在符合目标转化成本的基础上实现稳定获量。
参开文档:https://dev2.baidu.com/content?sceneType=0&pageId=104789&nodeId=1555&subhead=
第二、回传的php的demo代码下载:https://ocpcdevcenter.bj.bcebos.com/ocpc-api-demo-php.zip
第三、遇到的问题:
1、点击广告页后,百度会生成一个bd_vid参数,需要把这个bd_vid保存下来,我把它保存到session和cookie中,然后付款成功后,再执行回传文件把bd_vid回传给百度,刚开始考虑的是在支付成功后的回调php文件中,使用http_post或者file_get_contents方法去执行回传文件,结果发现回传文件里面的session和cookie获取不到值,这就郁闷了,不知道是什么原因。
后来在在支付成功后的跳转文件里面利用ajax来执行回传文件,哟或,这下成功获取到session和cookie的值了,回传成功
js的相关代码:
<script>
$(function(){
$.ajax({
url:"http://xxx.xxx.com/APIDemo.php",
//dataType:"json", //返回格式为json
//async:true,//请求是否异步,默认为异步,这也是ajax重要特性
//data:{"bd_vid":"<{$bd_vid}>"}, //参数值
type:"GET", //请求方式
success:function(e){
console.log("success");
},
error:function(e){
console.log("hits,sorry");
}
});
});
</script>
php的相关代码:
public function http_post($url,$data){
if(!function_exists('curl_init')){
throw new Exception('php未安装curl组件',500);
}
$protocol = (! empty ( $_SERVER ['HTTPS'] ) && $_SERVER ['HTTPS'] !== 'off' || $_SERVER ['SERVER_PORT'] == 443) ? "https://" : "http://";
$siteurl= $protocol.$_SERVER['HTTP_HOST'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_REFERER,$siteurl);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
$httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error=curl_error($ch);
curl_close($ch);
if($httpStatusCode!=200){
throw new Exception("invalid httpstatus:{$httpStatusCode} ,response:$response,detail_error:".$error,$httpStatusCode);
}
return $response;
}