摘要:
开头先说明!不要说去下载官方的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; }