1. 程式人生 > >php curl呼叫美團雲API

php curl呼叫美團雲API

前幾天呼叫美團雲的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部分沒有穿的引數。