Webman 接入七牛云需完成 token 生成(带 policy 配置回调)、回调验证(用 Authorization::verifyCallback 校验签名并返回纯文本 200)和静态资源路径替换(注入 cdnurl 并修改构建配置)三步,缺一不可。

Webman 里用七牛云,不是装个 SDK 就能上传成功的——关键在 token 生成、回调验证、静态资源路径替换这三步,漏一个就卡在「前端显示成功,后端没记录」。
uploadToken 必须带 policy 才能触发回调
很多 Webman 项目只调 $auth->uploadToken($bucket),结果上传完七牛根本不发回调。因为默认 token 不含回调配置,必须显式传 $policy 数组:
-
callbackUrl要填公网可访问的地址(如https://api.example.com/qiniu/callback),且 Webman 路由得允许 POST -
callbackBody里的变量必须用$(fname)这种格式,写成filename=xxx会丢数据 - v7+ SDK 中
$policy是关联数组,键名必须小写:callbackUrl对,callbackurl错 - 如果用了
saveKey,回调体里才能取到$(key);否则$(key)为空字符串
回调接收端必须校验签名并返回纯文本 200
Webman 的控制器收到七牛回调时,不能直接入库或转发,必须先过签名关:
- 用
Qiniu\Auth\Authorization::verifyCallback()校验,第二个参数是原始请求体(file_get_contents('php://input')),不是$_POST - 别自己拼 HMAC-SHA1,SDK 已封装好逻辑,传错参数类型(比如把 JSON 字符串当数组)会始终返回 false
- 响应必须是 HTTP 200 + 纯文本(如
"success"),返回{"code":0}或 HTML 页面会被七牛判定为失败 - 回调地址若走 Nginx,要确认
client_max_body_size足够大,否则大文件回调体被截断导致签名不匹配
webman-admin 静态资源上七牛要批量改路径
webman-admin 默认从本地 public/static/ 加载 JS/CSS,想切到七牛 CDN,不能只改配置:
立即学习“PHP免费学习笔记(深入)”;
- 先确保
cdnurl配置项已设为七牛绑定的域名(如https://cdn.example.com) - 在 Webman 启动时用
view()->share()注入全局变量,让模板里所有static/前缀自动替换成cdnurl - 若用的是 webman-admin 自带的构建流程(如 vite),需修改
vite.config.js的base配置为七牛域名,并重新 build - 升级 webman-admin 后,记得再跑一遍路径替换脚本,否则新引入的资源仍走本地
最易忽略的是:v7+ SDK 的命名空间和初始化方式已彻底变更,new Qiniu\Auth() 会 fatal error,必须写全 new Qiniu\Auth\Authorization($ak, $sk),且 use 语句不能省略 \Auth\ 段。



















