展开

关键词

首页关键词11.11人像变换哪里买

11.11人像变换哪里买

相关内容

人像变换

人像变换

人像变换,基于腾讯优图领先的人脸识别算法,提供人脸年龄变化、人脸性别转换等能力,用户上传照片即可实现男女性别切换、人脸变老/变年轻等效果。适用于社交娱乐、广告营销、互动传播等场景。
  • 人像变换

    产品概述,产品优势,简介,请求结构,公共参数,签名方法 v3,签名方法,返回结果,人脸性别转换,人脸年龄变化,数据结构,错误码,API 概览,更新历史,产品动态,计费概述,免费额度,购买方式,欠费说明,人像动漫化,查询人像渐变任务,人像渐变,撤销人像渐变任务,服务条款,服务等级协议,联系我们,产品简介,操作指南,常见问题,词汇表,产品概述,产品优势,API 文档,简介,调用方式,请求结构,公共参数,签名方法 v3,签名方法,返回结果,人脸变换相关接口,人脸性别转换,人脸年龄变化,数据结构,错误码,API 概览,更新历史,人像变换相关接口,产品动态,购买指南,计费概述,免费额度,购买方式,欠费说明,人像动漫化相关接口,人像动漫化,查询人像渐变任务,人像渐变,撤销人像渐变任务,人脸性别转换相关接口,人脸年龄变化相关接口,人像渐变相关接口,相关协议,服务条款,服务等级协议,联系我们
    来自:
  • 操作指南

    注册账号在使用人像变换服务前,您需要先注册腾讯云账号。如果没有账号,请参考 账号注册教程。开通服务登录 人像变换控制台,勾选同意《腾讯云服务协议》后,单击即可开通服务。通过 APISDK命令行来使用服务我们为您提供了丰富多样的 API 接口,您可以查看 人像变换 API 文档。建议您通过 API 3.0 Explorer 生成服务端 SDK 代码,结合腾讯云的已编写好的开发工具集(SDK),可以快速调用人像变换服务。调用成功当请求返回结果图片的 Base64 信息,表示接口调用成功,您可以查看具体的人像变换相关接口的效果。查看调用您可以登录 人像变换控制台,查看各服务的具体调用情况。
    来自:
  • 广告
    关闭

    云+社区杂货摊第四季上线啦~

    攒云+值,TOP 100 必得云+社区定制视频礼盒

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到
  • 常见问题

    接入和使用如何快速体验人像特效的各功能?打开 API 3.0 Explorer,在页面左侧选择相应的接口,再填写相应参数,即可在右侧查看调用结果。API3.0 与 SDK 都支持哪些语言?人像变换 API 调用接口支持带 orientation 的图片吗?不支持带 orientation 的图片,且必须传入正立的图片,可以使用 工具 判断图片是否带了 orientation。计费和账单人像变换服务如何收费?人像变换支持按调用次数进行计费,用多少扣多少,如需了解价格更多详情,请参考 计费概述 文档。
    来自:
  • 词汇表

    人脸性别变换人脸性别变换指基于人脸编辑和生成算法,对人脸面部特征信息进行性别转换,男变女可具备美颜、淡妆、加刘海和长发效果;女变男可具备加胡须,变短发效果。
    来自:
  • 产品概述

    腾讯云神图·人像变换(Face-transformation)基于腾讯优图领先的人脸识别算法,提供人脸年龄变化、人脸性别转换、人像动漫化、人像渐变等能力,上传人脸照片即可实现男女性别转换、人脸变老变年轻、真人变动漫脸、人像渐变等效果。人像动漫化基于用户上传的一张带人脸信息的图片,使用对抗生成网络、人脸检测、人像分割等技术实现图片风格迁移,生成个性化的二次元动漫形象,适用于个性头像、趣味营销、相册应用等场景。人像渐变基于用户输入的2-5张人脸照片,生成一段人像渐变视频或 GIF 图,支持修改图片播放速度、视频每秒传输帧数。适用于短视频、活动 H5、表情包等场景,为静态图片增加更多趣味。
    来自:
  • 产品优势

    精准度高基于精细标注训练数据,实现的照片人脸90点定位,提供追踪成功、失败检测机制,置信度高达99%。效果自然借助优图强大的人脸识别技术,保留更多本人面部特征,最终结果更加自然逼真。参数灵活支持通过 API 调整细节参数,使面部处理更精细贴切,支持根据业务实际使用反馈随时调整。毫秒级响应毫秒级响应处理速度,一键上传人脸照片仅需数百毫秒,支持精度和稳定度要求极高的实时人脸变化能力。安全可靠支持鉴黄、鉴政、鉴恐,对用户上传图片进行内容审核,全方位保障业务场景的安全性。
    来自:
  • 简介

    欢迎使用 人像变换 API 3.0 版本。全新的 API 接口文档更加规范和全面,统一的参数风格和公共错误码,统一的 SDKCLI 版本与 API 文档严格一致,给您带来简单快捷的使用体验。更多腾讯云 API 3.0 使用介绍请查看:快速入门产品简介腾讯云神图·人像变换(Face Transformation)基于腾讯优图领先的人脸识别算法,提供人脸年龄变化、人脸性别转换等能力,用户上传照片即可得到实现男女性别切换功能说明腾讯云人脸变换提供人脸性别变换、人脸年龄变化等服务,更多能力我们将陆续开放,敬请期待。
    来自:
  • 请求结构

    1. 服务地址API 支持就近地域接入,本产品就近地域接入域名为 ft.tencentcloudapi.com ,也支持指定地域域名访问,例如广州地域的域名为 ft.ap-guangzhou.tencentcloudapi.com 。推荐使用就近地域接入域名。根据调用接口时客户端所在位置,会自动解析到最近的某个具体地域的服务器。例如在广州发起请求,会自动解析到广州的服务器,效果和指定 ft.ap-guangzhou.tencentcloudapi.com 是一致的。注意:对时延敏感的业务,建议指定带地域的域名。注意:域名是 API 的接入点,并不代表产品或者接口实际提供服务的地域。产品支持的地域列表请在调用方式公共参数文档中查阅,接口支持的地域请在接口文档输入参数中查阅。目前支持的域名列表为: 接入地域域名 就近地域接入(推荐,只支持非金融区)ft.tencentcloudapi.com 华南地区(广州)ft.ap-guangzhou.tencentcloudapi.com 华东地区(上海)ft.ap-shanghai.tencentcloudapi.com 华北地区(北京)ft.ap-beijing.tencentcloudapi.com 西南地区(成都)ft.ap-chengdu.tencentcloudapi.com 西南地区(重庆)ft.ap-chongqing.tencentcloudapi.com 港澳台地区(中国香港)ft.ap-hongkong.tencentcloudapi.com 亚太东南(新加坡)ft.ap-singapore.tencentcloudapi.com 亚太东南(曼谷)ft.ap-bangkok.tencentcloudapi.com 亚太南部(孟买)ft.ap-mumbai.tencentcloudapi.com 亚太东北(首尔)ft.ap-seoul.tencentcloudapi.com 亚太东北(东京)ft.ap-tokyo.tencentcloudapi.com 美国东部(弗吉尼亚)ft.na-ashburn.tencentcloudapi.com 美国西部(硅谷)ft.na-siliconvalley.tencentcloudapi.com 北美地区(多伦多)ft.na-toronto.tencentcloudapi.com 欧洲地区(法兰克福)ft.eu-frankfurt.tencentcloudapi.com 欧洲地区(莫斯科)ft.eu-moscow.tencentcloudapi.com 2. 通信协议腾讯云 API 的所有接口均通过 HTTPS 进行通信,提供高安全性的通信通道。3. 请求方法支持的 HTTP 请求方法: POST(推荐)GET POST 请求支持的 Content-Type 类型: applicationjson(推荐),必须使用签名方法 v3(TC3-HMAC-SHA256)。applicationx-www-form-urlencoded,必须使用签名方法 v1(HmacSHA1 或 HmacSHA256)。multipartform-data(仅部分接口支持),必须使用签名方法 v3(TC3-HMAC-SHA256)。 GET 请求的请求包大小不得超过32KB。POST 请求使用签名方法 v1(HmacSHA1、HmacSHA256)时不得超过1MB。POST 请求使用签名方法 v3(TC3-HMAC-SHA256)时支持10MB。4. 字符编码均使用UTF-8编码。
    来自:
  • 公共参数

    公共参数是用于标识用户和接口签名的参数,如非必要,在每个接口单独的接口文档中不再对这些参数进行说明,但每次请求均需要携带这些参数,才能正常发起请求。公共参数的具体内容会因您使用的签名方法版本不同而有所差异。使用签名方法 v3 的公共参数签名方法 v3 (有时也称作 TC3-HMAC-SHA256)相比签名方法 v1 (有些文档可能会简称签名方法),更安全,支持更大的请求包,支持 POST JSON 格式,性能有一定提升,推荐使用该签名方法计算签名。完整介绍详见 文档。注意:接口文档中的示例由于目的是展示接口参数用法,简化起见,使用的是签名方法 v1 GET 请求,如果依旧想使用签名方法 v1 请参考下文章节。使用签名方法 v3 时,公共参数需要统一放到 HTTP Header 请求头部中,如下: 参数名称类型必选描述 X-TC-ActionString是操作的接口名称。取值参考接口文档中输入参数公共参数 Action 的说明。例如云服务器的查询实例列表接口,取值为 DescribeInstances。 X-TC-RegionString-地域参数,用来标识希望操作哪个地域的数据。接口接受的地域取值参考接口文档中输入参数公共参数 Region 的说明。注意:某些接口不需要传递该参数,接口文档中会对此特别说明,此时即使传递该参数也不会生效。 X-TC-TimestampInteger是当前 UNIX 时间戳,可记录发起 API 请求的时间。例如 1529223702。注意:如果与服务器时间相差超过5分钟,会引起签名过期错误。 X-TC-VersionString是操作的 API 的版本。取值参考接口文档中入参公共参数 Version 的说明。例如云服务器的版本 2017-03-12。 AuthorizationString是HTTP 标准身份认证头部字段,例如:TC3-HMAC-SHA256 Credential=AKIDEXAMPLEDateservicetc3_request, SignedHeaders=content-type;host, Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024 其中,- TC3-HMAC-SHA256:签名方法,目前固定取该值;- Credential:签名凭证,AKIDEXAMPLE 是 SecretId;Date 是 UTC 标准时间的日期,取值需要和公共参数 X-TC-Timestamp 换算的 UTC 标准时间日期一致;service 为产品名,通常为域名前缀,例如域名 cvm.tencentcloudapi.com 意味着产品名是 cvm。本产品取值为 ft;- SignedHeaders:参与签名计算的头部信息,content-type 和 host 为必选头部;- Signature:签名摘要,计算过程详见 文档。 X-TC-TokenString否临时证书所用的 Token ,需要结合临时密钥一起使用。临时密钥和 Token 需要到访问管理服务调用接口获取。长期密钥不需要 Token。 X-TC-LanguageString否指定接口返回的语言,仅部分接口支持此参数。取值:zh-CN,en-US。zh-CN 返回中文,en-US 返回英文。 假设用户想要查询广州地域的云服务器实例列表中的前十个,接口参数设置为偏移量 Offset=0,返回数量 Limit=10,则其请求结构按照请求 URL、请求头部、请求体示例如下:HTTP GET 请求结构示例:https:cvm.tencentcloudapi.com?Limit=10&Offset=0 Authorization: TC3-HMAC-SHA256 Credential=AKID********EXAMPLE2018-10-09cvmtc3_request, SignedHeaders=content-type;host, Signature=5da7a33f6993f0614b047e5df4582db9e9bf4672ba50567dba16c6ccf174c474Content-Type: applicationx-www-form-urlencodedHost: cvm.tencentcloudapi.comX-TC-Action: DescribeInstancesX-TC-Version: 2017-03-12X-TC-Timestamp: 1539084154X-TC-Region: ap-guangzhouHTTP POST (applicationjson) 请求结构示例:https:cvm.tencentcloudapi.com Authorization: TC3-HMAC-SHA256 Credential=AKID********EXAMPLE2018-05-30cvmtc3_request, SignedHeaders=content-type;host, Signature=582c400e06b5924a6f2b5d7d672d79c15b13162d9279b0855cfba6789a8edb4cContent-Type: applicationjsonHost: cvm.tencentcloudapi.comX-TC-Action: DescribeInstancesX-TC-Version: 2017-03-12X-TC-Timestamp: 1527672334X-TC-Region: ap-guangzhou {"Offset":0,"Limit":10}HTTP POST (multipartform-data)请求结构示例(仅特定的接口支持):https:cvm.tencentcloudapi.com Authorization: TC3-HMAC-SHA256 Credential=AKID********EXAMPLE2018-05-30cvmtc3_request, SignedHeaders=content-type;host, Signature=582c400e06b5924a6f2b5d7d672d79c15b13162d9279b0855cfba6789a8edb4cContent-Type: multipartform-data; boundary=58731222010402Host: cvm.tencentcloudapi.comX-TC-Action: DescribeInstancesX-TC-Version: 2017-03-12X-TC-Timestamp: 1527672334X-TC-Region: ap-guangzhou --58731222010402Content-Disposition: form-data; name="Offset" 0--58731222010402Content-Disposition: form-data; name="Limit" 10--58731222010402--使用签名方法 v1 的公共参数使用签名方法 v1 (有时会称作 HmacSHA256 和 HmacSHA1),公共参数需要统一放到请求串中,完整介绍详见文档 参数名称类型必选描述 ActionString是操作的接口名称。取值参考接口文档中输入参数公共参数 Action 的说明。例如云服务器的查询实例列表接口,取值为 DescribeInstances。 RegionString-地域参数,用来标识希望操作哪个地域的数据。接口接受的地域取值参考接口文档中输入参数公共参数 Region 的说明。注意:某些接口不需要传递该参数,接口文档中会对此特别说明,此时即使传递该参数也不会生效。 TimestampInteger是当前 UNIX 时间戳,可记录发起 API 请求的时间。例如1529223702,如果与当前时间相差过大,会引起签名过期错误。 NonceInteger是随机正整数,与 Timestamp 联合起来,用于防止重放攻击。 SecretIdString是在 云API密钥 上申请的标识身份的 SecretId,一个 SecretId 对应唯一的 SecretKey ,而 SecretKey 会用来生成请求签名 Signature。 SignatureString是请求签名,用来验证此次请求的合法性,需要用户根据实际的输入参数计算得出。具体计算方法参见 文档。 VersionString是操作的 API 的版本。取值参考接口文档中入参公共参数 Version 的说明。例如云服务器的版本 2017-03-12。 SignatureMethodString否签名方式,目前支持 HmacSHA256 和 HmacSHA1。只有指定此参数为 HmacSHA256 时,才使用 HmacSHA256 算法验证签名,其他情况均使用 HmacSHA1 验证签名。 TokenString否临时证书所用的 Token ,需要结合临时密钥一起使用。临时密钥和 Token 需要到访问管理服务调用接口获取。长期密钥不需要 Token 。 LanguageString否指定接口返回的语言,仅部分接口支持此参数。取值:zh-CN,en-US。zh-CN 返回中文,en-US 返回英文。 假设用户想要查询广州地域的云服务器实例列表,其请求结构按照请求 URL、请求头部、请求体示例如下:HTTP GET 请求结构示例:https:cvm.tencentcloudapi.com?Action=DescribeInstances&Version=2017-03-12&SignatureMethod=HmacSHA256&Timestamp=1527672334&Signature=37ac2f4fde00b0ac9bd9eadeb459b1bbee224158d66e7ae5fcadb70b2d181d02&Region=ap-guangzhou&Nonce=23823223&SecretId=AKID********EXAMPLE Host: cvm.tencentcloudapi.comContent-Type: applicationx-www-form-urlencodedHTTP POST 请求结构示例:https:cvm.tencentcloudapi.com Host: cvm.tencentcloudapi.comContent-Type: applicationx-www-form-urlencoded Action=DescribeInstances&Version=2017-03-12&SignatureMethod=HmacSHA256&Timestamp=1527672334&Signature=37ac2f4fde00b0ac9bd9eadeb459b1bbee224158d66e7ae5fcadb70b2d181d02&Region=ap-guangzhou&Nonce=23823223&SecretId=AKID********EXAMPLE地域列表本产品所有接口 Region 字段的可选值如下表所示。如果接口不支持该表中的所有地域,则会在接口文档中单独说明。 地域取值 华北地区(北京)ap-beijing 西南地区(成都)ap-chengdu 华南地区(广州)ap-guangzhou 华东地区(南京)ap-nanjing 华东地区(上海)ap-shanghai
    来自:
  • 签名方法 v3

    以下文档说明了签名方法 v3 的签名过程,但仅在您编写自己的代码来调用腾讯云 API 时才有用。我们推荐您使用 腾讯云 API Explorer ,腾讯云 SDK 和 腾讯云命令行工具(TCCLI) 等开发者工具,从而无需学习如何对 API 请求进行签名。腾讯云 API 会对每个请求进行身份验证,用户需要使用安全凭证,经过特定的步骤对请求进行签名(Signature),每个请求都需要在公共参数中指定该签名结果并以指定的方式和格式发送请求。为什么要进行签名签名通过以下方式帮助保护请求: 验证请求者的身份签名确保请求是由持有有效访问密钥的人发送的。请参阅控制台 云 API 密钥 页面获取密钥相关信息。 保护传输中的数据为了防止请求在传输过程中被篡改,腾讯云 API 会使用请求参数来计算请求的哈希值,并将生成的哈希值加密后作为请求的一部分,发送到腾讯云 API 服务器。服务器会使用收到的请求参数以同样的过程计算哈希值,并验证请求中的哈希值。如果请求被篡改,将导致哈希值不一致,腾讯云 API 将拒绝本次请求。 签名方法 v3 (TC3-HMAC-SHA256)功能上覆盖了以前的签名方法 v1,而且更安全,支持更大的请求,支持 JSON 格式,POST 请求支持传空数组和空字符串,性能有一定提升,推荐使用该签名方法计算签名。首次接触,建议使用 API Explorer 中的“签名串生成”功能,选择签名版本为“API 3.0 签名 v3”,可以生成签名过程进行验证,也可直接生成 SDK 代码。推荐使用腾讯云 API 配套的 7 种常见的编程语言 SDK,已经封装了签名和请求过程,均已开源,支持 Python、Java、PHP、Go、NodeJS、.NET、C++。申请安全凭证本文使用的安全凭证为密钥,密钥包括 SecretId 和 SecretKey。每个用户最多可以拥有两对密钥。 SecretId:用于标识 API 调用者身份,可以简单类比为用户名。SecretKey:用于验证 API 调用者的身份,可以简单类比为密码。用户必须严格保管安全凭证,避免泄露,否则将危及财产安全。如已泄漏,请立刻禁用该安全凭证。 申请安全凭证的具体步骤如下: 登录 腾讯云管理中心控制台 。前往 云API密钥 的控制台页面。在 云API密钥 页面,单击【新建密钥】即可以创建一对密钥。 签名版本 v3 签名过程云 API 支持 GET 和 POST 请求。对于GET方法,只支持 Content-Type: applicationx-www-form-urlencoded 协议格式。对于POST方法,目前支持 Content-Type: applicationjson 以及 Content-Type: multipartform-data 两种协议格式,json 格式绝大多数接口均支持,multipart 格式只有特定接口支持,此时该接口不能使用 json 格式调用,参考具体业务接口文档说明。推荐使用 POST 请求,因为两者的结果并无差异,但 GET 请求只支持 32 KB 以内的请求包。下面以云服务器查询广州区实例列表作为例子,分步骤介绍签名的计算过程。我们选择该接口是因为: 云服务器默认已开通,该接口很常用;该接口是只读的,不会改变现有资源的状态;接口覆盖的参数种类较全,可以演示包含数据结构的数组如何使用。 在示例中,不论公共参数或者接口的参数,我们尽量选择容易犯错的情况。在实际调用接口时,请根据实际情况来,每个接口的参数并不相同,不要照抄这个例子的参数和值。假设用户的 SecretId 和 SecretKey 分别是:AKIDz8krbsJ5yKBZQpn74WFkmLPx3******* 和 Gu5t9xGARNpq86cd98joQYCN3*******。用户想查看广州区云服务器名为“未命名”的主机状态,只返回一条数据。则请求可能为:curl -X POST https:cvm.tencentcloudapi.com -H "Authorization: TC3-HMAC-SHA256 Credential=AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******2019-02-25cvmtc3_request, SignedHeaders=content-type;host, Signature=2230eefd229f582d8b1b891af7107b91597240707d778ab3738f756258d7652c" -H "Content-Type: applicationjson; charset=utf-8" -H "Host: cvm.tencentcloudapi.com" -H "X-TC-Action: DescribeInstances" -H "X-TC-Timestamp: 1551113065" -H "X-TC-Version: 2017-03-12" -H "X-TC-Region: ap-guangzhou" -d '{"Limit": 1, "Filters": , "Name": "instance-name"}]}' 下面详细解释签名计算过程。1. 拼接规范请求串按如下伪代码格式拼接规范请求串(CanonicalRequest):CanonicalRequest = HTTPRequestMethod + 'n' + CanonicalURI + 'n' + CanonicalQueryString + 'n' + CanonicalHeaders + 'n' + SignedHeaders + 'n' + HashedRequestPayload 字段名称解释 HTTPRequestMethodHTTP 请求方法(GET、POST )。此示例取值为 POST。 CanonicalURIURI 参数,API 3.0 固定为正斜杠()。 CanonicalQueryString发起 HTTP 请求 URL 中的查询字符串,对于 POST 请求,固定为空字符串"",对于 GET 请求,则为 URL 中问号(?)后面的字符串内容,例如:Limit=10&Offset=0。注意:CanonicalQueryString 需要参考 RFC3986 进行 URLEncode,字符集 UTF8,推荐使用编程语言标准库,所有特殊字符均需编码,大写形式。 CanonicalHeaders参与签名的头部信息,至少包含 host 和 content-type 两个头部,也可加入自定义的头部参与签名以提高自身请求的唯一性和安全性。拼接规则:头部 key 和 value 统一转成小写,并去掉首尾空格,按照 key:valuen 格式拼接;多个头部,按照头部 key(小写)的 ASCII 升序进行拼接。此示例计算结果是 content-type:applicationjson; charset=utf-8nhost:cvm.tencentcloudapi.comn。注意:content-type 必须和实际发送的相符合,有些编程语言网络库即使未指定也会自动添加 charset 值,如果签名时和发送时不一致,服务器会返回签名校验失败。 SignedHeaders参与签名的头部信息,说明此次请求有哪些头部参与了签名,和 CanonicalHeaders 包含的头部内容是一一对应的。content-type 和 host 为必选头部。拼接规则:头部 key 统一转成小写;多个头部 key(小写)按照 ASCII 升序进行拼接,并且以分号(;)分隔。 此示例为 content-type;host HashedRequestPayload请求正文(payload,即 body,此示例为 {"Limit": 1, "Filters": , "Name": "instance-name"}]})的哈希值,计算伪代码为 Lowercase(HexEncode(Hash.SHA256(RequestPayload))),即对 HTTP 请求正文做 SHA256 哈希,然后十六进制编码,最后编码串转换成小写字母。对于 GET 请求,RequestPayload 固定为空字符串。此示例计算结果是 35e9c5b0e3ae67532d3c9f17ead6c90222632e5b1ff7f6e89887f1398934f064。 根据以上规则,示例中得到的规范请求串如下:POST content-type:applicationjson; charset=utf-8host:cvm.tencentcloudapi.com content-type;host35e9c5b0e3ae67532d3c9f17ead6c90222632e5b1ff7f6e89887f1398934f0642. 拼接待签名字符串按如下格式拼接待签名字符串:StringToSign = Algorithm + n + RequestTimestamp + n + CredentialScope + n + HashedCanonicalRequest 字段名称解释 Algorithm签名算法,目前固定为 TC3-HMAC-SHA256。 RequestTimestamp请求时间戳,即请求头部的公共参数 X-TC-Timestamp 取值,取当前时间 UNIX 时间戳,精确到秒。此示例取值为 1551113065。 CredentialScope凭证范围,格式为 Dateservicetc3_request,包含日期、所请求的服务和终止字符串(tc3_request)。Date 为 UTC 标准时间的日期,取值需要和公共参数 X-TC-Timestamp 换算的 UTC 标准时间日期一致;service 为产品名,必须与调用的产品域名一致。此示例计算结果是 2019-02-25cvmtc3_request。 HashedCanonicalRequest前述步骤拼接所得规范请求串的哈希值,计算伪代码为 Lowercase(HexEncode(Hash.SHA256(CanonicalRequest)))。此示例计算结果是 5ffe6a04c0664d6b969fab9a13bdab201d63ee709638e2749d62a09ca18d7031。 注意: Date 必须从时间戳 X-TC-Timestamp 计算得到,且时区为 UTC+0。如果加入系统本地时区信息,例如东八区,将导致白天和晚上调用成功,但是凌晨时调用必定失败。假设时间戳为 1551113065,在东八区的时间是 2019-02-26 00:44:25,但是计算得到的 Date 取 UTC+0 的日期应为 2019-02-25,而不是 2019-02-26。Timestamp 必须是当前系统时间,且需确保系统时间和标准时间是同步的,如果相差超过五分钟则必定失败。如果长时间不和标准时间同步,可能导致运行一段时间后,请求必定失败,返回签名过期错误。 根据以上规则,示例中得到的待签名字符串如下:TC3-HMAC-SHA25615511130652019-02-25cvmtc3_request5ffe6a04c0664d6b969fab9a13bdab201d63ee709638e2749d62a09ca18d70313. 计算签名1)计算派生签名密钥,伪代码如下:SecretKey = "Gu5t9xGARNpq86cd98joQYCN3*******"SecretDate = HMAC_SHA256("TC3" + SecretKey, Date)SecretService = HMAC_SHA256(SecretDate, Service)SecretSigning = HMAC_SHA256(SecretService, "tc3_request")派生出的密钥 SecretDate、SecretService 和 SecretSigning 是二进制的数据,可能包含不可打印字符,此处不展示中间结果。请注意,不同的编程语言,HMAC 库函数中参数顺序可能不一样,请以实际情况为准。此处的伪代码密钥参数 key 在前,消息参数 data 在后。通常标准库函数会提供二进制格式的返回值,也可能会提供打印友好的十六进制格式的返回值,此处使用的是二进制格式。 字段名称解释 SecretKey原始的 SecretKey,即 Gu5t9xGARNpq86cd98joQYCN3*******。 Date即 Credential 中的 Date 字段信息。此示例取值为 2019-02-25。 Service即 Credential 中的 Service 字段信息。此示例取值为 cvm。 2)计算签名,伪代码如下:Signature = HexEncode(HMAC_SHA256(SecretSigning, StringToSign))此示例计算结果是 2230eefd229f582d8b1b891af7107b91597240707d778ab3738f756258d7652c。4. 拼接 Authorization按如下格式拼接 Authorization:Authorization = Algorithm + ' ' + 'Credential=' + SecretId + '' + CredentialScope + ', ' + 'SignedHeaders=' + SignedHeaders + ', ' + 'Signature=' + Signature 字段名称解释 Algorithm签名方法,固定为 TC3-HMAC-SHA256。 SecretId密钥对中的 SecretId,即 AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******。 CredentialScope见上文,凭证范围。此示例计算结果是 2019-02-25cvmtc3_request。 SignedHeaders见上文,参与签名的头部信息。此示例取值为 content-type;host。 Signature签名值。此示例计算结果是 2230eefd229f582d8b1b891af7107b91597240707d778ab3738f756258d7652c。 根据以上规则,示例中得到的值为:TC3-HMAC-SHA256 Credential=AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******2019-02-25cvmtc3_request, SignedHeaders=content-type;host, Signature=2230eefd229f582d8b1b891af7107b91597240707d778ab3738f756258d7652c最终完整的调用信息如下:POST https:cvm.tencentcloudapi.comAuthorization: TC3-HMAC-SHA256 Credential=AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******2019-02-25cvmtc3_request, SignedHeaders=content-type;host, Signature=2230eefd229f582d8b1b891af7107b91597240707d778ab3738f756258d7652cContent-Type: applicationjson; charset=utf-8Host: cvm.tencentcloudapi.comX-TC-Action: DescribeInstancesX-TC-Version: 2017-03-12X-TC-Timestamp: 1551113065X-TC-Region: ap-guangzhou {"Limit": 1, "Filters": , "Name": "instance-name"}]}签名演示在实际调用 API 3.0 时,推荐使用配套的腾讯云 SDK 3.0 ,SDK 封装了签名的过程,开发时只关注产品提供的具体接口即可。详细信息参见 SDK 中心。当前支持的编程语言有: PythonJavaPHPGoNodeJS.NETC++ 为了更清楚的解释签名过程,下面以实际编程语言为例,将上述的签名过程具体实现。请求的域名、调用的接口和参数的取值都以上述签名过程为准,代码只为解释签名过程,并不具备通用性,实际开发请尽量使用 SDK。Javaimport java.nio.charset.Charset;import java.nio.charset.StandardCharsets;import java.security.MessageDigest;import java.text.SimpleDateFormat;import java.util.Date;import java.util.TimeZone;import java.util.TreeMap;import javax.crypto.Mac;import javax.crypto.spec.SecretKeySpec;import javax.xml.bind.DatatypeConverter; public class TencentCloudAPITC3Demo { private final static Charset UTF8 = StandardCharsets.UTF_8; private final static String SECRET_ID = "AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******"; private final static String SECRET_KEY = "Gu5t9xGARNpq86cd98joQYCN3*******"; private final static String CT_JSON = "applicationjson; charset=utf-8"; public static byte key, String msg) throws Exception { Mac mac = Mac.getInstance("HmacSHA256"); SecretKeySpec secretKeySpec = new SecretKeySpec(key, mac.getAlgorithm()); mac.init(secretKeySpec); return mac.doFinal(msg.getBytes(UTF8)); } public static String sha256Hex(String s) throws Exception { MessageDigest md = MessageDigest.getInstance("SHA-256"); byte args) throws Exception { String service = "cvm"; String host = "cvm.tencentcloudapi.com"; String region = "ap-guangzhou"; String action = "DescribeInstances"; String version = "2017-03-12"; String algorithm = "TC3-HMAC-SHA256"; String timestamp = "1551113065"; String timestamp = String.valueOf(System.currentTimeMillis() 1000); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 注意时区,否则容易出错 sdf.setTimeZone(TimeZone.getTimeZone("UTC")); String date = sdf.format(new Date(Long.valueOf(timestamp + "000"))); ************* 步骤 1:拼接规范请求串 ************* String httpRequestMethod = "POST"; String canonicalUri = ""; String canonicalQueryString = ""; String canonicalHeaders = "content-type:applicationjson; charset=utf-8n" + "host:" + host + "n"; String signedHeaders = "content-type;host"; String payload = "{"Limit": 1, "Filters": , "Name": "instance-name"}]}"; String hashedRequestPayload = sha256Hex(payload); String canonicalRequest = httpRequestMethod + "n" + canonicalUri + "n" + canonicalQueryString + "n" + canonicalHeaders + "n" + signedHeaders + "n" + hashedRequestPayload; System.out.println(canonicalRequest); ************* 步骤 2:拼接待签名字符串 ************* String credentialScope = date + "" + service + "" + "tc3_request"; String hashedCanonicalRequest = sha256Hex(canonicalRequest); String stringToSign = algorithm + "n" + timestamp + "n" + credentialScope + "n" + hashedCanonicalRequest; System.out.println(stringToSign); ************* 步骤 3:计算签名 ************* byte secretService = hmac256(secretDate, service); byte}]} # ************* 步骤 1:拼接规范请求串 *************http_request_method = "POST"canonical_uri = ""canonical_querystring = ""ct = "applicationjson; charset=utf-8"payload = json.dumps(params)canonical_headers = "content-type:%snhost:%sn" % (ct, host)signed_headers = "content-type;host"hashed_request_payload = hashlib.sha256(payload.encode("utf-8")).hexdigest()canonical_request = (http_request_method + "n" + canonical_uri + "n" + canonical_querystring + "n" + canonical_headers + "n" + signed_headers + "n" + hashed_request_payload)print(canonical_request) # ************* 步骤 2:拼接待签名字符串 *************credential_scope = date + "" + service + "" + "tc3_request"hashed_canonical_request = hashlib.sha256(canonical_request.encode("utf-8")).hexdigest()string_to_sign = (algorithm + "n" + str(timestamp) + "n" + credential_scope + "n" + hashed_canonical_request)print(string_to_sign) # ************* 步骤 3:计算签名 *************# 计算签名摘要函数def sign(key, msg): return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest()secret_date = sign(("TC3" + secret_key).encode("utf-8"), date)secret_service = sign(secret_date, service)secret_signing = sign(secret_service, "tc3_request")signature = hmac.new(secret_signing, string_to_sign.encode("utf-8"), hashlib.sha256).hexdigest()print(signature) # ************* 步骤 4:拼接 Authorization *************authorization = (algorithm + " " + "Credential=" + secret_id + "" + credential_scope + ", " + "SignedHeaders=" + signed_headers + ", " + "Signature=" + signature)print(authorization) print('curl -X POST ' + endpoint + ' -H "Authorization: ' + authorization + '"' + ' -H "Content-Type: applicationjson; charset=utf-8"' + ' -H "Host: ' + host + '"' + ' -H "X-TC-Action: ' + action + '"' + ' -H "X-TC-Timestamp: ' + str(timestamp) + '"' + ' -H "X-TC-Version: ' + version + '"' + ' -H "X-TC-Region: ' + region + '"' + " -d '" + payload + "'")Golangpackage main import ( "cryptohmac" "cryptosha256" "encodinghex" "fmt" "time") func sha256hex(s string) string { b := sha256.Sum256()} func hmacsha256(s, key string) string { hashed := hmac.New(sha256.New, byte(s)) return string(hashed.Sum(nil))} func main() { secretId := "AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******" secretKey := "Gu5t9xGARNpq86cd98joQYCN3*******" host := "cvm.tencentcloudapi.com" algorithm := "TC3-HMAC-SHA256" service := "cvm" version := "2017-03-12" action := "DescribeInstances" region := "ap-guangzhou" var timestamp int64 = time.Now().Unix() var timestamp int64 = 1551113065 step 1: build canonical request string httpRequestMethod := "POST" canonicalURI := "" canonicalQueryString := "" canonicalHeaders := "content-type:applicationjson; charset=utf-8n" + "host:" + host + "n" signedHeaders := "content-type;host" payload := `{"Limit": 1, "Filters": , "Name": "instance-name"}]}` hashedRequestPayload := sha256hex(payload) canonicalRequest := fmt.Sprintf("%sn%sn%sn%sn%sn%s", httpRequestMethod, canonicalURI, canonicalQueryString, canonicalHeaders, signedHeaders, hashedRequestPayload) fmt.Println(canonicalRequest) step 2: build string to sign date := time.Unix(timestamp, 0).UTC().Format("2006-01-02") credentialScope := fmt.Sprintf("%s%stc3_request", date, service) hashedCanonicalRequest := sha256hex(canonicalRequest) string2sign := fmt.Sprintf("%sn%dn%sn%s", algorithm, timestamp, credentialScope, hashedCanonicalRequest) fmt.Println(string2sign) step 3: sign string secretDate := hmacsha256(date, "TC3"+secretKey) secretService := hmacsha256(service, secretDate) secretSigning := hmacsha256("tc3_request", secretService) signature := hex.EncodeToString(, "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: applicationjson; 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;Ruby# -*- coding: UTF-8 -*-# require ruby>=2.3.0require 'digest'require 'json'require 'time'require 'openssl' # 密钥参数secret_id = 'AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******'secret_key = 'Gu5t9xGARNpq86cd98joQYCN3*******' service = 'cvm'host = 'cvm.tencentcloudapi.com'endpoint = 'https:' + hostregion = 'ap-guangzhou'action = 'DescribeInstances'version = '2017-03-12'algorithm = 'TC3-HMAC-SHA256'# timestamp = Time.now.to_itimestamp = 1551113065date = Time.at(timestamp).utc.strftime('%Y-%m-%d') # ************* 步骤 1:拼接规范请求串 *************http_request_method = 'POST'canonical_uri = ''canonical_querystring = ''canonical_headers = "content-type:applicationjson; charset=utf-8nhost:#{host}n"signed_headers = 'content-type;host'# params = { 'Limit' => 1, 'Filters' => }] }# payload = JSON.generate(params, { 'ascii_only' => true, 'space' => ' ' })# json will generate in random order, to get specified result in example, we hard-code it here.payload = '{"Limit": 1, "Filters": , "Name": "instance-name"}]}'hashed_request_payload = Digest::SHA256.hexdigest(payload)canonical_request = .join("n") puts canonical_request # ************* 步骤 2:拼接待签名字符串 *************credential_scope = date + '' + service + '' + 'tc3_request'hashed_request_payload = Digest::SHA256.hexdigest(canonical_request)string_to_sign = .join("n")puts string_to_sign # ************* 步骤 3:计算签名 *************digest = OpenSSL::Digest.new('sha256')secret_date = OpenSSL::HMAC.digest(digest, 'TC3' + secret_key, date)secret_service = OpenSSL::HMAC.digest(digest, secret_date, service)secret_signing = OpenSSL::HMAC.digest(digest, secret_service, 'tc3_request')signature = OpenSSL::HMAC.hexdigest(digest, secret_signing, string_to_sign)puts signature # ************* 步骤 4:拼接 Authorization *************authorization = "#{algorithm} Credential=#{secret_id}#{credential_scope}, SignedHeaders=#{signed_headers}, Signature=#{signature}"puts authorization puts 'curl -X POST ' + endpoint + ' -H "Authorization: ' + authorization + '"' + ' -H "Content-Type: applicationjson; charset=utf-8"' + ' -H "Host: ' + host + '"' + ' -H "X-TC-Action: ' + action + '"' + ' -H "X-TC-Timestamp: ' + timestamp.to_s + '"' + ' -H "X-TC-Version: ' + version + '"' + ' -H "X-TC-Region: ' + region + '"' + " -d '" + payload + "'"DotNetusing System;using System.Collections.Generic;using System.Security.Cryptography;using System.Text; public class Application{ public static string SHA256Hex(string s) { using (SHA256 algo = SHA256.Create()) { byte.ToString("x2")); } return builder.ToString(); } } public static byte key, byte tc3SecretKey = Encoding.UTF8.GetBytes("TC3" + secretkey); byte secretService = HmacSHA256(secretDate, Encoding.UTF8.GetBytes(service)); byte signatureBytes = HmacSHA256(secretSigning, Encoding.UTF8.GetBytes(stringToSign)); string signature = BitConverter.ToString(signatureBytes).Replace("-", "").ToLower(); Console.WriteLine(signature); ************* 步骤 4:拼接 Authorization ************* string authorization = algorithm + " " + "Credential=" + secretid + "" + credentialScope + ", " + "SignedHeaders=" + signedHeaders + ", " + "Signature=" + signature; Console.WriteLine(authorization); Dictionary<string, string> headers = new Dictionary<string, string>(); headers.Add("Authorization", authorization); headers.Add("Host", endpoint); headers.Add("Content-Type", contentType + "; charset=utf-8"); headers.Add("X-TC-Timestamp", requestTimestamp.ToString()); headers.Add("X-TC-Version", version); headers.Add("X-TC-Action", action); headers.Add("X-TC-Region", region); return headers; } public static void Main(string, "Name": "instance-name"}]}"; Dictionary<string, string> headers = BuildHeaders(SECRET_ID, SECRET_KEY, service , endpoint, region, action, version, date, requestPayload); Console.WriteLine("POST https:cvm.tencentcloudapi.com"); foreach (KeyValuePair<string, string> kv in headers) { Console.WriteLine(kv.Key + ": " + kv.Value); } Console.WriteLine(); Console.WriteLine(requestPayload); }} NodeJSconst crypto = require('crypto'); function sha256(message, secret = '', encoding) { const hmac = crypto.createHmac('sha256', secret) return hmac.update(message).digest(encoding)} function getHash(message, encoding = 'hex') { const hash = crypto.createHash('sha256') return hash.update(message).digest(encoding)} function getDate(timestamp) { const date = new Date(timestamp * 1000) const year = date.getUTCFullYear() const month = ('0' + (date.getUTCMonth() + 1)).slice(-2) const day = ('0' + date.getUTCDate()).slice(-2) return `${year}-${month}-${day}`} function main(){ 密钥参数 const SECRET_ID = "AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******" const SECRET_KEY = "Gu5t9xGARNpq86cd98joQYCN3*******" const endpoint = "cvm.tencentcloudapi.com" const service = "cvm" const region = "ap-guangzhou" const action = "DescribeInstances" const version = "2017-03-12" const timestamp = getTime() const timestamp = 1551113065 时间处理, 获取世界时间日期 const date = getDate(timestamp) ************* 步骤 1:拼接规范请求串 ************* const signedHeaders = "content-type;host" const payload = "{"Limit": 1, "Filters": , "Name": "instance-name"}]}" const hashedRequestPayload = getHash(payload); const httpRequestMethod = "POST" const canonicalUri = "" const canonicalQueryString = "" const canonicalHeaders = "content-type:applicationjson; charset=utf-8n" + "host:" + endpoint + "n" const canonicalRequest = httpRequestMethod + "n" + canonicalUri + "n" + canonicalQueryString + "n" + canonicalHeaders + "n" + signedHeaders + "n" + hashedRequestPayload console.log(canonicalRequest) ************* 步骤 2:拼接待签名字符串 ************* const algorithm = "TC3-HMAC-SHA256" const hashedCanonicalRequest = getHash(canonicalRequest); const credentialScope = date + "" + service + "" + "tc3_request" const stringToSign = algorithm + "n" + timestamp + "n" + credentialScope + "n" + hashedCanonicalRequest console.log(stringToSign) ************* 步骤 3:计算签名 ************* const kDate = sha256(date, 'TC3' + SECRET_KEY) const kService = sha256(service, kDate) const kSigning = sha256('tc3_request', kService) const signature = sha256(stringToSign, kSigning, 'hex') console.log(signature) ************* 步骤 4:拼接 Authorization ************* const authorization = algorithm + " " + "Credential=" + SECRET_ID + "" + credentialScope + ", " + "SignedHeaders=" + signedHeaders + ", " + "Signature=" + signature console.log(authorization) const curlcmd = 'curl -X POST ' + "https:" + endpoint + ' -H "Authorization: ' + authorization + '"' + ' -H "Content-Type: applicationjson; charset=utf-8"' + ' -H "Host: ' + endpoint + '"' + ' -H "X-TC-Action: ' + action + '"' + ' -H "X-TC-Timestamp: ' + timestamp.toString() + '"' + ' -H "X-TC-Version: ' + version + '"' + ' -H "X-TC-Region: ' + region + '"' + " -d '" + payload + "'" console.log(curlcmd)}main()C++#include <iostream>#include <iomanip>#include <sstream>#include <string>#include <stdio.h>#include <time.h>#include <opensslsha.h>#include <opensslhmac.h> using namespace std; string get_data(int64_t &timestamp){ string utcDate; char buff = {0}; time_t timenow; struct tm sttime; sttime = *gmtime(&timestamp); strftime(buff, sizeof(buff), "%Y-%m-%d", &sttime); utcDate = string(buff); return utcDate;} string int2str(int64_t n){ std::stringstream ss; ss << n; return ss.str();} string sha256Hex(const string &str){ char buf; unsigned char hash; SHA256_CTX sha256; SHA256_Init(&sha256); SHA256_Update(&sha256, str.c_str(), str.size()); SHA256_Final(hash, &sha256); std::string NewString = ""; for(int i = 0; i < SHA256_DIGEST_LENGTH; i++) { snprintf(buf, sizeof(buf), "%02x", hash); NewString = NewString + buf; } return NewString;} string HmacSha256(const string &key, const string &input){ unsigned char hash; HMAC_CTX *h;#if OPENSSL_VERSION_NUMBER < 0x10100000L HMAC_CTX hmac; HMAC_CTX_init(&hmac); h = &hmac;#else h = HMAC_CTX_new();#endif HMAC_Init_ex(h, &key, key.length(), EVP_sha256(), NULL); HMAC_Update(h, ( unsigned char* )&input, input.length()); unsigned int len = 32; HMAC_Final(h, hash, &len); #if OPENSSL_VERSION_NUMBER < 0x10100000L HMAC_CTX_cleanup(h);#else HMAC_CTX_free(h);#endif std::stringstream ss; ss << std::setfill('0'); for (int i = 0; i < len; i++) { ss << hash; } return (ss.str());} string HexEncode(const string &input){ static const char* const lut = "0123456789abcdef"; size_t len = input.length(); string output; output.reserve(2 * len); for (size_t i = 0; i < len; ++i) { const unsigned char c = input; output.push_back(lut); output.push_back(lut); } return output;} int main(){ 密钥参数 string SECRET_ID = "AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******"; string SECRET_KEY = "Gu5t9xGARNpq86cd98joQYCN3*******"; string service = "cvm"; string host = "cvm.tencentcloudapi.com"; string region = "ap-guangzhou"; string action = "DescribeInstances"; string version = "2017-03-12"; int64_t timestamp = 1551113065; string date = get_data(timestamp); ************* 步骤 1:拼接规范请求串 ************* string httpRequestMethod = "POST"; string canonicalUri = ""; string canonicalQueryString = ""; string canonicalHeaders = "content-type:applicationjson; charset=utf-8nhost:" + host + "n"; string signedHeaders = "content-type;host"; string payload = "{"Limit": 1, "Filters": , "Name": "instance-name"}]}"; string hashedRequestPayload = sha256Hex(payload); string canonicalRequest = httpRequestMethod + "n" + canonicalUri + "n" + canonicalQueryString + "n" + canonicalHeaders + "n" + signedHeaders + "n" + hashedRequestPayload; cout << canonicalRequest << endl; ************* 步骤 2:拼接待签名字符串 ************* string algorithm = "TC3-HMAC-SHA256"; string RequestTimestamp = int2str(timestamp); string credentialScope = date + "" + service + "" + "tc3_request"; string hashedCanonicalRequest = sha256Hex(canonicalRequest); string stringToSign = algorithm + "n" + RequestTimestamp + "n" + credentialScope + "n" + hashedCanonicalRequest; cout << stringToSign << endl; ************* 步骤 3:计算签名 *************** string kKey = "TC3" + SECRET_KEY; string kDate = HmacSha256(kKey, date); string kService = HmacSha256(kDate, service); string kSigning = HmacSha256(kService, "tc3_request"); string signature = HexEncode(HmacSha256(kSigning, stringToSign)); cout << signature << endl; ************* 步骤 4:拼接 Authorization ************* string authorization = algorithm + " " + "Credential=" + SECRET_ID + "" + credentialScope + ", " + "SignedHeaders=" + signedHeaders + ", " + "Signature=" + signature; cout << authorization << endl; string curlcmd = "curl -X POST https:" + host + "n" + " -H "Authorization: " + authorization + "n" + " -H "Content-Type: applicationjson; charset=utf-8"" + "n" + " -H "Host: " + host + "n" + " -H "X-TC-Action: " + action + "n" + " -H "X-TC-Timestamp: " + RequestTimestamp + "n" + " -H "X-TC-Version: " + version + "n" + " -H "X-TC-Region: " + region + "n" + " -d '" + payload; cout << curlcmd << endl; return 0;};签名失败存在以下签名失败的错误码,请根据实际情况处理。 错误码错误描述 AuthFailure.SignatureExpire签名过期。Timestamp 与服务器接收到请求的时间相差不得超过五分钟。 AuthFailure.SecretIdNotFound密钥不存在。请到控制台查看密钥是否被禁用,是否少复制了字符或者多了字符。 AuthFailure.SignatureFailure签名错误。可能是签名计算错误,或者签名与实际发送的内容不相符合,也有可能是密钥 SecretKey 错误导致的。 AuthFailure.TokenFailure临时证书 Token 错误。 AuthFailure.InvalidSecretId密钥非法(不是云 API 密钥类型)。
    来自:
  • 签名方法

    签名方法 v1 简单易用,但是功能和安全性都不如签名方法 v3,推荐使用签名方法 v3。首次接触,建议使用 API Explorer 中的“签名串生成”功能,选择签名版本为“API 3.0 签名 v1”,可以生成签名过程进行验证,并提供了部分编程语言的签名示例,也可直接生成 SDK 代码。推荐使用腾讯云 API 配套的 7 种常见的编程语言 SDK,已经封装了签名和请求过程,均已开源,支持 Python、Java、PHP、Go、NodeJS、.NET、C++。腾讯云 API 会对每个访问请求进行身份验证,即每个请求都需要在公共请求参数中包含签名信息(Signature)以验证请求者身份。签名信息由安全凭证生成,安全凭证包括 SecretId 和 SecretKey;若用户还没有安全凭证,请前往 云API密钥页面 申请,否则无法调用云 API 接口。1. 申请安全凭证在第一次使用云 API 之前,请前往 云 API 密钥页面 申请安全凭证。安全凭证包括 SecretId 和 SecretKey: SecretId 用于标识 API 调用者身份SecretKey 用于加密签名字符串和服务器端验证签名字符串的密钥。用户必须严格保管安全凭证,避免泄露。 申请安全凭证的具体步骤如下: 登录 腾讯云管理中心控制台 。前往 云 API 密钥 的控制台页面在 云 API 密钥 页面,单击【新建密钥】即可以创建一对 SecretIdSecretKey。 注意:每个账号最多可以拥有两对 SecretIdSecretKey。2. 生成签名串有了安全凭证SecretId 和 SecretKey后,就可以生成签名串了。以下是使用签名方法 v1 生成签名串的详细过程:假设用户的 SecretId 和 SecretKey 分别是: SecretId: AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******SecretKey: Gu5t9xGARNpq86cd98joQYCN3******* 注意:这里只是示例,请根据用户实际申请的 SecretId 和 SecretKey 进行后续操作!以云服务器查看实例列表(DescribeInstances)请求为例,当用户调用这一接口时,其请求参数可能如下: 参数名称中文参数值 Action方法名DescribeInstances SecretId密钥 IDAKIDz8krbsJ5yKBZQpn74WFkmLPx3******* Timestamp当前时间戳1465185768 Nonce随机正整数11886 Region实例所在区域ap-guangzhou InstanceIds.0待查询的实例 IDins-09dx96dg Offset偏移量0 Limit最大允许输出20 Version接口版本号2017-03-12 2.1. 对参数排序首先对所有请求参数按参数名的字典序( ASCII 码)升序排序。注意:1)只按参数名进行排序,参数值保持对应即可,不参与比大小;2)按 ASCII 码比大小,如 InstanceIds.2 要排在 InstanceIds.12 后面,不是按字母表,也不是按数值。用户可以借助编程语言中的相关排序函数来实现这一功能,如 PHP 中的 ksort 函数。上述示例参数的排序结果如下:{ 'Action' : 'DescribeInstances', 'InstanceIds.0' : 'ins-09dx96dg', 'Limit' : 20, 'Nonce' : 11886, 'Offset' : 0, 'Region' : 'ap-guangzhou', 'SecretId' : 'AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******', 'Timestamp' : 1465185768, 'Version': '2017-03-12',}使用其它程序设计语言开发时,可对上面示例中的参数进行排序,得到的结果一致即可。2.2. 拼接请求字符串此步骤生成请求字符串。将把上一步排序好的请求参数格式化成“参数名称=参数值”的形式,如对 Action 参数,其参数名称为 "Action" ,参数值为 "DescribeInstances" ,因此格式化后就为 Action=DescribeInstances 。注意:“参数值”为原始值而非 url 编码后的值。然后将格式化后的各个参数用"&"拼接在一起,最终生成的请求字符串为:Action=DescribeInstances&InstanceIds.0=ins-09dx96dg&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******&Timestamp=1465185768&Version=2017-03-12 2.3. 拼接签名原文字符串此步骤生成签名原文字符串。签名原文字符串由以下几个参数构成: 请求方法: 支持 POST 和 GET 方式,这里使用 GET 请求,注意方法为全大写。请求主机:查看实例列表(DescribeInstances)的请求域名为:cvm.tencentcloudapi.com。实际的请求域名根据接口所属模块的不同而不同,详见各接口说明。请求路径: 当前版本云API的请求路径固定为 。请求字符串: 即上一步生成的请求字符串。 签名原文串的拼接规则为:请求方法 + 请求主机 +请求路径 + ? + 请求字符串。示例的拼接结果为:GETcvm.tencentcloudapi.com?Action=DescribeInstances&InstanceIds.0=ins-09dx96dg&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******&Timestamp=1465185768&Version=2017-03-12 2.4. 生成签名串此步骤生成签名串。首先使用 HMAC-SHA1 算法对上一步中获得的签名原文字符串进行签名,然后将生成的签名串使用 Base64 进行编码,即可获得最终的签名串。具体代码如下,以 PHP 语言为例:$secretKey = 'Gu5t9xGARNpq86cd98joQYCN3*******';$srcStr = 'GETcvm.tencentcloudapi.com?Action=DescribeInstances&InstanceIds.0=ins-09dx96dg&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******&Timestamp=1465185768&Version=2017-03-12';$signStr = base64_encode(hash_hmac('sha1', $srcStr, $secretKey, true));echo $signStr; 最终得到的签名串为:zmmjn35mikh6pM3V7sUEuX4wyYM= 使用其它程序设计语言开发时,可用上面示例中的原文进行签名验证,得到的签名串与例子中的一致即可。3. 签名串编码生成的签名串并不能直接作为请求参数,需要对其进行 URL 编码。如上一步生成的签名串为 zmmjn35mikh6pM3V7sUEuX4wyYM= ,最终得到的签名串请求参数(Signature)为:zmmjn35mikh6pM3V7sUEuX4wyYM%3D,它将用于生成最终的请求 URL。注意:如果用户的请求方法是 GET,或者请求方法为 POST 同时 Content-Type 为 applicationx-www-form-urlencoded,则发送请求时所有请求参数的值均需要做 URL 编码,参数键和=符号不需要编码。非 ASCII 字符在 URL 编码前需要先以 UTF-8 进行编码。注意:有些编程语言的网络库会自动为所有参数进行 urlencode,在这种情况下,就不需要对签名串进行 URL 编码了,否则两次 URL 编码会导致签名失败。注意:其他参数值也需要进行编码,编码采用 RFC 3986。使用 %XY 对特殊字符例如汉字进行百分比编码,其中“X”和“Y”为十六进制字符(0-9 和大写字母 A-F),使用小写将引发错误。4. 签名失败根据实际情况,存在以下签名失败的错误码,请根据实际情况处理。 错误代码错误描述 AuthFailure.SignatureExpire签名过期 AuthFailure.SecretIdNotFound密钥不存在 AuthFailure.SignatureFailure签名错误 AuthFailure.TokenFailuretoken 错误 AuthFailure.InvalidSecretId密钥非法(不是云 API 密钥类型) 5. 签名演示在实际调用 API 3.0 时,推荐使用配套的腾讯云 SDK 3.0 ,SDK 封装了签名的过程,开发时只关注产品提供的具体接口即可。详细信息参见 SDK 中心。当前支持的编程语言有: PythonJavaPHPGoNodeJS.NETC++ 为了更清楚的解释签名过程,下面以实际编程语言为例,将上述的签名过程具体实现。请求的域名、调用的接口和参数的取值都以上述签名过程为准,代码只为解释签名过程,并不具备通用性,实际开发请尽量使用 SDK 。最终输出的 url 可能为:https:cvm.tencentcloudapi.com?Action=DescribeInstances&InstanceIds.0=ins-09dx96dg&Limit=20&Nonce=11886&Offset=0&Region=ap-guangzhou&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******&Signature=zmmjn35mikh6pM3V7sUEuX4wyYM%3D&Timestamp=1465185768&Version=2017-03-12。注意:由于示例中的密钥是虚构的,时间戳也不是系统当前时间,因此如果将此 url 在浏览器中打开或者用 curl 等命令调用时会返回鉴权错误:签名过期。为了得到一个可以正常返回的 url ,需要修改示例中的 SecretId 和 SecretKey 为真实的密钥,并使用系统当前时间戳作为 Timestamp 。注意:在下面的示例中,不同编程语言,甚至同一语言每次执行得到的 url 可能都有所不同,表现为参数的顺序不同,但这并不影响正确性。只要所有参数都在,且签名计算正确即可。注意:以下代码仅适用于 API 3.0,不能直接用于其他的签名流程,即使是旧版的 API ,由于存在细节差异也会导致签名计算错误,请以对应的实际文档为准。Javaimport java.io.UnsupportedEncodingException;import java.net.URLEncoder;import java.util.Random;import java.util.TreeMap;import javax.crypto.Mac;import javax.crypto.spec.SecretKeySpec;import javax.xml.bind.DatatypeConverter;public class TencentCloudAPIDemo { private final static String CHARSET = "UTF-8"; public static String sign(String s, String key, String method) throws Exception { Mac mac = Mac.getInstance(method); SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(CHARSET), mac.getAlgorithm()); mac.init(secretKeySpec); byte args) throws Exception { TreeMap<String, Object> params = new TreeMap<String, Object>(); TreeMap可以自动排序 实际调用时应当使用随机数,例如:params.put("Nonce", new Random().nextInt(java.lang.Integer.MAX_VALUE)); params.put("Nonce", 11886); 公共参数 实际调用时应当使用系统当前时间,例如: params.put("Timestamp", System.currentTimeMillis() 1000); params.put("Timestamp", 1465185768); 公共参数 params.put("SecretId", "AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******"); 公共参数 params.put("Action", "DescribeInstances"); 公共参数 params.put("Version", "2017-03-12"); 公共参数 params.put("Region", "ap-guangzhou"); 公共参数 params.put("Limit", 20); 业务参数 params.put("Offset", 0); 业务参数 params.put("InstanceIds.0", "ins-09dx96dg"); 业务参数 params.put("Signature", sign(getStringToSign(params), "Gu5t9xGARNpq86cd98joQYCN3*******", "HmacSHA1")); 公共参数 System.out.println(getUrl(params)); }} Python注意:如果是在 Python 2 环境中运行,需要先安装 requests 依赖包: pip install requests 。# -*- coding: utf8 -*-import base64import hashlibimport hmacimport timeimport requestssecret_id = "AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******"secret_key = "Gu5t9xGARNpq86cd98joQYCN3*******"def get_string_to_sign(method, endpoint, params): s = method + endpoint + "?" query_str = "&".join("%s=%s" % (k, params) for k in sorted(params)) return s + query_strdef sign_str(key, s, method): hmac_str = hmac.new(key.encode("utf8"), s.encode("utf8"), method).digest() return base64.b64encode(hmac_str)if __name__ == '__main__': endpoint = "cvm.tencentcloudapi.com" data = { 'Action' : 'DescribeInstances', 'InstanceIds.0' : 'ins-09dx96dg', 'Limit' : 20, 'Nonce' : 11886, 'Offset' : 0, 'Region' : 'ap-guangzhou', 'SecretId' : secret_id, 'Timestamp' : 1465185768, # int(time.time()) 'Version': '2017-03-12' } s = get_string_to_sign("GET", endpoint, data) data = sign_str(secret_key, s, hashlib.sha1) print(data) # 此处会实际调用,成功后可能产生计费 # resp = requests.get("https:" + endpoint, params=data) # print(resp.url) Golangpackage mainimport ( "bytes" "cryptohmac" "cryptosha1" "encodingbase64" "fmt" "sort" "strconv")func main() { secretId := "AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******" secretKey := "Gu5t9xGARNpq86cd98joQYCN3*******" params := mapstring{ "Nonce": "11886", "Timestamp": strconv.Itoa(1465185768), "Region": "ap-guangzhou", "SecretId": secretId, "Version": "2017-03-12", "Action": "DescribeInstances", "InstanceIds.0": "ins-09dx96dg", "Limit": strconv.Itoa(20), "Offset": strconv.Itoa(0), } var buf bytes.Buffer buf.WriteString("GET") buf.WriteString("cvm.tencentcloudapi.com") buf.WriteString("") buf.WriteString("?") sort keys by ascii asc order keys := make( buf.WriteString(k) buf.WriteString("=") buf.WriteString(params) buf.WriteString("&") } buf.Truncate(buf.Len() - 1) hashed := hmac.New(sha1.New, = 11886;rand();$param = 1465185768;time();$param = "ap-guangzhou";$param = $secretId;$param = "2017-03-12";$param = "DescribeInstances";$param = "ins-09dx96dg";$param = 20;$param = 0;ksort($param);$signStr = "GETcvm.tencentcloudapi.com?";foreach ( $param as $key => $value ) { $signStr = $signStr . $key . "=" . $value . "&";}$signStr = substr($signStr, 0, -1);$signature = base64_encode(hash_hmac("sha1", $signStr, $secretKey, true));echo $signature.PHP_EOL; need to install and enable curl extension in php.ini $param = $signature; $url = "https:cvm.tencentcloudapi.com?".http_build_query($param); echo $url.PHP_EOL; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); $output = curl_exec($ch); curl_close($ch); echo json_decode($output); Ruby# -*- coding: UTF-8 -*-# require ruby>=2.3.0require 'time'require 'openssl'require 'base64'secret_id = "AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******"secret_key = "Gu5t9xGARNpq86cd98joQYCN3*******"method = 'GET'endpoint = 'cvm.tencentcloudapi.com'data = {'Action' => 'DescribeInstances','InstanceIds.0' => 'ins-09dx96dg','Limit' => 20,'Nonce' => 11886,'Offset' => 0,'Region' => 'ap-guangzhou','SecretId' => secret_id,'Timestamp' => 1465185768, # Time.now.to_i'Version' => '2017-03-12',}sign = method + endpoint + '?'params = }=#{item}"endsign += params.join('&')digest = OpenSSL::Digest.new('sha1')data = Base64.encode64(OpenSSL::HMAC.digest(digest, secret_key, sign))puts data# require 'nethttp'# uri = URI('https:' + endpoint)# uri.query = URI.encode_www_form(data)# p uri# res = Net::HTTP.get_response(uri)# puts res.body DotNetusing System;using System.Collections.Generic;using System.Net;using System.Security.Cryptography;using System.Text;public class Application { public static string Sign(string signKey, string secret) { string signRet = string.Empty; using (HMACSHA1 mac = new HMACSHA1(Encoding.UTF8.GetBytes(signKey))) { byte); } retStr += v.TrimEnd('&'); return retStr; } public static void Main(string = escape(params); const url_strParam = sort_params(params) return "https:" + endpoint + "?" + url_strParam.slice(1);}function formatSignString(reqMethod, endpoint, path, strParam){ let strSign = reqMethod + endpoint + path + "?" + strParam.slice(1); return strSign;}function sha1(secretKey, strsign){ let signMethodMap = {'HmacSHA1': "sha1"}; let hmac = crypto.createHmac(signMethodMap, secretKey || ""); return hmac.update(Buffer.from(strsign, 'utf8')).digest('base64')}function sort_params(params){ let strParam = ""; let keys = Object.keys(params); keys.sort(); for (let k in keys) { k = k.replace(_g, '.'); strParam += ("&" + keys + "=" + params]); } return strParam}function main(){ 密钥参数 const SECRET_ID = "AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******" const SECRET_KEY = "Gu5t9xGARNpq86cd98joQYCN3*******" const endpoint = "cvm.tencentcloudapi.com" const Region = "ap-guangzhou" const Version = "2017-03-12" const Action = "DescribeInstances" const Timestamp = 1465185768 时间戳 2016-06-06 12:02:48, 此参数作为示例,以实际为准 const Timestamp = Math.round(Date.now() 1000) const Nonce = 11886 随机正整数 const nonce = Math.round(Math.random() * 65535) let params = {}; params = Action; params = 'ins-09dx96dg'; params = 20; params = 0; params = Nonce; params = Region; params = SECRET_ID; params = Timestamp; params = Version; 1. 对参数排序,并拼接请求字符串 strParam = sort_params(params) 2. 拼接签名原文字符串 const reqMethod = "GET"; const path = ""; strSign = formatSignString(reqMethod, endpoint, path, strParam) console.log(strSign) 3. 生成签名串 params = sha1(SECRET_KEY, strSign) console.log(params) 4. 进行url编码并拼接请求url const req_url = get_req_url(params, endpoint) console.log(params) console.log(req_url)}main()
    来自:
  • 返回结果

    注意:目前只要请求被服务端正常处理了,响应的 HTTP 状态码均为200。例如返回的消息体里的错误码是签名失败,但 HTTP 状态码是200,而不是401。正确返回结果以云服务器的接口查看实例状态列表 (DescribeInstancesStatus) 2017-03-12 版本为例,若调用成功,其可能的返回如下为:{ "Response": { "TotalCount": 0, "InstanceStatusSet": [], "RequestId": "b5b41468-520d-4192-b42f-595cc34b6c1c" }}Response 及其内部的 RequestId 是固定的字段,无论请求成功与否,只要 API 处理了,则必定会返回。RequestId 用于一个 API 请求的唯一标识,如果 API 出现异常,可以联系我们,并提供该 ID 来解决问题。除了固定的字段外,其余均为具体接口定义的字段,不同的接口所返回的字段参见接口文档中的定义。此例中的 TotalCount 和 InstanceStatusSet 均为 DescribeInstancesStatus 接口定义的字段,由于调用请求的用户暂时还没有云服务器实例,因此 TotalCount 在此情况下的返回值为 0, InstanceStatusSet 列表为空。 错误返回结果若调用失败,其返回值示例如下为:{ "Response": { "Error": { "Code": "AuthFailure.SignatureFailure", "Message": "The provided credentials could not be validated. Please check your signature is correct." }, "RequestId": "ed93f3cb-f35e-473f-b9f3-0d451b8b79c6" }}Error 的出现代表着该请求调用失败。Error 字段连同其内部的 Code 和 Message 字段在调用失败时是必定返回的。Code 表示具体出错的错误码,当请求出错时可以先根据该错误码在公共错误码和当前接口对应的错误码列表里面查找对应原因和解决方案。Message 显示出了这个错误发生的具体原因,随着业务发展或体验优化,此文本可能会经常保持变更或更新,用户不应依赖这个返回值。RequestId 用于一个 API 请求的唯一标识,如果 API 出现异常,可以联系我们,并提供该 ID 来解决问题。 公共错误码返回结果中如果存在 Error 字段,则表示调用 API 接口失败。 Error 中的 Code 字段表示错误码,所有业务都可能出现的错误码为公共错误码。完整的错误码列表请参考本产品“API 文档”目录下的“错误码”页面。
    来自:
  • 人脸性别转换

    1. 接口描述接口请求域名: ft.tencentcloudapi.com 。用户上传一张人脸图片,基于人脸编辑与生成算法,输出一张人脸性别转换的图片。男变女可实现美颜、淡妆、加刘海和长发的效果;女变男可实现加胡须、变短发的效果。 默认接口请求频率限制:20次秒。 推荐使用 API Explorer 点击调试 API Explorer 提供了在线调用、签名验证、SDK 代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成 SDK 调用示例。 2. 输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见 公共请求参数。 参数名称必选类型描述 Action是String公共参数,本接口取值:SwapGenderPic。 Version是String公共参数,本接口取值:2020-03-04。 Region是String公共参数,详见产品支持的 地域列表。 GenderInfos.N是Array of GenderInfo人脸转化性别信息。 您可以输入最多3个 GenderInfo 来实现给一张图中的最多3张人脸转换性别。 Image否String图片 base64 数据,base64 编码后大小不可超过5M。 支持PNG、JPG、JPEG、BMP,不支持 GIF 图片。 Url否String图片的 Url ,对应图片 base64 编码后大小不可超过5M。 图片的 Url、Image必须提供一个,如果都提供,只使用 Url。 图片存储于腾讯云的 Url 可保障更高下载速度和稳定性,建议图片存储于腾讯云。 非腾讯云存储的Url速度和稳定性可能受一定影响。 支持PNG、JPG、JPEG、BMP,不支持 GIF 图片。 RspImgType否String返回图像方式(base64 或 url ) ,二选一。url有效期为1天。 3. 输出参数 参数名称类型描述 ResultImageStringRspImgType 为 base64 时,返回处理后的图片 base64 数据。默认返回base64 ResultUrlStringRspImgType 为 url 时,返回处理后的图片 url 数据。 RequestIdString唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 4. 示例示例1 调用返回失败输入示例https:ft.tencentcloudapi.com?Action=SwapGenderPic&Image=xxxxx&GenderInfos.0.Gender=1&GenderInfos.0.FaceRect.X=10&GenderInfos.0.FaceRect.Y=10&GenderInfos.0.FaceRect.Width=20&GenderInfos.0.FaceRect.Height=20&<公共请求参数>输出示例{ Response: { RequestId: b68b7c3a-410d-4af1-b63c-97450683b09b }}示例2 调用返回成功输入示例https:ft.tencentcloudapi.com?Action=SwapGenderPic&Image=xxxxx&GenderInfos.0.Gender=1&GenderInfos.0.FaceRect.X=10&GenderInfos.0.FaceRect.Y=10&GenderInfos.0.FaceRect.Width=20&GenderInfos.0.FaceRect.Height=20&<公共请求参数>输出示例{ Response: { ResultImage: base64编码的图片, RequestId: 3c140219-cfe9-470e-b241-907877d6fb03 }}5. 开发者资源腾讯云 API 平台腾讯云 API 平台 是综合 API 文档、错误码、API Explorer 及 SDK 等资源的统一查询平台,方便您从同一入口查询及使用腾讯云提供的所有 API 服务。API Inspector用户可通过 API Inspector 查看控制台每一步操作关联的 API 调用情况,并自动生成各语言版本的 API 代码,也可前往 API Explorer 进行在线调试。SDK云 API 3.0 提供了配套的开发工具集(SDK),支持多种编程语言,能更方便的调用 API。 Tencent Cloud SDK 3.0 for PythonTencent Cloud SDK 3.0 for JavaTencent Cloud SDK 3.0 for PHPTencent Cloud SDK 3.0 for GoTencent Cloud SDK 3.0 for NodeJSTencent Cloud SDK 3.0 for .NETTencent Cloud SDK 3.0 for C++Tencent Cloud SDK 3.0 for Ruby 命令行工具 Tencent Cloud CLI 3.0 6. 错误码以下仅列出了接口业务逻辑相关的错误码,其他错误码详见 公共错误码。 错误码描述 FailedOperation.DetectNoFace未检测到人脸。 FailedOperation.FaceSizeTooSmall人脸因太小被过滤,建议人脸分辨率不小于34*34。 FailedOperation.FreqCtrl操作太频繁,触发频控,请稍后重试。 FailedOperation.ImageDecodeFailed图片解码失败。 FailedOperation.ImageDownloadError图片下载错误。 FailedOperation.ImageResolutionTooSmall图片短边分辨率太小,小于64。 FailedOperation.InnerError服务内部错误,请重试。 FailedOperation.RequestEntityTooLarge整个请求体太大(通常主要是图片)。 FailedOperation.RequestTimeout后端服务超时。 InvalidParameterValue.FaceRectInvalidFirst第1个人脸框参数不合法。 InvalidParameterValue.FaceRectInvalidSecond第2个人脸框参数不合法。 InvalidParameterValue.FaceRectInvalidThrid第3个人脸框参数不合法。 InvalidParameterValue.ImageSizeExceed图片数据太大。 InvalidParameterValue.NoFaceInPhoto图片中没有人脸。 InvalidParameterValue.ParameterValueError参数不合法。 ResourceUnavailable.Delivering资源正在发货中。 ResourceUnavailable.Freeze帐号已被冻结。 ResourceUnavailable.GetAuthInfoError获取认证信息失败。 ResourceUnavailable.InArrears帐号已欠费。 ResourceUnavailable.LowBalance余额不足。 ResourceUnavailable.NotReady服务未开通。 ResourceUnavailable.Recover资源已被回收。 ResourceUnavailable.StopUsing帐号已停服。 ResourceUnavailable.UnknownStatus计费状态未知。 ResourcesSoldOut.ChargeStatusException帐号已欠费。
    来自:
  • 人脸年龄变化

    1. 接口描述接口请求域名: ft.tencentcloudapi.com 。用户上传一张人脸图片,基于人脸编辑与生成算法,输出一张人脸变老或变年轻的图片,支持实现人脸不同年龄的变化。默认接口请求频率限制:20次秒。 推荐使用 API Explorer 点击调试 API Explorer 提供了在线调用、签名验证、SDK 代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成 SDK 调用示例。 2. 输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见 公共请求参数。 参数名称必选类型描述 Action是String公共参数,本接口取值:ChangeAgePic。 Version是String公共参数,本接口取值:2020-03-04。 Region是String公共参数,详见产品支持的 地域列表。 AgeInfos.N是Array of AgeInfo人脸变老变年轻信息。 您可以输入最多3个 AgeInfo 来实现给一张图中的最多3张人脸变老变年轻。 Image否String图片 base64 数据,base64 编码后大小不可超过5M。 支持PNG、JPG、JPEG、BMP,不支持 GIF 图片。 Url否String图片的 Url ,对应图片 base64 编码后大小不可超过5M。 图片的 Url、Image必须提供一个,如果都提供,只使用 Url。 图片存储于腾讯云的 Url 可保障更高下载速度和稳定性,建议图片存储于腾讯云。 非腾讯云存储的Url速度和稳定性可能受一定影响。 支持PNG、JPG、JPEG、BMP,不支持 GIF 图片。 RspImgType否String返回图像方式(base64 或 url ) ,二选一。url有效期为1天。 3. 输出参数 参数名称类型描述 ResultImageStringRspImgType 为 base64 时,返回处理后的图片 base64 数据。默认返回base64 ResultUrlStringRspImgType 为 url 时,返回处理后的图片 url 数据。 RequestIdString唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。 4. 示例示例1 调用返回失败输入示例https:ft.tencentcloudapi.com?Action=ChangeAgePic&Image=xxxxx&AgeInfos.0.Age=10&AgeInfos.0.FaceRect.X=10&AgeInfos.0.FaceRect.Y=10&AgeInfos.0.FaceRect.Width=20&AgeInfos.0.FaceRect.Height=20&<公共请求参数>输出示例{ Response: { RequestId: b68b7c3a-410d-4af1-b63c-97450683b09b }}示例2 调用返回成功输入示例https:ft.tencentcloudapi.com?Action=ChangeAgePic&Image=xxxxx&AgeInfos.0.Age=10&AgeInfos.0.FaceRect.X=10&AgeInfos.0.FaceRect.Y=10&AgeInfos.0.FaceRect.Width=20&AgeInfos.0.FaceRect.Height=20&<公共请求参数>输出示例{ Response: { ResultImage: base64编码的图片, RequestId: 3c140219-cfe9-470e-b241-907877d6fb03 }}5. 开发者资源腾讯云 API 平台腾讯云 API 平台 是综合 API 文档、错误码、API Explorer 及 SDK 等资源的统一查询平台,方便您从同一入口查询及使用腾讯云提供的所有 API 服务。API Inspector用户可通过 API Inspector 查看控制台每一步操作关联的 API 调用情况,并自动生成各语言版本的 API 代码,也可前往 API Explorer 进行在线调试。SDK云 API 3.0 提供了配套的开发工具集(SDK),支持多种编程语言,能更方便的调用 API。 Tencent Cloud SDK 3.0 for PythonTencent Cloud SDK 3.0 for JavaTencent Cloud SDK 3.0 for PHPTencent Cloud SDK 3.0 for GoTencent Cloud SDK 3.0 for NodeJSTencent Cloud SDK 3.0 for .NETTencent Cloud SDK 3.0 for C++Tencent Cloud SDK 3.0 for Ruby 命令行工具 Tencent Cloud CLI 3.0 6. 错误码以下仅列出了接口业务逻辑相关的错误码,其他错误码详见 公共错误码。 错误码描述 FailedOperation.DetectNoFace未检测到人脸。 FailedOperation.FaceExceedBorder人脸出框,无法使用。 FailedOperation.FaceSizeTooSmall人脸因太小被过滤,建议人脸分辨率不小于34*34。 FailedOperation.FreqCtrl操作太频繁,触发频控,请稍后重试。 FailedOperation.ImageDecodeFailed图片解码失败。 FailedOperation.ImageDownloadError图片下载错误。 FailedOperation.ImageResolutionTooSmall图片短边分辨率太小,小于64。 FailedOperation.InnerError服务内部错误,请重试。 FailedOperation.RequestEntityTooLarge整个请求体太大(通常主要是图片)。 FailedOperation.RequestTimeout后端服务超时。 InvalidParameterValue.FaceRectInvalidFirst第1个人脸框参数不合法。 InvalidParameterValue.FaceRectInvalidSecond第2个人脸框参数不合法。 InvalidParameterValue.FaceRectInvalidThrid第3个人脸框参数不合法。 InvalidParameterValue.ImageSizeExceed图片数据太大。 InvalidParameterValue.NoFaceInPhoto图片中没有人脸。 InvalidParameterValue.ParameterValueError参数不合法。 ResourceUnavailable.Delivering资源正在发货中。 ResourceUnavailable.Freeze帐号已被冻结。 ResourceUnavailable.GetAuthInfoError获取认证信息失败。 ResourceUnavailable.InArrears帐号已欠费。 ResourceUnavailable.LowBalance余额不足。 ResourceUnavailable.NotReady服务未开通。 ResourceUnavailable.Recover资源已被回收。 ResourceUnavailable.StopUsing帐号已停服。 ResourceUnavailable.UnknownStatus计费状态未知。 ResourcesSoldOut.ChargeStatusException帐号已欠费。
    来自:
  • 数据结构

    FaceMorphOutput人像渐变返回结果被如下接口引用:QueryFaceMorphJob。名称类型描述 MorphUrlString人像渐变输出的url注意:此字段可能返回 null,表示取不到有效值。MorphMd5String人像渐变输出的结果MD5,用于校验注意:此字段可能返回 null,表示取不到有效值。CoverImageString人像渐变输出的结果封面图base64字符串注意:此字段可能返回 null,表示取不到有效值。MorphTimeFloat否人像渐变的最长时间,即单张图片使用渐变特效的时间。 GIF默认值为0.5s,视频默值认为1s。最大取值1s。
    来自:
  • 错误码

    功能说明如果返回结果中存在 Error 字段,则表示调用 API 接口失败。例如: { "Response": { "Error": { "Code": "AuthFailure.SignatureFailure", "Message": "The provided credentials could not be validated. Please check your signature is correct." }, "RequestId": "ed93f3cb-f35e-473f-b9f3-0d451b8b79c6" }}Error 中的 Code 表示错误码,Message 表示该错误的具体信息。错误码列表公共错误码 错误码说明 ActionOffline接口已下线。 AuthFailure.InvalidAuthorization请求头部的 Authorization 不符合腾讯云标准。 AuthFailure.InvalidSecretId密钥非法(不是云 API 密钥类型)。 AuthFailure.MFAFailureMFA 错误。 AuthFailure.SecretIdNotFound密钥不存在。请在控制台检查密钥是否已被删除或者禁用,如状态正常,请检查密钥是否填写正确,注意前后不得有空格。 AuthFailure.SignatureExpire签名过期。Timestamp 和服务器时间相差不得超过五分钟,请检查本地时间是否和标准时间同步。 AuthFailure.SignatureFailure签名错误。签名计算错误,请对照调用方式中的签名方法文档检查签名计算过程。 AuthFailure.TokenFailuretoken 错误。 AuthFailure.UnauthorizedOperation请求未授权。请参考 CAM 文档对鉴权的说明。 DryRunOperationDryRun 操作,代表请求将会是成功的,只是多传了 DryRun 参数。 FailedOperation操作失败。 InternalError内部错误。 InvalidAction接口不存在。 InvalidParameter参数错误(包括参数格式、类型等错误)。 InvalidParameterValue参数取值错误。 InvalidRequest请求 body 的 multipart 格式错误。 IpInBlacklistIP地址在黑名单中。 IpNotInWhitelistIP地址不在白名单中。 LimitExceeded超过配额限制。 MissingParameter缺少参数。 NoSuchProduct产品不存在 NoSuchVersion接口版本不存在。 RequestLimitExceeded请求的次数超过了频率限制。 RequestLimitExceeded.IPLimitExceededIP限频。 RequestLimitExceeded.UinLimitExceeded主账号限频。 RequestSizeLimitExceeded请求包超过限制大小。 ResourceInUse资源被占用。 ResourceInsufficient资源不足。 ResourceNotFound资源不存在。 ResourceUnavailable资源不可用。 ResponseSizeLimitExceeded返回包超过限制大小。 ServiceUnavailable当前服务暂时不可用。 UnauthorizedOperation未授权操作。 UnknownParameter未知参数错误,用户多传未定义的参数会导致错误。 UnsupportedOperation操作不支持。 UnsupportedProtocolhttp(s) 请求协议错误,只支持 GET 和 POST 请求。 UnsupportedRegion接口不支持所传地域。 业务错误码 错误码说明 FailedOperation.CancelJobFailure撤销任务无法被成功执行, 请重试。 FailedOperation.DetectNoFace未检测到人脸。 FailedOperation.FaceExceedBorder人脸出框,无法使用。 FailedOperation.FaceSizeTooSmall人脸因太小被过滤,建议人脸分辨率不小于34*34。 FailedOperation.FreqCtrl操作太频繁,触发频控,请稍后重试。 FailedOperation.ImageDecodeFailed图片解码失败。 FailedOperation.ImageDownloadError图片下载错误。 FailedOperation.ImagePixelExceed素材尺寸超过2000*2000像素。 FailedOperation.ImageResolutionTooSmall图片短边分辨率太小,小于64。 FailedOperation.InnerError服务内部错误,请重试。 FailedOperation.JobHasBeenCanceled任务已撤销,请重新提交任务。 FailedOperation.JobNotExist任务不存在。 FailedOperation.JobStopProcessing任务已停止处理,请重新提交任务。 FailedOperation.RequestEntityTooLarge整个请求体太大(通常主要是图片)。 FailedOperation.RequestTimeout后端服务超时。 InvalidParameterValue.FaceRectInvalidFirst第1个人脸框参数不合法。 InvalidParameterValue.FaceRectInvalidSecond第2个人脸框参数不合法。 InvalidParameterValue.FaceRectInvalidThrid第3个人脸框参数不合法。 InvalidParameterValue.ImageEmpty图片为空。 InvalidParameterValue.ImageSizeExceed图片数据太大。 InvalidParameterValue.NoFaceInPhoto图片中没有人脸。 InvalidParameterValue.ParameterValueError参数不合法。 InvalidParameterValue.UrlIllegalURL格式不合法。 ResourceUnavailable.Delivering资源正在发货中。 ResourceUnavailable.Freeze帐号已被冻结。 ResourceUnavailable.GetAuthInfoError获取认证信息失败。 ResourceUnavailable.InArrears帐号已欠费。 ResourceUnavailable.LowBalance余额不足。 ResourceUnavailable.NotReady服务未开通。 ResourceUnavailable.Recover资源已被回收。 ResourceUnavailable.StopUsing帐号已停服。 ResourceUnavailable.UnknownStatus计费状态未知。 ResourcesSoldOut.ChargeStatusException帐号已欠费。
    来自:
  • API 概览

    人脸年龄变化相关接口 接口名称接口功能 ChangeAgePic人脸年龄变化 人脸性别转换相关接口 接口名称接口功能 SwapGenderPic人脸性别转换 人像动漫化相关接口 接口名称接口功能 FaceCartoonPic人像动漫化 人像渐变相关接口 接口名称接口功能 MorphFace人像渐变 QueryFaceMorphJob查询人像渐变任务 CancelFaceMorphJob撤销人像渐变任务
    来自:
  • 更新历史

    第 5 次发布发布时间:2020-09-01 08:00:52本次发布包含了以下内容:改善已有的文档。修改接口: FaceCartoonPic 新增入参:DisableGlobalEffect 第 4 次发布发布时间:2020-08-31 08:01:02本次发布包含了以下内容:改善已有的文档。新增接口: CancelFaceMorphJobMorphFaceQueryFaceMorphJob 新增数据结构: FaceMorphOutputGradientInfo 第 3 次发布发布时间:2020-08-28 08:00:53本次发布包含了以下内容:改善已有的文档。新增接口: FaceCartoonPic 第 2 次发布发布时间:2020-07-02 08:02:30本次发布包含了以下内容:改善已有的文档。修改接口: ChangeAgePic 新增入参:RspImgType新增出参:ResultUrl SwapGenderPic 新增入参:RspImgType新增出参:ResultUrl 第 1 次发布发布时间:2020-03-05 23:04:05本次发布包含了以下内容:改善已有的文档。新增接口: ChangeAgePicSwapGenderPic 新增数据结构: AgeInfoFaceRectGenderInfo
    来自:
  • 产品动态

    2020年07月 动态名称 动态描述 发布时间 相关文档 人像变换发布线上计费 发布人脸性别转换、人脸年龄变化的后付费,实现月调用量的自动结算提供4种规格的预付费资源包,提前购买即可享受更低单价 2020-07-07 人像变换购买页 2020年03月 动态名称 动态描述 发布时间 相关文档 人脸年龄变化发布 API 接口 发布人脸年龄变化接口,提供人脸变年轻至10岁的功能 2020-03-06 人脸年龄变化人脸性别转换发布 API 接口 发布人脸性别转换接口,提供男变女、女变男等功能 2020-03-06 人脸性别转换 人像变换发布控制台 新增人脸年龄变化、人脸性别转换的数据报表页,支持查看调用明细接入控制台总览页,支持快速查看“最近访问”及“使用中”的产品 2020-03-26 人像变换控制台
    来自:

扫码关注云+社区

领取腾讯云代金券