最近公司需要落地页对接点睛数据回传,以前没有做过,看了一下百度的OCPC改了一下搞定,以下是代码,记录一下:
1、公共的定义
// Key 值
const QIHU_KEY = '5lhr09eravspif4jiq6r';
// Secret 值
const QIHU_SIGN = 'nit7uforhfok1qa15yourz5rgphon30z';
// 循环的次数
const RETRY_TIMES = 3;
2、这边是回传数据的信息,放在提交数据或者完成某个需求之前,如果是之后的话跳转链接最好加个延迟。
// 360 雨晴
$content=array(
"data"=>array(
"request_time"=>getTime(), // 当前时间戳
"data_industry"=>"ocpc_ps_convert", // 推广的类型
"data_detail"=>array(
"qhclickid"=>$_COOKIE['qhclickid'], // 这边是落地页链接的qhclickid的值,可以设置cookie,再拿取
"trans_id"=>md5($OrderData['order_code']), // 订单号,需md5加密
"event"=>"ORDER", // 订单类型
"event_time"=>getTime(), // 当前时间戳
"event_param"=>array(
"value"=>$OrderData['order_amount']*100 // 这边是金额,*100是因为接收的值好像只能是分
),
),
),
);
// 这边是接收地址
$logidUrl = 'https://convert.dop.360.cn/uploadWebConvert';
// 调用方法,传参
$this -> sendConvertData($logidUrl,$content);
3、发送数据方法,单独拎出来的。
/**
* 发送数据
* @param String $url 请求的地址
* @param Array $content POST的数据
* @return String
*/
public function sendConvertData($url,$content){
$reqData = json_encode($content);
// 所有数据都需要md5加密
$appSign = md5(self::QIHU_SIGN.$reqData);
$ch = curl_init();
if(substr($url,0,5)=='https'){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 从证书中检查SSL加密算法是否存在
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'App-Key:'.self::QIHU_KEY,
'App-Sign:'.$appSign,
'Content-Type: application/json; charset=utf-8',
'Content-Length: ' . strlen($reqData)
));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $reqData);
echo 'req data: ' . $reqData . "<br>";
//添加重试,重试次数为3,以防数据漏掉
for ($i = 0; $i < self::RETRY_TIMES; $i++) {
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode === 200) {
$res = json_decode($response, true);
print_r($res);
// status为4,代表服务端异常,可添加重试
$status = $res['errno'];
if ($status !== 1) {
curl_close($ch);
return $status === 0;
}
}
}
if($error=curl_error($ch)){
die($error);
}
curl_close($ch);
return false;
}
4、返回结果这样就OK了
{"errno":0,"error":"Success"}
以上就是全部代码,这边的应用场景是支付信息完成需要统计,就这样吧。有什么需要改进的或者不对的地方请留言。