摘要:
开头先说明!不要说去下载官方的SDK!!!不要说去下载官方的SDK!!!不要说去下载官方的SDK!!!百度里面一搜,搜出来的文章全都是:先下载官方SDK,然后叭啦叭啦一大堆!都下载... 开头先说明!
不要说去下载官方的SDK!!!不要说去下载官方的SDK!!!不要说去下载官方的SDK!!!
百度里面一搜,搜出来的文章全都是:先下载官方SDK,然后叭啦叭啦一大堆!都下载官方SDK了,还要你废话干什么?官方文档又不是读不懂!
好,说完了,为何这么气愤?因为昨天这个玩意花了我一天时间。说说为什么不用官方文档?
因为我这个项目,一共就一个页面,才1kb大小,但官方的sdk呢?2.0版要用composer来安装,1.0版如下图:
玩呢?我就想鉴权获取个token,官方的sdk集成性太高了,一个文件调一个文件,又不能单独拿获取token这个功能出来,没办法,只能自己写了!
关键是,官方上对于自己取token的文档,是有问题的!有一个环节,它没说!!!!
先上完整代码!
/*
* author:kai
* $return token
* 功能:获取阿里云token
*/
public function getalyuntoken($accesskeyid,$accessKeysecret){
date_default_timezone_set("Etc/GMT");
$one = md5(time());
$parms = array(
"AccessKeyId" => $accesskeyid,
"Action" => "CreateToken",
"Version" => "2019-02-28",
"Format" => "JSON",
"RegionId" => "cn-shanghai",
"Timestamp" => date("Y-m-d\TH:i:s\Z"),
"SignatureMethod" => "HMAC-SHA1",
"SignatureVersion" => "1.0",
"SignatureNonce" => substr($one,0,8)."-".substr($one,8,4)."-".substr($one,12,4)."-".substr($one,16,4)."-".substr($one,20,4),
);
ksort($parms);
$query = http_build_query($parms);
$stringToSign = "GET&%2F&" . urlencode($query);
$signature = urlencode(base64_encode(hash_hmac("sha1",$stringToSign,$accessKeysecret."&",true)));
$queryStringWithSign = "Signature=". $signature ."&". $query;
$tokenUrl = "http://nls-meta.cn-shanghai.aliyuncs.com/?".$queryStringWithSign;
$token_string = $this->urlOpen($tokenUrl);
$token_object = json_decode($token_string,true);
$token = $token_object['Token']['Id'];
return $token;
}/*
* author:kai
*/
public function urlOpen($url,$data = null,$header =null){
$ch =curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
//curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
//curl_setopt($ch,CURLOPT_USERAGENT,$url,$ua);
if($data){
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
}
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_REFERER,$url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
$content = curl_exec($ch);
$error = curl_error($ch);
if($error){
die($error);
}
curl_close($ch);
return $content;
}


