腾讯语音合成V3鉴权失败

最近有个需求需要调用腾讯语音合成Api。使用的V3鉴权,一直提示如下错误

{"Response":{"Error":{"Code":"AuthFailure.SignatureFailure","Message":"The provided credentials could not be validated. Please check your signature is correct."},"RequestId":"60650a2f-e2a3-498b-8af2-fb334a27610a"}}

和官网的ApiExplorer中的生成签名一步步核对,发现和接口文档中的demo的最大区别是接口demo 中编码方式,ApiExplorer中没有,看了一些帖子说是这里上下要保持一致。因为要排查报错原因,这里改成和ApiExplorer中一样。具体代码如下:

private static Dictionary<String, String> BuildHeaders(string secretid,
        string secretkey, string service, string endpoint, string region,
        string action, string version, DateTime date, string requestPayload)
        {
            string datestr = date.ToString("yyyy-MM-dd");
            DateTime startTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
            long requestTimestamp = (long)Math.Round((date - startTime).TotalMilliseconds, MidpointRounding.AwayFromZero) / 1000;//请求时间戳
            // ************* 步骤 1:拼接规范请求串 *************
            string algorithm = "TC3-HMAC-SHA256";//签名算法
            string httpRequestMethod = "POST";
            string canonicalUri = "/";//Api3.0固定为正斜杠(/)
            string canonicalQueryString = "";//对于post请求,固定为字符串""
            string contentType = "application/json";
         

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Python中使用腾讯语音合成,你可以使用腾讯云提供的语音合成API。首先,你需要在腾讯云官网注册并创建一个语音合成服务实例,并获取到你的SecretId、SecretKey以及所在地域信息。 然后,你可以使用Python的requests库发送POST请求来调用腾讯云的语音合成API。 下面是一个简单的示例代码,你可以参考使用: ```python import requests import hashlib import time import random import string # 设置请求地址 url = "https://tts.tencentcloudapi.com/" # 设置公共请求参数 secret_id = "YOUR_SECRET_ID" secret_key = "YOUR_SECRET_KEY" region = "ap-guangzhou" # 设置所在地域信息,这里以广州为例 # 设置私有请求参数 params = { "Action": "TextToStreamAudio", "Version": "2019-08-23", "Text": "你好,欢迎使用腾讯语音合成。", "ModelType": 1, "VoiceType": 0, "SampleRate": 16000 } # 生成签名 timestamp = str(int(time.time())) nonce = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(10)) params["Timestamp"] = timestamp params["Nonce"] = nonce sorted_params = sorted(params.items(), key=lambda x: x[0], reverse=False) sign_str = "&".join([f"{key}={value}" for key, value in sorted_params]) sign_str = f"POSTtts.tencentcloudapi.com/?{sign_str}" sign = hashlib.sha1(sign_str.encode("utf-8")).hexdigest() # 设置请求头部信息 headers = { "Host": "tts.tencentcloudapi.com", "Content-Type": "application/x-www-form-urlencoded", "Authorization": f"TC3-HMAC-SHA256 Credential={secret_id}/{timestamp}/{region}/tts/tc3_request, " f"SignedHeaders=content-type;host, Signature={sign}" } # 发送POST请求 response = requests.post(url, headers=headers, data=sorted_params) # 获取响应结果 result = response.json() # 输出语音合成结果 audio_content = result["Audio"] with open("output.mp3", "wb") as f: f.write(audio_content) ``` 以上代码中的`YOUR_SECRET_ID`和`YOUR_SECRET_KEY`需要替换为你在腾讯云官网申请到的SecretId和SecretKey。另外,你可以修改`params`字典中的参数来设置合成的文本内容、模型类型、语音类型和采样率等。 需要注意的是,腾讯云的语音合成服务是一个付费服务,你需要购买相应的套餐来使用。同时,你还需要了解并遵守腾讯云的API使用规则及限制。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值