异步处理结果持久化{"error":"bad token"}

先贴下我的代码:

        $bucket = 'mybucket';
        $key = '123.mp3';
        $base64_result = base64_encode($bucket.':'.$key.'.ogg');
        $fop = "avthumb/ogg|saveas/".$base64_result;
        $notify_url = "http://www.mywebsite.net/";

        $query = "bucket=".$bucket."&key=".$key."&fops=".$fop."&notifyURL=".$notify_url;

        $access_token = $this->qiniu->fop_access_token($query);

        $header = array();
        $header[] = 'Host:api.qiniu.com';
        $header[] = 'Content-Type:application/x-www-form-urlencoded';
        $header[] = 'Authorization:'.$access_token;

        $query = "bucket=".urlencode($bucket)."&key=".urlencode($key).
            "&fops=".urlencode($fop)."&notifyURL=".urlencode($notify_url);

        $result = curl_post($query, 'http://api.qiniu.com/pfop/', $header);
        echo $result;

qiniu.php中的相关函数

        function fop_access_token($query)
        {
            Qiniu_SetKeys(ACCESS_KEY, SECRET_KEY);
            $mac = new Qiniu_Mac(ACCESS_KEY, SECRET_KEY);

            $sign_data = "/pfop/\n".$query;
            $access_token = $mac->Sign($sign_data);

            return $access_token;
        }

curl模拟post方法

        function curl_post($post, $url, $header)
        {
            $options = array(
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_HEADER => false,
                CURLOPT_HTTPHEADER => $header,
                CURLOPT_POST => true,
                CURLOPT_POSTFIELDS => $post,
            );

            $ch = curl_init($url);
            curl_setopt_array($ch, $options);
            $result = curl_exec($ch);
            curl_close($ch);
            return $result;
        }

请求返回为{"error":"bad token"},请问下哪里有错啊?

阅读 9.1k
1 个回答
public function Sign($data) // => $token
{
    $sign = hash_hmac('sha1', $data, $this->SecretKey, true);
    return $this->AccessKey . ':' . base64_encode($sign);
}

你看一下你的Sign函数是不是和上面差不多,要是还是不行,你试一下curl_post里直接把pfop从postfields当中剥离开来,直接放到url里。

另外,你可以通过下面这个链接检测一下你生成的token是不是正确的。
http://jsfiddle.net/gh/get/extjs/4.2/icattlecoder/jsfiddle/tree/master/uptoken

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