按照官方的sdk走了一遍,测试七牛云,结果回调验证总是失败,真TM无语。
得到token:
/**
* 得到上传token的方法
*/
public function fetchUploadToken()
{
// 初始化Auth状态
$auth = new Auth($this->accessKey, $this->secretKey);
$policy = [
'callbackUrl' => 'http://我的回调域名/acceptQiniuUploadCallback',
'callbackBody' => '{"key":"$(key)","hash":"$(etag)","fsize":$(fsize),"bucket":"$(bucket)"}',
'callbackBodyType' => 'application/json'
];
$upToken = $auth->uploadToken($this->bucket, null, $this->expires, $policy, true);
echo $upToken;
}
上传的:
public function uploadFileToQiniu()
{
$uploadToken = $_POST['uploadToken'];
$uploadMgr = new UploadManager();
list($ret, $err) = $uploadMgr->put($uploadToken, null, 'test qiniu upload');
if ($err !== null) {
var_dump($err);
} else {
var_dump($ret);
}
}
PS: 上传是返回的success,也就是上传是没问题的。
回调方法:
public function acceptQiniuUploadCallback()
{
$auth = new Auth($this->accessKey, $this->secretKey);
//获取回调的body信息
$callbackBody = file_get_contents('php://input');
//回调的contentType
$contentType = 'application/x-www-form-urlencoded';
//回调的签名信息,可以验证该回调是否来自七牛
$authorization = $_SERVER['HTTP_AUTHORIZATION'];
//七牛回调的url,具体可以参考:http://developer.qiniu.com/docs/v6/api/reference/security/put-policy.html
$url = 'http://我的回调域名/acceptQiniuUploadCallback';
$isQiniuCallback = $auth->verifyCallback($contentType, $authorization, $url, $callbackBody);
if ($isQiniuCallback) {
$resp = array('ret' => 'success');
} else {
$resp = array('ret' => 'failed');
}
echo json_encode($resp);
}
收到的七牛云带过来的参数是:
callbackBody:{\"key\":\"Fm2SqeglnKIi8UDYJ7_WhhR8fybG\",\"hash\":\"Fm2SqeglnKIi8UDYJ7_WhhR8fybG\",\"fsize\":17,\"bucket\":\"test\"}",
头信息中的authhorization:
QBox KhMpusItBI66r4HjARLLeLrACyq0CFWVhltvxZRQ:PGtDDftzjgB4MFW5A5LF_5pXgpc=
验证就是过不了,也就是这一行:
$isQiniuCallback = $auth->verifyCallback($contentType, $authorization, $url, $callbackBody);
总TM返回false, 不知道其它人遇到过没,真是屎一样的文档,测试都不能直接通过。也没个错误提示。有没有遇到过类似情况的兄dei,帮忙看看,谢谢!
请求头改成application/json ,和你生成签名的请求头不一致的问题造成的