七牛云回调验证失败

按照官方的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,帮忙看看,谢谢!

阅读 3k
1 个回答

图片描述

请求头改成application/json ,和你生成签名的请求头不一致的问题造成的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题