php 计算签名,百度云 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;

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值