php curl调用美团云API

版权声明:本文为博主原创文章,转载请注明文章来源,尊重知识,分享别人标识作者是一种美德 https://blog.csdn.net/u010757785/article/details/76645462

前几天调用美团云的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

扫描二维码关注公众号,回复: 4290186 查看本文章

4:对上面的拼接内容以以HmacSHA256 算法进行Hash后,进行base64编码

以为这里成功了还有组装curl呢,curl组装不好后台获取的内容可能只有header部分没有穿的参数。




猜你喜欢

转载自blog.csdn.net/u010757785/article/details/76645462