• 作者:老汪软件技巧
  • 发表时间:2024-11-14 00:02
  • 浏览量:

【葵花宝典】- 在 Apifox 中使用前置脚本实现腾讯云 API 签名

最近刚接触到接口调试神器 Apifox。然后抽空研究了下这个神器的一些操作~ 真的很哇塞

这两天对接的产品是腾讯云混元大模型的接口,然后由于腾讯云 API 的安全性极高,为确保请求的真实性和安全性,要求对每个请求都必须进行签名验证。这就很让人头疼。我知道你很急!不过请你先别着急~我已踩过坑了。下面我就将我的“葵花宝典"贡献给大家!

通过本教程,你将学会如何在 Apifox 中设置和生成必要的签名,以成功调用腾讯云的 API。

1. 准备工作

在开始之前,你需要确保已经拥有腾讯云的 API 密钥,包括:

这些可以在腾讯云控制台的 API 密钥管理页面获取。请妥善保管这些密钥,避免泄露。

2. 在 Apifox 中设置项目

首先,在 Apifox 中创建一个新项目,然后添加一个 API 请求。在这个请求中,你需要填写腾讯云 API 的 URL、请求方法等基本信息。

3. 实现签名机制

签名的生成是调用腾讯云 API 时最关键的步骤。以下是生成签名的详细步骤:

步骤 3.1: 确定请求参数

包括所有必要的请求参数,例如操作名称、版本号等。

步骤 3.2: 构造请求字符串

将所有请求参数按照字典序排序,并使用 &连接成一个字符串。

步骤 3.3: 生成签名字符串

使用 HMAC-SHA256 算法,结合你的 SecretKey,对步骤 3.2 中得到的字符串进行签名。

步骤 3.4: 添加签名到请求参数

将生成的签名添加到请求参数中。

在 Apifox 中,你可以使用“前置脚本”功能来自动化这一过程。以下是一个 JavaScript 脚本示例,用于生成签名并将其添加到请求参数中:

前提:需要在环境变量中设置 SECRET_ID、SECRET_KEY

const CryptoJS = require("crypto-js");
// SHA256 加密函数
function sha256(message, secret = "") {
  const hmac = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, secret);
  return hmac.update(message).finalize();
}
// 计算消息的 SHA256 哈希值
function getHash(message) {
  const hash = CryptoJS.SHA256(message);
  return hash.toString(CryptoJS.enc.Hex);
}
// 根据时间戳获取日期字符串
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 signRequest(
  secretId,
  secretKey,
  endpoint,
  service,
  action,
  timestamp,
  payload
) {
  const date = getDate(timestamp);
  const hashedRequestPayload = getHash(JSON.stringify(payload));
  const httpRequestMethod = "POST";
  const canonicalUri = "/";
  const canonicalQueryString = "";
  const canonicalHeaders = `content-type:application/json\nhost:${endpoint}\nx-tc-action:${action.toLowerCase()}\n`;
  const signedHeaders = "content-type;host;x-tc-action";
  const canonicalRequest = `${httpRequestMethod}\n${canonicalUri}\n${canonicalQueryString}\n${canonicalHeaders}\n${signedHeaders}\n${hashedRequestPayload}`;
  const algorithm = "TC3-HMAC-SHA256";
  const hashedCanonicalRequest = getHash(canonicalRequest);
  const credentialScope = `${date}/${service}/tc3_request`;
  const stringToSign = `${algorithm}\n${timestamp}\n${credentialScope}\n${hashedCanonicalRequest}`;
  const kDate = sha256(date, `TC3${secretKey}`);
  const kService = sha256(service, kDate);
  const kSigning = sha256("tc3_request", kService);
  const signature = sha256(stringToSign, kSigning, "hex");
  const authorization = `${algorithm} Credential=${secretId}/${credentialScope}, SignedHeaders=${signedHeaders}, Signature=${signature}`;
  return authorization;
}
// 生成curl命令
function generateCurlCommand(
  endpoint,
  authorization,
  timestamp,
  action,

_【葵花宝典】- 在 Apifox 中使用前置脚本实现腾讯云 API 签名_【葵花宝典】- 在 Apifox 中使用前置脚本实现腾讯云 API 签名

version, payload
) { const curlCommand = "curl -X POST " + "https://" + endpoint + '\n -H "Authorization: ' + authorization + '"' + '\n -H "Content-Type: application/json; charset=utf-8"' + '\n -H "Host: ' + endpoint + '"' + '\n -H "X-TC-Action: ' + action + '"' + '\n -H "X-TC-Timestamp: ' + timestamp.toString() + '"' + '\n -H "X-TC-Version: ' + version + '"' + "\n -d '" + JSON.stringify(payload) + "'"; return curlCommand; } // 主函数 function main() { try { // 获取环境变量中的密钥 const SECRET_ID = pm.environment.get("SECRET_ID"); const SECRET_KEY = pm.environment.get("SECRET_KEY"); // 定义API的相关参数 const endpoint = "hunyuan.tencentcloudapi.com"; const service = "hunyuan"; const action = "ChatCompletions"; const version = "2023-09-01"; const timestamp = parseInt(Date.now() / 1000); // 获取请求体并处理 const body = JSON.parse(pm.request.body.toJSON().raw); console.log("body:", JSON.stringify(body)); // 签名请求 const authorization = signRequest( SECRET_ID, SECRET_KEY, endpoint, service, action, timestamp, body ); // 设置环境变量 pm.environment.set("Authorization", authorization); pm.environment.set("X-TC-Timestamp", timestamp.toString()); // 生成并打印curl命令 const curlCommand = generateCurlCommand( endpoint, authorization, timestamp, action, version, body ); console.log("curl:", curlCommand); } catch (error) { console.error("Error:", error); } } main();

4. 发送请求并验证

完成签名后,你可以发送请求。如果一切设置正确,你应该能够看到腾讯云 API 的响应。

结语

通过本“葵花宝典”,你应该能够掌握在 Apifox 中实现腾讯云 API 签名的方法。这一技能将帮助你在开发中安全、有效地调用腾讯云的服务。如果你在实现过程中遇到任何问题,不妨回顾一下每一步的设置,或者查阅腾讯云的官方文档获取更多帮助。


上一条查看详情 +幽灵依赖 稳定性风险
下一条 查看详情 +没有了