必须走OAuth 2.0授权码流程获取access_token:先在百度网盘开放平台创建应用获取client_id和client_secret,拼接authorize URL引导用户授权得code,再用code、client_id、client_secret及redirect_uri=oob向token接口POST换取30天有效期的access_token。

必须走 OAuth 2.0 换取 access_token,否则所有请求直接返回 {"error":"invalid_access_token"} —— 这是 PHP 调用百度网盘 API 最常卡死的第一步。
怎么拿到合法的 access_token
百度不接受账号密码直连,也不支持 refresh_token。你得手动走通授权码流程:
- 在百度网盘开放平台创建应用,拿到
client_id(即 AppKey)和client_secret(即 SecretKey) - 拼出授权 URL,让用户跳转(开发时
redirect_uri可填oob):https://openapi.baidu.com/oauth/2.0/authorize?response_type=code&client_id=YOUR_APPKEY&redirect_uri=oob&scope=basic,netdisk - 用户授权后会看到一串
code=xxx,复制它 - 用该
code向https://openapi.baidu.com/oauth/2.0/token发起 POST 请求,参数含grant_type=authorization_code、client_id、client_secret、code、redirect_uri=oob - 响应里
access_token有效期 30 天,过期就得重走一遍 —— 别存进数据库当永久凭证
上传音频必须用 /rest/2.0/xpan/file?method=upload
别碰 upload_chunk:它要求先调 precreate、校验 content-md5 和 content-crc32,小音频文件纯属自找麻烦。正确接口只有一条:
POST https://pan.baidu.com/rest/2.0/xpan/file?method=upload
立即学习“PHP免费学习笔记(深入)”;
-
file字段名固定,不能改成audio或其他 -
path参数必须以/开头,例如/music/voice.mp3,写成music/voice.mp3会报invalid param path - PHP 中
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data)的$post_data必须是数组,不是 JSON 字符串;否则服务端收不到file字段 - 推荐用
curl_file_create()构造上传项,兼容 PHP 5.5+;若环境不支持,改用@/full/path/to/file(PHP 5.6+ 已弃用,但仍可用)
cURL 上传失败的三个硬性检查点
即使 token 和接口都对,PHP cURL 仍可能静默失败:
-
post_max_size和upload_max_filesize默认常为 2M,上传 >2MB 音频前务必确认 ini 设置,否则$_FILES为空且无提示 - SSL 报错
unable to get local issuer certificate:优先用curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cacert.pem')指向最新 CA 包,而不是关掉CURLOPT_SSL_VERIFYPEER - 返回
{"error_code":31072,"error_msg":"param error"}:90% 是因为用了upload_chunk接口却没传prehash或漏了content-md5;立刻切回method=upload并检查path开头斜杠
最易被忽略的是 access_token 的 scope 权限 —— 如果创建应用时没勾选 netdisk,上传必然报 insufficient_scope,而错误信息里不提示缺哪个 scope,只能回头去控制台核对。



















