在 Token 管理 填写百度 API Token 与落地页域名并启用,可将一条 Token 设为兜底。
使用教程
嵌入 tracker.js,在业务节点调用百度官方事件函数;系统自动选择域名 Token 或兜底 Token,并保存完整回传结果。
嵌入 tracker.js → 业务节点调用转化函数 → 系统自动选择域名或兜底 Token 回传百度。控制台会分别显示采集与回传结果。
四步上手
在落地页 </body> 前加入采集脚本(见下方代码)。
点击表单按钮时调用 表单按钮点击()(编码 5);确认提交成功后再调用 表单提交成功()(编码 3)。
业务事件会按官方编码自动回传,优先匹配落地页域名 Token,未匹配则使用兜底 Token;结果可到 回传记录 查看。
无需安装百度官方页面埋码 JS;回传由本系统服务端对接百度 API。
嵌入采集脚本
复制到落地页采集脚本统一在此维护。每个投放落地页只需一段脚本,data-endpoint 指向本系统(可与后台不同域名),data-project-id 填写项目管理中的项目 ID,无需填写项目域名。登记访客和后续事件自动携带同一 ID。
<script src="http://tkhuichuan.xcentre.top/assets/tracker.js" data-endpoint="http://tkhuichuan.xcentre.top/api/collect.php" data-project-id="你的项目ID"></script>
默认不会在打开页时自动上报;需要「关键页面浏览」(编码 20)时,在 script 上加 data-page-view="1",或在业务节点调用 关键页面浏览()。控制台 [百度采集] 表示行为已写入本系统,[百度回传] 才是服务端回传结果。
上报转化
先 tracker,再业务 script加载 tracker 后可调用点击/浏览函数,例如 trackEvent('20')。支付、购买、注册、表单成功等业务结果必须由服务端验证后提交,否则返回 403。金额仅在服务端服务购买成功事件中传入,单位为人民币分。
<script> // 浏览器只上报点击/浏览,业务成功事件使用服务端 API 表单按钮点击(); 关键页面浏览(); </script>
请把逻辑写在独立 <script> 中,避免 onclick 内联;访客链接需带 bd_vid(从百度广告点击进入)。
排查:F12 看是否请求 http://tkhuichuan.xcentre.top/api/collect.php;在线体验 可模拟采集和自动回传。
服务端 API 对接教程
支付结果以服务端为准- 配置回传系统:在本系统服务器设置高强度随机
BAIDU_RETURN_API_KEY,在 Token 管理配置与广告落地页主机名完全一致的 Token。 - 配置业务项目:设置
BAIDU_RETURN_API_URL=http://tkhuichuan.xcentre.top/api/server-return.php和相同的BAIDU_RETURN_API_KEY。密钥只能保存在服务端环境变量,不能写进网页、APP 或仓库。 - 保存广告来源:访客从百度广告进入时读取 URL 中的
bd_vid,连同原始落地页 URL 保存到 Session,并在创建订单时固化到订单表。 - 支付确认后调用:支付异步通知先完成验签、金额校验和订单状态更新,再由服务器请求本接口;前端支付结果页不能作为支付成功依据。
- 保存并核对结果:业务项目保存响应中的
recordId,到 回传记录 核对百度最终响应。
第一步:落地页保存 bd_vid,并随订单入库
订单表建议增加 baidu_bd_vid VARCHAR(255) 和 baidu_page_url TEXT。不要等支付回调时再取 bd_vid,支付平台通知地址通常没有该参数。
<?php
session_start();
// 广告首次到站时保存百度点击标识和原始落地页,支付回调本身通常没有 bd_vid。
$bdVid = isset($_GET['bd_vid']) && is_string($_GET['bd_vid']) ? trim($_GET['bd_vid']) : '';
if ($bdVid !== '' && strlen($bdVid) <= 255 && !preg_match('/\s/', $bdVid)) {
$_SESSION['baidu_bd_vid'] = $bdVid;
$_SESSION['baidu_page_url'] = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}
// 创建订单时把这两个值写入订单表;字段名可按你的项目调整。
$orderData['baidu_bd_vid'] = $_SESSION['baidu_bd_vid'] ?? '';
$orderData['baidu_page_url'] = $_SESSION['baidu_page_url'] ?? '';第二步:支付回调中调用服务端 API
下面代码可直接放入 PHP 项目的支付服务层,配置 BAIDU_RETURN_PROJECT_ID 为项目管理中的 ID。pageUrl 应使用订单保存的原始广告落地页,系统据此精确选择域名 Token;接口会自动把 bdVid 合入百度 logidUrl。
<?php
/** 支付成功后调用百度回传系统;同一支付订单始终使用同一个 requestId。 */
function huiChuanBaiduZhiFu(array $order): array
{
$apiUrl = getenv('BAIDU_RETURN_API_URL');
$apiKey = getenv('BAIDU_RETURN_API_KEY');
if (!$apiUrl || !$apiKey) {
throw new RuntimeException('未配置百度回传 API 地址或密钥');
}
$projectId = (int)getenv('BAIDU_RETURN_PROJECT_ID'); // 项目管理中查看项目 ID
$payload = array(
'projectId' => $projectId,
'requestId' => 'payment:'.$projectId.':' . $order['pay_channel'] . ':' . $order['order_no'],
'orderId' => $order['order_no'], // 同域名内唯一订单号,跨请求标识去重
'newType' => 90, // 商品支付成功;服务购买成功改为 10
'bdVid' => $order['baidu_bd_vid'],
'pageUrl' => $order['baidu_page_url'],
);
// newType=10 时可增加:$payload['convertValue'] = (int)$order['amount_fen'];
$curl = curl_init($apiUrl);
curl_setopt_array($curl, array(
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 3,
CURLOPT_TIMEOUT => 12,
));
$body = curl_exec($curl);
$error = curl_error($curl);
$httpCode = (int)curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($body === false) {
throw new RuntimeException('百度回传系统网络错误:' . $error);
}
$result = json_decode($body, true);
if ($httpCode !== 200 || !is_array($result) || empty($result['success'])) {
throw new RuntimeException('百度回传失败 HTTP ' . $httpCode . ':' . $body);
}
return $result;
}
// 支付异步通知:必须先验签、核对金额,并把订单状态更新为已支付。
// $order = verifyPaymentAndMarkPaid($_POST);
if (!empty($order['baidu_bd_vid']) && !empty($order['baidu_page_url'])) {
$returnResult = huiChuanBaiduZhiFu($order);
// 保存 $returnResult['recordId'],便于和回传系统后台记录核对。
}字段与结果处理
| 字段 | 是否必填 | 说明 |
|---|---|---|
| projectId | 新接入必填 | 项目管理中的正整数 ID,用于区分项目;旧调用省略时兼容域名归属 |
| requestId | 是 | 全局唯一幂等标识,推荐 payment:项目ID:渠道:商户订单号;同一订单永远复用同一个值 |
| newType / eventName | 至少一个 | 商品支付成功=90,服务购买成功=10;同时传时必须对应同一事件 |
| bdVid | 是 | 广告首次落地 URL 中的 bd_vid,创建订单时保存 |
| pageUrl | 是 | HTTP(S) 原始广告落地页,用于匹配 Token 和生成 logidUrl |
| convertValue | 否 | 仅 newType=10 可传,人民币分正整数,如 30 元传 3000 |
响应判断:HTTP 200 且 success=true 表示百度已受理;duplicate=true 表示相同请求已处理,本次没有重发。HTTP 401 检查密钥,409 表示同一 requestId 被不同载荷复用,422 检查字段或官方编码,503 表示回传系统未配置 API 密钥。
不要盲目补发:失败、超时或处理中请求不会自动再次请求百度,防止百度已收到但响应丢失时重复计数。不得换一个新 requestId 强行重试;先按 recordId 到回传记录核对,再人工决定是否处理。
API 回传编码
与服务端白名单一致| 编码 | 含义 | 调用 |
|---|---|---|
| 1 | 咨询按钮点击 | window.baiduReturn.trackEvent('1') |
| 2 | 电话按钮点击 | window.baiduReturn.trackEvent('2') |
| 3 | 表单提交成功 | window.baiduReturn.trackEvent('3') |
| 4 | 激活 | window.baiduReturn.trackEvent('4') |
| 5 | 表单按钮点击 | window.baiduReturn.trackEvent('5') |
| 6 | 下载(预约)按钮点击 | window.baiduReturn.trackEvent('6') |
| 7 | 购买按钮点击 | window.baiduReturn.trackEvent('7') |
| 8 | 短信咨询按钮点击 | window.baiduReturn.trackEvent('8') |
| 10 | 服务购买成功 | window.baiduReturn.trackEvent('10') |
| 14 | 订单提交成功 | window.baiduReturn.trackEvent('14') |
| 17 | 三句话咨询 | window.baiduReturn.trackEvent('17') |
| 18 | 留线索 | window.baiduReturn.trackEvent('18') |
| 20 | 关键页面浏览 | window.baiduReturn.trackEvent('20') |
| 25 | 注册 | window.baiduReturn.trackEvent('25') |
| 26 | 付费 | window.baiduReturn.trackEvent('26') |
| 27 | 客户自定义 | window.baiduReturn.trackEvent('27') |
| 28 | 次日留存 | window.baiduReturn.trackEvent('28') |
| 29 | 7日留存 | window.baiduReturn.trackEvent('29') |
| 30 | 电话拨通 | window.baiduReturn.trackEvent('30') |
| 32 | QQ咨询按钮点击 | window.baiduReturn.trackEvent('32') |
| 35 | 微信复制按钮点击 | window.baiduReturn.trackEvent('35') |
| 41 | 申请 | window.baiduReturn.trackEvent('41') |
| 42 | 授信 | window.baiduReturn.trackEvent('42') |
| 45 | 商品下单成功 | window.baiduReturn.trackEvent('45') |
| 46 | 加入购物车 | window.baiduReturn.trackEvent('46') |
| 47 | 商品收藏 | window.baiduReturn.trackEvent('47') |
| 48 | 商品详情页到达 | window.baiduReturn.trackEvent('48') |
| 49 | 登录(注册激活后登录) | window.baiduReturn.trackEvent('49') |
| 50 | 预约 | window.baiduReturn.trackEvent('50') |
| 52 | 深度使用 | window.baiduReturn.trackEvent('52') |
| 56 | 到店 | window.baiduReturn.trackEvent('56') |
| 57 | 店铺调起 | window.baiduReturn.trackEvent('57') |
| 61 | 二次跳转 | window.baiduReturn.trackEvent('61') |
| 67 | 微信调起按钮点击 | window.baiduReturn.trackEvent('67') |
| 68 | 粉丝关注成功 | window.baiduReturn.trackEvent('68') |
| 71 | 应用调起 | window.baiduReturn.trackEvent('71') |
| 72 | 聊到相关业务 | window.baiduReturn.trackEvent('72') |
| 73 | 回访-电话接通 | window.baiduReturn.trackEvent('73') |
| 74 | 回访-信息确认 | window.baiduReturn.trackEvent('74') |
| 75 | 回访-发现意向 | window.baiduReturn.trackEvent('75') |
| 76 | 回访-高潜成交 | window.baiduReturn.trackEvent('76') |
| 77 | 回访-成单客户 | window.baiduReturn.trackEvent('77') |
| 78 | 店铺停留 | window.baiduReturn.trackEvent('78') |
| 79 | 微信加粉成功 | window.baiduReturn.trackEvent('79') |
| 89 | 放款 | window.baiduReturn.trackEvent('89') |
| 90 | 商品支付成功 | window.baiduReturn.trackEvent('90') |
| 92 | 有效咨询 | window.baiduReturn.trackEvent('92') |
| 93 | 付费阅读 | window.baiduReturn.trackEvent('93') |
| 94 | 进入书城并阅读 | window.baiduReturn.trackEvent('94') |
| 95 | 3日留存 | window.baiduReturn.trackEvent('95') |
| 96 | 4日留存 | window.baiduReturn.trackEvent('96') |
| 97 | 5日留存 | window.baiduReturn.trackEvent('97') |
| 98 | 6日留存 | window.baiduReturn.trackEvent('98') |
| 100 | 14日留存 | window.baiduReturn.trackEvent('100') |
| 112 | 微信小程序调起 | window.baiduReturn.trackEvent('112') |
| 117 | 进件 | window.baiduReturn.trackEvent('117') |
| 118 | 付费观剧 | window.baiduReturn.trackEvent('118') |
| 119 | 关键行为 | window.baiduReturn.trackEvent('119') |
核对回传结果请打开 回传记录。
常见问题
- 咨询按钮点击没有日志?
- 先加载 tracker.js 再调用
咨询按钮点击()或window.baiduReturn.trackEvent('1')。默认立即打印调用记录;若设置data-debug="0"则不打印。若只有调用日志,请检查访客登记请求是否一直等待。打开控制台保留日志可避免跳转后日志被清空。 - 没有访问记录?
- 确认落地页已发布嵌入代码,且浏览器未拦截对
http://tkhuichuan.xcentre.top/api/collect.php的请求。 - 有行为但没回传百度?
- 所有受支持的业务事件都会自动回传。请到回传记录查看是否缺少域名/兜底 Token、
bd_vid,或百度接口是否拒绝;历史“未回传”记录不会自动补发。 - 支付 API 应该在前端还是支付回调调用?
- 只能在服务端确认支付成功后调用。先验证支付平台签名、核对金额并更新订单,再读取订单保存的
bd_vid和原始落地页发起回传;API 密钥不得下发到浏览器或 APP。 - 和后台不同域名可以吗?
- 可以,保持
data-endpoint为本系统地址即可跨域上报。