php curl呼叫美團雲API
阿新 • • 發佈:2018-11-29
前幾天呼叫美團雲的api發現api寫的你要仔細摳字眼才能解決,api地址:https://www.mtyun.com/doc/api/common/common/index
下面直接貼程式碼:
$key = ''; $secret = ''; $time=str_replace('+','.',date(DATE_ISO8601))."Z"; $data=array('Format'=>'json','AWSAccessKeyId'=>$key,'Action'=>'DescribeInstanceTypes','SignatureVersion'=>2,'Timestamp'=>$time,'SignatureMethod'=>HmacSHA256); ksort($data);//引數名稱的字典順序排序(重小到大) $strdata=http_build_query($data);//x-www-form-urlencoded資料組裝 $hashdata="POST\nmosapi.meituan.com\n/mcs/v1\n".$strdata;//組裝簽名內容 $sign= base64_encode( hash_hmac('sha256', $hashdata, $secret,true));//獲取簽名以HmacSHA256 演算法進行Hash後,進行base64編碼 // $data['Timestamp']=urldecode($data['Timestamp']); $data['Signature']=$sign; $posturl="https://mosapi.meituan.com/mcs/v1";//.$strdata."&Signature=".$sign; $postData = http_build_query($data);//x-www-form-urlencoded資料組裝 $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $posturl); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對認證證書來源的檢查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // 從證書中檢查SSL加密演算法是否存在 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 獲取的資訊以檔案流的形式返回 curl_setopt($curl, CURLOPT_POST, 1); // 傳送一個常規的Post請求 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);//允許重定向吧 curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));//x-www-form-urlencoded編碼 curl_setopt($curl, CURLOPT_POSTFIELDS, $postData); // Post提交的資料包 //curl_setopt($curl, CURLOPT_HEADER, 1);//返回請求head頭 //curl_setopt($curl, CURLOPT_NOBODY, 1);//不返回body部分內容 //curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設定超時限制防止死迴圈 $data = curl_exec($curl); curl_close($curl); print_r($data);
注意api幾個位置
1:(\n)的位置
2:請求引數名稱的字典順序排序
3:並以x-www-form-urlencoded編碼
按官方的完整的拼接的內容為
POST mosapi.meituan.com /mcs/v1 AWSAccessKeyId=8b5ad48388a347c185b6b7b0ba9e6225&Action=GetBalance&Format=json&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2016-11-14T03%3A10%3A55.000Z
這給的只是python裡面,php的拼接式POST\nmosapi.meituan.com\n/mcs/v1\nAWSAccessKeyId=8b5ad48388a347c185b6b7b0ba9e6225&Action=GetBalance&Format=json&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2016-11-14T03%3A10%3A55.000Z
4:對上面的拼接內容以以HmacSHA256 演算法進行Hash後,進行base64編碼
以為這裡成功了還有組裝curl呢,curl組裝不好後臺獲取的內容可能只有header部分沒有穿的引數。