百度云 php api接口调用 签名计算

本文介绍百度智能云 计算签名 公共头 调用api接口调用:

post请求示例

require "auth.php"; //此文件是百度云官网提供实例,下方可直接粘贴使用。
// 第一步:生成认证字符串
        $ak = "xxx";  // AccessKeyId
        $sk = "xxx";  // SecretAccessKey

        $method = "POST";
        $host = "bcd.baidubce.com"; //实例域名注册接口 ,实际请看百度云
        $uri = "/v1/domain/registerByTemplate";  //实例域名注册接口,实际请看百度云

        $params = array();

        date_default_timezone_set('UTC');
        $timestamp = new \DateTime();
        $expirationInSeconds = 60;
        $authorization = generateAuthorization($ak, $sk, $method, $host, $uri, $params, $timestamp, $expirationInSeconds); //此方法是百度云官网提供实例,下方可直接粘贴使用。
			
        // 第二步:构造HTTP请求的header、body等信息
        $url = "http://{$host}{$uri}";

        $timeStr = $timestamp->format("Y-m-d\TH:i:s\Z");
        $head = array(
            "Content-Type: application/json",
            "Authorization:{$authorization}",
            "x-bce-date:{$timeStr}",
        );
       $body=[
           "domain" =>"adasddfds.com",	// DomainName
           'years'  =>1,
           "privacy" =>false,
           'templateId'=>'xxx',
           'dns'=>[ "ns1.bdydns.cn", "ns2.bdydns.cn" ]
       ];

        $bodyStr = json_encode($body);

        // 第三步:发送HTTP请求,并输出响应信息。
        $curlp = curl_init();
        //curl_setopt($curlp, CURLOPT_POST, 1);
        curl_setopt($curlp, CURLOPT_URL, $url);
        curl_setopt($curlp, CURLOPT_HTTPHEADER, $head);
        curl_setopt($curlp, CURLOPT_CUSTOMREQUEST, $method);
        curl_setopt($curlp, CURLOPT_POSTFIELDS, $bodyStr);
        curl_setopt($curlp, CURLINFO_HEADER_OUT, 1);
        curl_setopt($curlp, CURLOPT_RETURNTRANSFER, 1);
        $response = curl_exec($curlp);
        $request = curl_getinfo($curlp, CURLINFO_HEADER_OUT);
        $status = curl_getinfo($curlp, CURLINFO_HTTP_CODE);
        curl_close($curlp);
        print("request: {$request}\n");
        print("request body: {$bodyStr}\n");
        print("status: {$status}\n");
        print("response: {$response}\n");

get请求示例

require "auth.php";//此文件是百度云官网提供实例,下方可直接粘贴使用。
// 第一步:生成认证字符串
$ak = "xxx";  // AccessKeyId
$sk = "xxx";  // SecretAccessKey

$method = "GET";
$host = "bcd.baidubce.com";  //实例域名查询接口,实际请看百度云
$uri = "/v1/domain/detail";  //实例域名查询接口,实际请看百度云

$params = array(
	"domain" => "abcsss.com"	// DomainName
); 

date_default_timezone_set('UTC');
$timestamp = new \DateTime();
$expirationInSeconds = 60;
$authorization = generateAuthorization($ak, $sk, $method, $host, $uri, $params, $timestamp, $expirationInSeconds);//此方法是百度云官网提供实例,下方可直接粘贴使用。

// 第二步:构造HTTP请求的header、body等信息
$url = "http://{$host}{$uri}?domain={$params['domain']}";
print_r($url."\n");
$timeStr = $timestamp->format("Y-m-d\TH:i:s\Z");
$head =  array(
    "Content-Type: application/json",
    "Authorization:{$authorization}",
    "x-bce-date:{$timeStr}",
);

$body = array();

$bodyStr = json_encode($body);


// 第三步:发送HTTP请求,并输出响应信息。
$curlp = curl_init();
//curl_setopt($curlp, CURLOPT_POST, 1);
curl_setopt($curlp, CURLOPT_URL, $url);
curl_setopt($curlp, CURLOPT_HTTPHEADER, $head);
curl_setopt($curlp, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($curlp, CURLOPT_POSTFIELDS, $bodyStr);
curl_setopt($curlp, CURLINFO_HEADER_OUT, 1);
curl_setopt($curlp, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($curlp);
$request = curl_getinfo($curlp, CURLINFO_HEADER_OUT);
$status = curl_getinfo($curlp, CURLINFO_HTTP_CODE);
curl_close($curlp);
print("request: {$request}\n");
print("request body: {$bodyStr}\n");
print("status: {$status}\n");
print("response: {$response}\n");;

auth.php 文件

 $v) {
            //跳过Authorization字段
            if (strcasecmp('Authorization', $k) == 0) {
                continue;
            }
            if (!isset($k)) {
                throw new \InvalidArgumentException(
                    "parameter key should not be null"
                    );
            }
            if (isset($v)) {
                //对于有值的,编码后放在=号两边
                $parameterStrings[] = HttpUtil::urlEncode($k)
                . '=' . HttpUtil::urlEncode((string) $v);
            } else {
                //对于没有值的,只将key编码后放在=号的左边,右边留空
                $parameterStrings[] = HttpUtil::urlEncode($k) . '=';
            }
        }
        //按照字典序排序
        sort($parameterStrings);
        //使用'&'符号连接它们
        return implode('&', $parameterStrings);
    }
    //生成标准化uri
    public static function getCanonicalURIPath($path)
    {
        //空路径设置为'/'
        if (empty($path)) {
            return '/';
        } else {
            //所有的uri必须以'/'开头
            if ($path[0] == '/') {
                return HttpUtil::urlEncodeExceptSlash($path);
            } else {
                return '/' . HttpUtil::urlEncodeExceptSlash($path);
            }
        }
    }
    //生成标准化http请求头串
    public static function getCanonicalHeaders($headers)
    {
        //如果没有headers,则返回空串
        if (count($headers) == 0) {
            return '';
        }
        $headerStrings = array();
        foreach ($headers as $k => $v) {
            //跳过key为null的
            if ($k === null) {
                continue;
            }
            //如果value为null,则赋值为空串
            if ($v === null) {
                $v = '';
            }
            //trim后再encode,之后使用':'号连接起来
            $headerStrings[] = HttpUtil::urlEncode(strtolower(trim($k))) . ':' . HttpUtil::urlEncode(trim($v));
        }
        //字典序排序
        sort($headerStrings);
        //用'\n'把它们连接起来
        return implode("\n", $headerStrings);
    }
}
HttpUtil::__init();
function generateAuthorization($ak, $sk, $method, $host, $uri, $params, $timestamp, $expirationInSeconds) {
    $timeStr = $timestamp->format("Y-m-d\TH:i:s\Z");
    $authStringPrefix = "bce-auth-v1/{$ak}/{$timeStr}/{$expirationInSeconds}";
    $signingKey = hash_hmac('SHA256', $authStringPrefix, $sk);
    $canonicalHeader1 = "host;x-bce-date";
    $canonicalHeader2 = "host:{$host}\n" . "x-bce-date:" . urlencode($timeStr);
    $httpUtil = new HttpUtil();
    $canonicalString = $httpUtil->getCanonicalQueryString($params);
    $canonicalUri = $httpUtil->getCanonicalURIPath($uri);
    $method = strtoupper($method);
    $canonicalRequest = "{$method}\n{$canonicalUri}\n{$canonicalString}\n{$canonicalHeader2}";
    $signature = hash_hmac('SHA256', $canonicalRequest, $signingKey);
    $authorization = "bce-auth-v1/{$ak}/{$timeStr}/{$expirationInSeconds}/{$canonicalHeader1}/{$signature}";
    return $authorization;
}
?>

你可能感兴趣的:(百度云,sign)