最近我开发的CRM项目正好在做营销短信的功能,这个功能需要对接腾讯云的第三方短信接口。众所周知,对接接口最难的就是鉴权部分了,毕竟为了安全嘛。云API鉴权一直是比较晦涩难懂的,建议大家还是去github下载安装SDK,可以免去鉴权这一步,非常方便。

但是既然发这篇文章,我最终还是选择了使用API的方式。下面简单说一下我在鉴权遇到的坑:

{"Response":{"Error":{"Code":"AuthFailure.SignatureFailure","Message":"The provided credentials could not be validated. Please check your signature is correct."},"RequestId":"1c56be9c-844f-43bf-ac2a-587be2b5aa7a"}}

调用接口的时候一直在报这个鉴权错误,使用腾讯云提供的工具 API Explorer 测试发现程序可以运行,参数也都是对的。

下面是腾讯提供的源码:

<?php
$secretId = "AKIDz8krbsJ5yKBZQpn74WFkmLPx******";
$secretKey = "Gu5t9xGARNpq86cd98joQY******";
$host = "cvm.tencentcloudapi.com";
$service = "cvm";
$version = "2017-03-12";
$action = "DescribeInstances";
$region = "ap-guangzhou";
// $timestamp = time();
$timestamp = 1551113065;
$algorithm = "TC3-HMAC-SHA256";// step 1: build canonical request string
$httpRequestMethod = "POST";
$canonicalUri = "/";
$canonicalQueryString = "";
$canonicalHeaders = "content-type:application/json; charset=utf-8\n"."host:".$host."\n";
$signedHeaders = "content-type;host";
$payload = '{"Limit": 1, "Filters": [{"Values": ["\u672a\u547d\u540d"], "Name": "instance-name"}]}';
$hashedRequestPayload = hash("SHA256", $payload);
$canonicalRequest = $httpRequestMethod."\n".$canonicalUri."\n".$canonicalQueryString."\n".$canonicalHeaders."\n".$signedHeaders."\n".$hashedRequestPayload;
echo $canonicalRequest.PHP_EOL;// step 2: build string to sign
$date = gmdate("Y-m-d", $timestamp);
$credentialScope = $date."/".$service."/tc3_request";
$hashedCanonicalRequest = hash("SHA256", $canonicalRequest);
$stringToSign = $algorithm."\n".$timestamp."\n".$credentialScope."\n".$hashedCanonicalRequest;
echo $stringToSign.PHP_EOL;// step 3: sign string
$secretDate = hash_hmac("SHA256", $date, "TC3".$secretKey, true);
$secretService = hash_hmac("SHA256", $service, $secretDate, true);
$secretSigning = hash_hmac("SHA256", "tc3_request", $secretService, true);
$signature = hash_hmac("SHA256", $stringToSign, $secretSigning);
echo $signature.PHP_EOL;// step 4: build authorization
$authorization = $algorithm." Credential=".$secretId."/".$credentialScope.", SignedHeaders=content-type;host, Signature=".$signature;
echo $authorization.PHP_EOL;$curl = "curl -X POST https://".$host.' -H "Authorization: '.$authorization.'"'.' -H "Content-Type: application/json; charset=utf-8"'.' -H "Host: '.$host.'"'.' -H "X-TC-Action: '.$action.'"'.' -H "X-TC-Timestamp: '.$timestamp.'"'.' -H "X-TC-Version: '.$version.'"'.' -H "X-TC-Region: '.$region.'"'." -d '".$payload."'";
echo $curl.PHP_EOL;

解决方法:

1、$payload参数是一个字符串,字符串里的内容是你传的参数json_encode后的内容(很多同学这个参数直接传了json格式,应该是字符串!)。

2、$canonicalHeaders参数里面如果有设置编码的参数charset=utf-8的话,那么请求头header中也必须要有这个参数并且空格也要保持一致,上面有空格,下面也要有,反之就会鉴权失败。

3、希望大家都注意一下细节,找问题的过程真的很曲折。

腾讯云API接口鉴权v3 鉴权失败问题 AuthFailure.SignatureFailure相关推荐

  1. python调用(百度云、腾讯云)API接口表格识别并保存为excel

    Python表格识别 图像识别具有较高的商业价值,本节主要通过python调用(百度云.腾讯云)API接口表格识别并保存为excel分析表格识别的能力: 提示:需分别申请密钥,在相应位置添加自己密钥即 ...

  2. Python3 使用腾讯云 API 接口实现音频文件转写(支持本地音频或者 url 音频)

    本文参考链接: https://blog.csdn.net/wangliuqi123/article/details/80527417 https://blog.csdn.net/wangliuqi1 ...

  3. 调用腾讯云OCR接口识别身份证和户口本

    一.添加项目pom文件依赖 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson ...

  4. Java腾讯会议api接口,创建会议、查询会议,取消会议调用实例,以及踩过的坑

    最近公司需要做一个腾讯会议API的对接,经过查看官方文档和腾讯相关技术人员周旋~~以及不断踩坑,终于在我的不懈努力下,成功将API接口调通了 腾讯会议API接口文档:https://cloud.ten ...

  5. 用Python调用华为云API接口发短信

    [摘要] 用Python调用华为云API接口实现发短信,当然能给调用发短信接口前提条件是通过企业实名认证,而且有一个通过审核的短信签名,话不多说,showcode #!/usr/bin/python3 ...

  6. 小程序智能识别快递收货地址,自动解析出省市区等信息,让地址标准化格式的实现(使用腾讯云api)

    源码直接使用,下载地址 1,下载源码后需要改两个editaddress.js中的参数即可使用. //云市场分配的密钥Id let appKey = "你自己的secretId"; ...

  7. 腾讯云API与国家气象局API获取实时天气

    腾讯云API获取天气(收费) package com.vxdata.cases.common.utils;import com.alibaba.fastjson.JSONObject; import ...

  8. 【文字识别】腾讯云API:提取表格数据并生成Excel文件

    一.使用工具及python包介绍 腾讯云API 国内大型互联网公司都提供云服务,如阿里.百度.腾讯等.本文选择腾讯云服务,是因为提供的API说明比较详细,看一遍就能用.更良心的是,提供了在线测试的功能 ...

  9. 喜报:恭喜腾讯云 API 网关获得国内首张可信云认证证书

    2020 年 10 月 21 日,"2020 云原生产业大会"在北京召开.本届大会由中国信息通信研究院主办,中国通信标准化协会云计算标准和开源推进委员会承办.会上发布了云原生领域评 ...

最新文章

  1. nil slice 和 空 slice
  2. 诗与远方:无题(三十四)- 曾经写给妹子的一首诗
  3. 华为nova7se乐活版支持鸿蒙,华为nova7se乐活版和畅享20se哪个好 参数区别对比评测...
  4. php代码 编码转换,php字符编码转换代码
  5. 使用python发邮箱遇到的问题
  6. 墨尔本大学 SWEN20003 Project2 课业解析
  7. 考拉验数(自动化验数)设计方案和实现
  8. python牛顿法求方程的根_python计算方程式根的方法 如何用python计算三元方程
  9. 查看计算机ip地址配置信息的命令是,查看电脑配置指令大全
  10. android获取ro._Android 简单的设备信息获取
  11. 这100 个网络基础知识 看完成半个网络高手
  12. 在职场中如何保持新鲜感
  13. CF1110E Magic Stones
  14. 上海市历年平均工资及社保基数
  15. Gated Mechanism for Attention Based Multi Modal Sentiment Analysis 阅读笔记
  16. CENT OS 8 Stream 安装部署 Zabbix 6.0 LTS
  17. Love Story Remix(I Love You)
  18. 人工神经网络的拓扑结构,三层神经网络结构图
  19. 与人交往的基本礼仪!
  20. GBase 8c支持Foreign Data Wrappers

热门文章

  1. 通达信破底翻选股公式,用缠论底分型进行优化
  2. C语言文件操作函数总结——超详细
  3. 安卓开发VideoView播放本地视频失败解决办法
  4. 腾讯技术分享:微信小程序音视频与WebRTC互通的技术思路和实践
  5. 用Python绘制折线图(上)
  6. Parker机电产品(运动控制/伺服电机/直线电机)在FPD行业应用
  7. 智商黑洞(门萨Mensa测试)3
  8. Markdown小问题【日常更新】
  9. 南昌大学航天杯第二届程序设计竞赛校赛网络同步赛 部分题解
  10. SECOND: Sparsely Embedded Convolutional Detection