调用滴滴AI行程分享接口前必须确认三件事:一是完成授权流程并获取有效access_token,二是确保trip_id来自滴滴创建行程的成功响应,三是严格按要求构造JSON请求体,含必传字段trip_id、share_type、expire_time(秒级时间戳)。

调用滴滴AI行程分享接口前必须确认的三件事
PHP 不能直接“生成加密行程链接”,必须通过滴滴开放平台的 /v1/trip/share 接口发起 HTTP 请求,且依赖有效 access_token 和合法行程 ID。没走通授权流程或没拿到行程上下文,代码再对也返回 400 Invalid trip_id 或 401 Unauthorized。
常见错误现象:
• 直接拼接 URL 尝试 GET 访问,返回 405 Method Not Allowed
• 用测试环境 app_key 调正式接口,报错 invalid_app_key
• 忘记在请求头加 Authorization: Bearer {token},始终 401
实操建议:
• 先用 Postman 跑通一次:POST https://openapi.didiglobal.com/v1/trip/share,带 Content-Type: application/json 和正确 header
• PHP 中务必用 cURL(非 file_get_contents),并显式设置 CURLOPT_HTTPHEADER
• access_token 有 2 小时有效期,别硬编码,要封装刷新逻辑
PHP 发起 POST 请求生成分享链接的关键参数
滴滴要求的 JSON Body 结构很严格,少一个字段或类型不对就直接 400。不是所有字段都可选——trip_id、share_type、expire_time 三个必须传,且 expire_time 必须是 Unix 时间戳(秒级,不是毫秒)。
立即学习“PHP免费学习笔记(深入)”;
常见错误现象:
• 把 expire_time 写成字符串如 "1717027200"(PHP json_encode 会加引号,导致类型不匹配)
• share_type 误填 "wechat"(实际只接受 "mini_program" 或 "link")
• 漏传 source 字段,即使文档写“可选”,部分环境校验会失败
实操建议:
• 用 json_encode($data, JSON_UNESCAPED_UNICODE | JSON_NUMERIC_CHECK) 避免数字变字符串
• trip_id 必须来自滴滴创建行程成功后的响应,不能自己构造
• 示例片段:
$data = [
'trip_id' => 'TRIP_abc123',
'share_type' => 'link',
'expire_time' => time() + 86400,
'source' => 'your_app_name'
];
处理返回结果时最容易忽略的加密逻辑
接口返回的 share_url 确实是加密链接,但这个“加密”是滴滴服务端做的,PHP 不需要也不应该再 AES/RSA 加密一次。很多人误以为要自己 base64 或 sign,结果把链接二次编码,乘客点开 404。
常见错误现象:
• 对 share_url 再执行 urlencode() 后塞进微信卡片,跳转时多一层编码,滴滴服务端解不出
• 把返回的 qrcode_url 当作最终分享链接(它只是二维码图地址,不能直接分享)
• 忽略 status 字段直接取 share_url,实际返回可能是 "status":"failed"
实操建议:
• 只信任返回 JSON 中 status === "success" 且存在 share_url 字段时才使用
• 原样返回 share_url 给前端,不要做任何字符串操作
• 若需生成二维码,用 qrcode_url,但注意它有时效性,别缓存超过 5 分钟
生产环境必须加的容错和日志点
这个接口不是 100% 稳定,滴滴侧可能限流、维护或临时调整字段。线上出问题时,没有日志根本没法定位是 token 过期、行程失效,还是网络超时。
实操建议:
• cURL 必须设 CURLOPT_TIMEOUT_MS(建议 3000),避免卡住进程
• 记录原始请求体、响应状态码、curl_error() 和响应 body(脱敏后)
• 对 429 Too Many Requests 做指数退避,别死循环重试
• 检查返回里是否有 retry_after 字段,有就按它提示延迟
真正麻烦的是行程状态不一致:比如乘客已取消,你还拿旧 trip_id 去请求分享,滴滴返回成功但链接打不开。得在调用前查一遍行程最新状态接口 /v1/trip/status。











