apifox 生成签名
目录
- 前言
- 准备
- 编写签名脚本
- 签名说明
- 捋清思路
- 编码
- 获取签名所需的参数
- 生成签名
- 将签名放到合适的位置
- 完整代码
- 在apifox中配置脚本
- 新增公共脚本
- 引用公共脚本
- 添加环境变量
- 参考
前言
略
准备
- 查看apifox提供的最佳实践文章:接口签名如何处理
编写签名脚本
签名说明
- appId=1xxxxxxxxxxxxx4。常量
- appSecret=Exxxxxxxxxxxxxxxxxm。常量
- date=当前日期,日期格式为yyyy-MM-dd。例: 2024-04-21
- bizId=业务单据ID。例:1xxxxxxxxxxxxxxx3
- signStr = appId+bizId+date+secretKey
- sign=MD5(signStr)
- 将签名(sigh)通过form data传递,参数名
sign
mysql实现示例:
select md5(concat('1xxxxxxxxxxxxx4','1xxxxxxxxxxxxxxx3','2024-04-21','Exxxxxxxxxxxxxxxxxm'));
捋清思路
- 获取签名所需的参数
- 生成签名
- 将签名放到合适的位置
编码
获取签名所需的参数
/* 获取签名所需参数 */
let appId = ""; /*从环境变量中获取*/
let appSecret = ""; /*从环境变量中获取*/
let date = moment().format("YYYY-MM-DD");/*当前日期,自动生成*/
let bizId = "" /*从header中获取*//* 部分签名所需参数在环境变量中,从环境变量中获取 */
appId = pm.environment.get('appId');
appSecret = pm.environment.get('appSecret');/* 部分签名所需参数在header中,从header中获取 */
var headers = pm.request.headers;
if (headers) {bizId = headers.get("bizId");
}
生成签名
/* 打印签名所需参数 */
console.log("打印签名所需参数:");
console.log("appId is : " + appId);
console.log("bizId is : " + bizId);
console.log("date is : " + date);
console.log("appSecret is : " + appSecret);console.log("开始签名:");
let signParam = []
signParam.push(appId)
signParam.push(bizId)
signParam.push(date)
signParam.push(appSecret)let signStr = signParam.join('')
console.log("signStr is : " + signStr);let sign = CryptoJS.MD5(signStr).toString().toUpperCase()
console.log("sign is : " + sign);
将签名放到合适的位置
将签名添加到formdata中:
let formData = pm.request.body.formdata;
let newForData = [];
formData.each((item) => {newForData.push({key: item.key,value: item.value});
});
newForData.push({key: 'sign',value: sign});
pm.request.body.update({mode: 'formdata',formdata: newForData
});
完整代码
/*导入JS 类库*/
var moment = require('moment');/* 获取签名所需参数 */
let appId = ""; /*从环境变量中获取*/
let appSecret = ""; /*从环境变量中获取*/
let date = moment().format("YYYY-MM-DD");/*当前日期,自动生成*/
let bizId = "" /*从header中获取*//* 部分签名所需参数在环境变量中,从环境变量中获取 */
appId = pm.environment.get('appId');
appSecret = pm.environment.get('appSecret');/* 部分签名所需参数在header中,从header中获取 */
var headers = pm.request.headers;
if (headers) {bizId = headers.get("bizId");
}/* 打印签名所需参数 */
console.log("打印签名所需参数:");
console.log("appId is : " + appId);
console.log("bizId is : " + bizId);
console.log("date is : " + date);
console.log("appSecret is : " + appSecret);console.log("开始签名:");
let signParam = []
signParam.push(appId)
signParam.push(bizId)
signParam.push(date)
signParam.push(appSecret)let signStr = signParam.join('')
console.log("signStr is : " + signStr);let sign = CryptoJS.MD5(signStr).toString().toUpperCase()
console.log("sign is : " + sign);/* 将签名添加到formData */
let formData = pm.request.body.formdata;
let newForData = [];
formData.each((item) => {newForData.push({key: item.key,value: item.value});
});
newForData.push({key: 'sign',value: sign});
pm.request.body.update({mode: 'formdata',formdata: newForData
});
在apifox中配置脚本
新增公共脚本
参考这里。

引用公共脚本
参考这里。

添加环境变量
参考这里。

参考
https://apifox.com/help/best-practices/how-to-handle-api-signature
https://apifox.com/help/pre-post-processors-and-scripts/scripts/examples/handling-request
https://apifox.com/help/pre-post-processors-and-scripts/scripts/api-references/javascript-library
https://apifox.com/help/pre-post-processors-and-scripts/scripts/public-scripts#引用公共脚本
http://momentjs.com/
http://momentjs.cn/
相关文章:
apifox 生成签名
目录 前言准备编写签名脚本签名说明捋清思路编码获取签名所需的参数生成签名将签名放到合适的位置完整代码 在apifox中配置脚本新增公共脚本引用公共脚本添加环境变量 参考 前言 略 准备 查看apifox提供的最佳实践文章:接口签名如何处理 编写签名脚本 签名说明…...
介绍建造者模式
建造者模式 将一个复杂对象的创建与它的表示分离,使得同样的构建过程可以创建不同的表示 四种角色 Product 产品角色 指的是一个具体的产品对象Builder 抽象建造者 创建一个产品对象的各个部件的接口/抽象类ConcreteBuilder 具体建造者 实现或继承抽象建造者接口…...
【全部更新完毕】2024全国大学生数据统计与分析竞赛B题思路代码文章教学数学建模-电信银行卡诈骗的数据分析
电信银行卡诈骗的数据分析 摘要 电信银行卡诈骗是当前社会中严重的犯罪问题,分析电信银行卡交易数据,找出高风险交易特征,建立预测模型,将有助于公安部门和金融机构更好地防范诈骗行为,保障用户的财产安全。 针对问…...
【应用浅谈】Odoo的库存计价与产品成本(三)
序言:时间是我们最宝贵的财富,珍惜手上的每个时分 Odoo的库存(Stock)模块拥有众多功能,其中库存计价是一项非常重要的功能,原生的成本方法分三种:【标准成本】,【平均成本】,【先进先出】&#…...
数据结构之ArrayList与顺序表(下)
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:数据结构(Java版) 目录 ArrayList的具体使用 118. 杨辉三角 扑克洗牌算法 接上篇:数据结构之ArrayLis…...
openi启智社区 aarch64 npu环境安装飞桨paddlepaddle和PaddleNLP(失败)
以前在启智社区都是编译安装飞桨,这回看到飞桨提供了npu安装包,兴冲冲的以为安装很简单。 之所以安装飞桨,是因为想在启智社区的启智大脑调试环境使用最新的PaddleNLP,结果报错:No module named paddle.nn.layer.laye…...
【漏洞复现】多客圈子论坛系统 httpGet 任意文件读取漏洞
0x01 产品简介 多客圈子论坛系统是一种面向特定人群或特定话题的社交网络,它提供了用户之间交流、分享、讨论的平台。在这个系统中,用户可以创建、加入不同的圈子,圈子可以是基于兴趣、地域、职业等不同主题的。用户可以在圈子中发帖、评论、…...
46-1 护网溯源 - 钓鱼邮件溯源
一、客户提供钓鱼邮件样本 二、行为分析 三、样本分析 对钓鱼邮件中的木马程序1111.exe文件进行了分析,提交了360安全大脑沙箱云和微步在线云沙箱。 360安全大脑沙箱云显示,该1111.exe文件存在危险,因此在解压时需要谨慎操作,以免触发木马程序。 建议使用360压缩软件进行…...
鸿蒙低代码开发一个高频问题
在版本是DevEco Studio 3.1.1 Release,SDK是3.1.0(API9)。 创建和设计的visual文件经常会遇到无法渲染的情况,或者自定义组件在Custom列表中突然不见了的情况。 有以下报错信息的: JSON schema validation error: data/visualModel/value/…...
关于使用南墙waf防护halo网站主页请求404报错的解决方案
文章目录 环境说明问题展示原因探究解决方法 环境说明 在1panel应用商店,部署南墙waf(docker版)halo(2.16.1社区版)注意部署过程中注意uuwaf必须勾选允许外部访问,halo可以不勾选[这里为了证明确实是南墙waf的原因,选择勾选] 问题展示 使…...
Elasticsearch 认证模拟题 - 13
一、题目 集群中有索引 task3,用 oa、OA、Oa、oA 查询结构是 4 条,使用 dingding 的查询结果是 1 条。通过 reindex 索引 task3 为 task3_new,能够使 task3_new 满足以下查询条件。 使用 oa、OA、Oa、oA、0A、dingding 查询都能够返回 6 条…...
Day25 首页待办事项及备忘录添加功能
本章节,完成首页待办事项及备忘录添加功能 一.修改待办事项和备忘录逻辑处理类,即AddMemoViewModel和AddTodoViewModel 在 AddMemoViewModel逻辑处理类中,为了支持与其关联的View视图文件的数据绑定,需要定义一个与视图文件相匹配的实体类 Model。这个Model将包含 View中…...
SpringBoot——全局异常处理
目录 异常 项目总结 新建一个SpringBoot项目 pom.xml Result(通用的响应结果类) MyBusinessException自定义异常类 GlobalExceptionHandler全局异常处理类 ExceptionController控制器 SpringbootExceptionApplication启动类 参考文章:…...
SpringBoot+Vue教师工作量管理系统(前后端分离)
技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 角色对应功能 教师管理员 功能截图...
华为OD技术面试-最长回文串-2024手撕代码真题
题目:最长回文串 给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的 回文串 的长度。 在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。 示例 1: 输入:s = "abccccdd" 输出:7 解释: 我们可以构造的最…...
Python实现连连看8
4 游戏开始 连连看游戏实际上主要完成的是对玩家鼠标点击事件的处理,也就是对鼠标点击事件的响应。 4.1 添加鼠标点击事件响应 在“1.3.4 在窗口上铺设画布”中提到的将画布pack()到窗口代码之前,写入如下代码,其功能是为鼠标点击事件添加响应。 canvas.bind(<Button…...
[Cloud Networking] Layer Protocol (continue)
文章目录 1. STP / RSTP / MSTP Protocol1.1 STP的作用1.2 STP 生成树算法的三个步骤1.3 STP缺点 2. ARP Protocol3. DHCP Protocol3.1 DHCP 三种分配方式3.2 DHCP 攻击 4. IPSEC / MACSEC 1. STP / RSTP / MSTP Protocol 1.1 STP的作用 消除二层环路:通过阻断冗余…...
人工智能在交通与物流领域的普及及应用
文章目录 🐋引言 🐋自动驾驶 🦈自动驾驶汽车 🐡应用现状 🐡技术实现 🐡实现过程及代码 🐋智能交通管理 🦈应用现状 🦈技术实现 🦈实现过程及代码 &…...
JVM学习-详解类加载器(二)
双亲委派机制 双亲委派优势 避免类的重复加载,确保一个类的全局唯一性 Java类随着它的类加载器一起具备了一种带有优先级的层次关系,通过这种层次关系可以避免类的重复加载,当父类已经加载了该类,就没有必要子ClassLoader再加载…...
数字校园的优势有哪些
数字化时代下,数字校园已成为教育领域一股显著趋势。数字校园旨在借助信息技术工具对传统校园进行改造,提供全新的教学、管理和服务方式。那么,数字校园究竟具备何种优势?现从三个方面为您详细介绍。 首先,数字校园为教…...
ChatGPT工作原理简述:从Transformer到AI辅助开发的实践指南
作为一名开发者,你可能已经无数次地与ChatGPT进行过对话,惊叹于它流畅的文本生成能力,并将其API集成到自己的项目中。但你是否曾好奇,这个强大的“大脑”究竟是如何工作的?更重要的是,在激动人心的AI辅助开…...
如何快速修复ROG游戏本色彩异常:G-Helper完整配置恢复终极指南
如何快速修复ROG游戏本色彩异常:G-Helper完整配置恢复终极指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models …...
Oh My OpenAgent
链接:https://pan.quark.cn/s/f1685971b834...
嵌入式软件分层架构设计与RTOS抽象实践
通用嵌入式软件架构分层设计实践指南1. 项目概述1.1 系统架构设计背景在嵌入式系统开发中,随着项目复杂度提升,代码组织混乱、可维护性差成为常见问题。特别是在使用STM32、GD32等主流单片机时,缺乏合理的软件分层设计会导致以下问题…...
从零到国三:常州工学院Robocon团队的逆袭之路
1. 一支由"萌新"组成的硬核战队 当大多数高校机器人战队都在比拼谁家的研究生更多、实验室设备更先进时,常州工学院这支由大一、大二学生组成的"萌新战队"却显得格外特别。团队核心成员周潮回忆道:"第一次走进备赛区时…...
深入解析W25Q64:SPI接口下的高效存储解决方案
1. W25Q64闪存芯片初探:为什么它成为嵌入式开发的首选? 第一次接触W25Q64是在五年前的一个智能家居项目里,当时需要存储大量设备配置和日志数据。这个指甲盖大小的芯片让我印象深刻——它不仅容量达到8MB,还能在断电后完整保存数据…...
EPLAN P8 2024高效操作指南:从设备标识到端子排连接
1. EPLAN P8 2024设备标识符管理实战 电气设计中最让人头疼的就是设备标识符管理了。记得我刚接触EPLAN时,光是给几百个元件编号就花了一整天,还经常出现重复或遗漏。EPLAN P8 2024在这方面做了重大改进,现在用设备标识符包含页面功能&#x…...
卡梅德生物技术快报|高亲和力 VHH 抗体的快速筛选:磁珠直接偶联液相法的技术实现
摘要针对传统方法难以实现高亲和力 VHH 抗体的快速筛选这一行业痛点,本文阐述了基于磁珠直接偶联的液相筛选法在高亲和力 VHH 抗体的快速筛选中的技术原理、核心实验步骤及应用优势。该方法通过碳化二亚胺法实现半抗原与磁珠的直接共价偶联,消除载体蛋白…...
Qwen3-Reranker-0.6B快速入门:5步搭建多语言文本排序服务
Qwen3-Reranker-0.6B快速入门:5步搭建多语言文本排序服务 1. 引言:为什么选择Qwen3-Reranker-0.6B 在信息爆炸的时代,如何从海量文本中快速找到最相关的内容成为关键挑战。Qwen3-Reranker-0.6B作为一款轻量级但功能强大的文本排序模型&…...
OpenClaw技能扩展实战:用Qwen3-32B镜像开发自定义文件处理器
OpenClaw技能扩展实战:用Qwen3-32B镜像开发自定义文件处理器 1. 为什么需要自定义文件处理技能 上周我遇到了一个棘手的问题——需要从200多份PDF报告中提取关键数据并生成摘要。手动操作不仅耗时,还容易出错。这让我意识到OpenClaw的默认技能库虽然丰…...
