簡單說下 開發中遇到的坑。這裏用到的是 阿里雲的視頻直播服務,其實坑仍是挺多的。
阿里雲手冊裏寫了的我就再也不贅述。直接上代碼(基於tp3.2)json
驗籤服務器
/** * 模擬GET */ public function httpsGet( $url, $post='',$json=true ) { date_default_timezone_set("UTC"); $Timestamp = date('c'); $Timestamp = explode('+',$Timestamp); if( is_array( $post ) ){ $public = [ 'Version'=>'2016-11-01', 'Format'=> 'json', 'AccessKeyId'=>$this->AccessKeyId, 'SignatureMethod'=>'HMAC-SHA1', 'Timestamp'=>$Timestamp[0].'Z', 'SignatureVersion'=>'1.0', 'SignatureNonce'=>$this->uuid(), ]; $post = array_merge($public,$post); $Signature = self::getSignature($post,$this->AccessKeySecret); foreach( $post as $key => $value ) { $param .= $key . '=' . $value . '&'; } $param .='Signature='.$Signature; $urls = $url . '?' .$param; }else{ $urls = $url; } //初始化 $curl = curl_init(); //設置抓取的url curl_setopt( $curl, CURLOPT_URL, $urls ); //設置獲取的信息以文件流的形式返回,而不是直接輸出。 curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, false ); curl_setopt( $curl, CURLOPT_SSL_VERIFYHOST, false ); //執行命令 $result = curl_exec($curl); //獲取服務器響應狀態 $httpCode = curl_getinfo( $curl , CURLINFO_HTTP_CODE ); //關閉URL請求 curl_close($curl); $result = json_decode( $result , true ); return $result; } public function getSignature($parameters, $access_key_secret){ ksort($parameters); $StringToSign = 'GET&'.urlencode('/').'&'; $q_str = ''; foreach($parameters as $key=>$kval){ $q_str .= urlencode($key).'='.urlencode($kval).'&'; } $q_str = substr($q_str,0,-1); $StringToSign .= urlencode($q_str); $ok_url = urlencode(base64_encode(hash_hmac("sha1",$StringToSign,$access_key_secret.'&',true))); return $ok_url; } public function uuid($prefix = '') { $chars = md5(uniqid(mt_rand(), true)); $uuid = substr($chars,0,8) . '-'; $uuid .= substr($chars,8,4) . '-'; $uuid .= substr($chars,12,4) . '-'; $uuid .= substr($chars,16,4) . '-'; $uuid .= substr($chars,20,12); return $prefix . $uuid; }
獲取驗籤的方法是個坑。我在阿里雲下工單問出來demo的都是錯的-.-
好在後來本身弄出來了 curl
httpget 裏面的 Timestamp參數也是個坑demo裏面是拼接出來的(最開始覺得函數能直接獲取)。
最後 我在本身開發的時候 百度了不少,可是幫助並不 但願這些代碼能幫到正在準備研究直播的你。。。函數