PHP调用滴滴AIETA接口前必须确认:它非开放API,仅限内部或深度合作方使用;官方不提供PHP SDK且无合法Composer包;所有请求需OAuth2+HmacSHA256签名、白名单管控及WGS84坐标。

PHP调用滴滴AIETA接口前必须确认的三件事
不能直接调用。滴滴AIETA不是开放API,没有公开文档、无需Token的https://api.xiaojukeji.com/eta这类地址——它只对滴滴内部或深度合作方(如车企、高德、美团打车等)以SDK或私有协议形式提供。你看到的“PHP调用示例”,99%是伪造的、过期的,或是把模拟请求当真实接入。
- 官方不提供PHP SDK,也不维护任何
aieta-client-php包(Composer里搜不到合法包) - 所有公开渠道的
POST /v1/eta/predict请求,都需要滴滴签发的access_token+app_key+ 请求签名,且IP、域名、回调地址全部白名单管控 - 即使拿到测试权限,接口返回的也不是简单时间数字,而是包含
eta_seconds、confidence、route_id、traffic_level等字段的结构化JSON,且eta_seconds本身带置信区间,不是“精准值”
如果你真有合作资质:PHP发起请求的关键点
拿到授权后,实际是走标准OAuth2 + HmacSHA256签名的HTTP POST。不是curl随便一发就行,漏掉任意一环都会返回{"code":401,"msg":"Invalid signature"}或{"code":403,"msg":"App not authorized"}。
- 请求头必须带
Content-Type: application/json和X-DiDi-AppKey: your_app_key - 请求体要含
timestamp(毫秒级,与服务器时间差不能超5分钟)、nonce(随机字符串,防重放)、signature(拼接app_key+timestamp+nonce+body_json后HmacSHA256 Base64编码) -
body_json里origin和destination必须是WGS84坐标(不是GCJ02或BD09),且origin格式为{"lat":39.9123,"lng":116.404},少一个字段就400 Bad Request - 别用
file_get_contents("php://input")读原始body——它不触发签名验证;必须用json_encode($data, JSON_UNESCAPED_UNICODE)生成严格格式字符串再签名
$data = [
'origin' => ['lat' => 39.9123, 'lng' => 116.404],
'destination' => ['lat' => 39.9087, 'lng' => 116.397],
'timestamp' => round(microtime(true) * 1000),
'nonce' => bin2hex(random_bytes(8))
];
$body_json = json_encode($data, JSON_UNESCAPED_UNICODE);
$signature = base64_encode(hash_hmac('sha256', $app_key . $data['timestamp'] . $data['nonce'] . $body_json, $app_secret, true));
为什么你测出来的ETA总是不准?不是代码问题
AIETA的预测结果严重依赖实时路况、司机历史轨迹、订单池密度、甚至天气和节假日模型——它不是纯路径距离除以速度。你在测试环境用固定坐标反复请求,得到的eta_seconds波动±90秒完全正常。
- 单次请求返回的
confidence低于0.6时,eta_seconds参考价值极低,必须结合traffic_level(0=畅通,3=严重拥堵)判断 - 如果
route_id为空,说明没匹配到有效路径,此时返回的ETA是fallback规则(比如直线距离/平均车速估算),不是AI预测 - 不要拿AIETA和高德/百度ETA比“谁更准”——它们训练数据源、更新频率、服务目标完全不同;滴滴AIETA专为“司机接驾”场景优化,不是通用路线规划
替代方案:没有合作资质时更现实的选择
想在PHP项目里实现类似效果,别硬啃AIETA。用公开、稳定、可商用的替代链路:
立即学习“PHP免费学习笔记(深入)”;
- 高德地图Web服务API的
direction/driving接口,传入origin和destination,返回duration(预估行驶时间),支持strategy=2(躲避拥堵),日调用量免费1万次 - 百度地图LBS API的
direction/v2/driving,需ak参数,返回duration和taxi_cost,注意它默认返回的是“驾车时间”,不是“司机从当前位置到你的预计到达时间” - 如果业务真需要“司机到乘客”的动态ETA,得自己建轻量级逻辑:定时拉司机GPS(需司机APP授权)、用PostGIS或
haversine公式算球面距离、再按实时路段限速加权估算,比对接黑盒AIETA可控得多
真正难的从来不是写几行curl_exec,而是搞清你要的到底是不是滴滴能给的、以及给了之后你能不能消化它的不确定性。



















