当前位置: 首页 > backend >正文

腾讯云V3签名

想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。

之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。
可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多,没有那么多模棱两可的参数,也可能是我的错觉。当前现在腾讯云有了各种语言的代码示例,直接抄即可。

https://cloud.tencent.com/document/api/551/30636

踩过的坑

  1. 在写header的时候,将Action等头部名直接写入,实际上,需要在前面加上 “X-TC-”
  2. 根据文档步骤1 拼接规范请求串 时,漏掉空行
POST
/content-type:application/json; charset=utf-8
host:cvm.tencentcloudapi.com
x-tc-action:describeinstancescontent-type;host;x-tc-action
35e9c5b0e3ae67532d3c9f17ead6c90222632e5b1ff7f6e89887f1398934f064

上面代码中有两个空行,不可忽略。
3. 步骤2中,获取当前日期,需要 与UTC 标准时间日期一致。
4. 步骤3中,计算签名 文档示例与作者使用语言(PHP)的加密函数不同,把data和key颠倒了。

代码

	function sign($data , $headers){$this->date = gmdate("Y-m-d" , TIMESTAMP);if(is_array($data)){$data = json_encode($data);}$canonicalHeaders = '';$signedHeaders = '';foreach ($headers as $k => $v){$canonicalHeaders .= $k . ":" . $v . "\n";$signedHeaders .= $k . ";";}$canonicalHeaders = strtolower($canonicalHeaders);$signedHeaders = strtolower(rtrim($signedHeaders , ";"));$hashedRequestPayload = hash("SHA256" , $data);// 1$canonicalRequest = "POST\n" .      //请求方法"/\n" .                         //URI 参数,API 3.0 固定为正斜杠(/)"\n" .                          //URL 中的查询字符串"$canonicalHeaders\n" .         //参与签名的头部信息"$signedHeaders\n" .            //哪些头部参与了签名"$hashedRequestPayload";;       // 请求正文做 SHA256 哈希echo $canonicalRequest;echo "<hr>";$hashCanonicalRequest = strtolower(bin2hex(hash('sha256' , $canonicalRequest , true)));// 2$CredentialScope = "{$this->date}/tmt/tc3_request";$secretSigning = ['TC3-HMAC-SHA256' ,	//签名算法$this->time ,		//请求时间戳$CredentialScope ,	//凭证范围,格式为 Date/service/tc3_request$hashCanonicalRequest ,	//步骤1拼接所得的字符串];$secretSigning = implode("\n" , $secretSigning);echo $secretSigning;echo "<hr>";//3 计算签名$secretDate = hash_hmac('sha256' , $this->date , "TC3$this->SecretKey" , true);$SecretService = hash_hmac('sha256' , "tmt" , $secretDate , true);$SecretSigning = hash_hmac('sha256' , "tc3_request" , $SecretService , true);$Signature = bin2hex(hash_hmac('sha256' , $secretSigning , $SecretSigning , true)); // 返回十六进制字符串echo $Signature;echo "<hr>";//4 拼接 Authorization$Authorization = "TC3-HMAC-SHA256 "."Credential={$this->SecretId}/$CredentialScope, "."SignedHeaders=$signedHeaders, "."Signature=$Signature";echo $Authorization . PHP_EOL;echo "<hr>";return $Authorization;}
http://www.xdnf.cn/news/12117.html

相关文章:

  • php apache构建 Web 服务器
  • 【Rust宏编程】Rust有关宏编程底层原理解析与应用实战
  • 【Linux】POSIX信号量
  • uniapp运行在微信开发者工具中流程
  • 佳易王钟表手表维修养护管理系统:高效便捷的维修管理解决方案
  • 使用cephadm离线部署reef 18版并配置对接openstack
  • 传统足浴行业数字化转型:线上预约平台的技术架构与商业逻辑
  • 今日行情明日机会——20250604
  • FTP 和 SFTP 介绍及 C/C++ 实现分析
  • 如何流畅播放体育电竞赛事?
  • Web开发主流前后端框架总结
  • Java 进程大对象分析与优化指南
  • Nginx 安全设置配置
  • leetcode 455. Assign Cookies和2410. Maximum Matching of Players With Trainers
  • 双栈共享一个栈空间
  • 解决docker运行zentao 报错:ln: failed to create symbolic link ‘/opt/zbox/tmp/mysq
  • sifli 52 反馈standby待机rc10k 15秒校准起来后,底电流会变大
  • 【openEuler】openEuler通过route-eth0配置网卡启用后创建一条特定路由表
  • 【知识点】第5章:函数和代码复用
  • 栈的应用:表达式求值
  • AIGC 基础篇 高等数学篇 03 中值定理与导数应用
  • 系统巡检常见工作
  • 标准IO及相关函数介绍
  • 中电金信:从智能应用到全栈AI,大模型如何重构金融业务价值链?
  • [Java 基础]面向对象-继承
  • QML技术优势
  • GuessNumber
  • CET6 仔细阅读 24年12月第三套-C2 美的定义这一块
  • 【opnecv】检测桌子上多余的物品
  • 《复制粘贴的奇迹:小明的原型工厂》