计算得到的MTS签名不符合标准-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

计算得到的MTS签名不符合标准

2017-02-22 16:58:20 3966 1

我根据MTS签名机制的帮助文档编写了下面代码,但是进行请求的时候返回
"The request signature does not conform to Aliyun standards."

查过很多资料,也把官方文档的数据带入到我的代码中,验证是通过的
但是带入实际信息进行测试的时候还是会报错.

下面是我的PHP代码,已带入官方实例参数,验证得到的signature与文档中的一致.

<?php

//创建随机UUID,接受string的前缀
function create_uuid($prefix = ""){
    $str = md5(uniqid(mt_rand(), true));   
    $uuid  = substr($str,0,8) . '-';   
    $uuid .= substr($str,8,4) . '-';   
    $uuid .= substr($str,12,4) . '-';   
    $uuid .= substr($str,16,4) . '-';   
    $uuid .= substr($str,20,12);   
    return $prefix . $uuid;
}

//创建ISO8601格式的时间,接受标准时间戳输入
function gmt_iso8601($time) {
    $dtStr = date("c", $time);
    $mydatetime = new DateTime($dtStr);
    $expiration = $mydatetime->format(DateTime::ISO8601);
    $pos = strpos($expiration, '+');
    $expiration = substr($expiration, 0, $pos);
    return $expiration."Z";
}
//设置时区
date_default_timezone_set('UTC');

//视频储存名称时间戳+15位随机数
$newname=create_uuid().".mp4";

$Aid = "testId";
$AKey = "testKeySecret";

/* 拼接requestURL */
$action_data = array(
"PipelineId"=>"18692f58006c41bc9d64a83808530ce7",
"Action"=>"SubmitJobs","
Input"=>"{
'Bucket':'7cgcg-video',
'Location':'oss-cn-shanghai',
'Object':'7cgcg-video\/20170220_143336.mp4'
}", 
"Outputs"=>"[{
'OutputObject':$newname,
'TemplateId':'14222958739bfe5e647cdf63e1306118',
'WaterMarks':{
    'WaterMarkTemplateId':'4a4d14da76444a68bab093124f64b799'
    },
'UserData':'testid-001'
}]");
$action_data=http_build_query($action_data);


//设置公共参数
$public_data=array(
'AccessKeyId'=>$Aid,
'Action'=>'SearchTemplate',
'Format'=>'XML',
'PageSize'=>'2',
'SignatureMethod'=>'HMAC-SHA1',
'SignatureNonce'=> '4902260a-516a-4b6a-a455-45b653cf6150',
'SignatureVersion'=>'1.0',
'Timestamp'=>'2015-05-14T09:03:45Z',
'Version'=>'2014-06-18'
);
//将公共参数格式化
foreach($public_data as $k=>$v){
    if (empty($StringToSign)){
        $StringToSign=$k."=".$v;
    }else{
        if ($k=="Timestamp"){
            $StringToSign.="&".$k."=".rawurlencode($v);
        }else{
            $StringToSign.="&".$k."=".$v;
        }
    }
}

//计算签名
$StringToSign = utf8_encode("GET&%2F&".rawurlencode($StringToSign));
$signature = rawurlencode(utf8_encode(base64_encode(hash_hmac('SHA1', $StringToSign,($AKey.'&'), true))));
echo $signature;
echo "</br></br>";


//拼接公共参数
$public_data=http_build_query($public_data);
//加入签名
$other_data="Signature=".$signature.'&'.$public_data;
//拼接requestURL
$get_url = 'http://mts.aliyuncs.com?'.$action_data.'&'.$other_data;

echo $get_url;
echo "</br></br>";

// 初始化一个 cURL 对象 
$curl = curl_init(); 
// 设置你需要抓取的URL 
curl_setopt($curl, CURLOPT_URL, $get_url); 
// 设置header 响应头是否输出
curl_setopt($curl, CURLOPT_HEADER, 1);

// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
// 1如果成功只将结果返回,不自动输出任何内容。如果失败返回FALSE
 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0); 
// 运行cURL,请求网页 
$data = curl_exec($curl); 
// 关闭URL请求 
curl_close($curl); 
// 显示获得的数据 
print_r($data); 
?>

参考的文档
https://help.aliyun.com/document_detail/29217.html?spm=5176.doc29218.6.568.6NUUCO

取消 提交回答
全部回答(1)
相关问答

2

回答

OSS上传md5校验功能不支持预签名url分发给移动端

2021-08-07 11:25:01 1054浏览量 回答数 2

1

回答

配置commons validator验证框架 - 框架报错

2020-06-02 21:52:22 206浏览量 回答数 1

1

回答

如果缺少一些事件,如何使用apache flink稳健地计算连接?

2018-12-11 16:32:39 1305浏览量 回答数 1

2

回答

我的电脑是windows XP系统, 但是我远程连接不成功

2018-08-30 10:13:37 575浏览量 回答数 2

0

回答

汇聚云计算的生态核能——云市场,云上APP Store

2018-07-16 21:14:54 827浏览量 回答数 0

1

回答

callback功能支持自定义header以及v2版本签名

2017-10-31 17:26:07 2949浏览量 回答数 1

3

回答

我想注册一个域名,并且具备ddns功能,就是总是指向我公司的动态ip

2017-02-06 10:35:49 17703浏览量 回答数 3

1

回答

计算器程序:如何在Qt5中使用C编写科学计算器程序?

2016-03-20 14:21:58 2330浏览量 回答数 1

4

回答

关于dedecms中会员注册用邮箱验证不成功的问题

2016-03-01 14:30:05 6406浏览量 回答数 4

1

回答

用dedecms开启伪静态又在ECS里面设置了但是打开以后就成这样了

2016-02-10 23:04:53 2119浏览量 回答数 1
+关注
0
文章
5
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载