使用Postman调试接口


在后台接口开发中,使用postman调试接口,需要token以及签名信息

设置集合变量

在集合中设置集合变量:token以及secretKey,用于存放token以及签名所需私钥,值给空就行

使用Postman调试接口

在集合中添加签名脚本

在集合的编辑页中打开scripts标签,在Pre-request中设置签名脚本

使用Postman调试接口

签名脚本如下:

JavaScript 全选
// 获取集合变量
var token = pm.collectionVariables.get("token");
var secretKey = pm.collectionVariables.get("secretKey") || 'www.yesdotnet.com';


// 添加token
pm.request.headers.add({key:'Authorization',value:`Bearer ${token}`})

// 计算签名的字典
var  dictSign = []

// url
const urlPath = pm.request.url.toString().toLowerCase().match(/\/api\/[^\\?]+/)[0];
dictSign.push({name:'url',value:urlPath})

// 时间戳
const timestampSeconds = Math.floor(Date.now() / 1000);
pm.request.headers.add({key:'time',value:timestampSeconds})
dictSign.push({name:'time',value:timestampSeconds})

// 随机字符串
var guid = Math.random().toString(36).slice(-8)
pm.request.headers.add({key:'guid',value:guid})
dictSign.push({name:'guid',value:guid})

// 处理Query参数
pm.request.url.query.all().forEach(param=>{
    dictSign.push({name:param.key,value:param.value})
})

// 处理 post参数
if(pm.request.method.toLowerCase() == 'post'){
    if (pm.request.body && pm.request.body.mode === 'raw') {
        const requestBody = pm.request.body.raw; // 获取原始 JSON 数据
        if (requestBody) {
            dictSign.push({name:'postdata',value:requestBody})
        }
    }
}

// 参数排序
dictSign.sort((item1,item2) => {
    return item1.name.toLowerCase() > item2.name.toLowerCase() ? 1 : -1
})


 function typeOf(obj) {
    const toString = Object.prototype.toString
    const map = {
      '[object Boolean]': 'boolean',
      '[object Number]': 'number',
      '[object String]': 'string',
      '[object Function]': 'function',
      '[object Array]': 'array',
      '[object Date]': 'date',
      '[object RegExp]': 'regExp',
      '[object Undefined]': 'undefined',
      '[object Null]': 'null',
      '[object Object]': 'object',
    }
    return map[toString.call(obj)]
  }

  function getValue(obj) {
    var type = typeOf(obj)
    var str = ''
   
    switch (type) {
      case 'object':
      case 'array':
        str = JSON.stringify(obj, (key,value)=>{
          if (obj[key] instanceof Date) {
            return dateUtils.format(obj[key], 'yyyy-MM-dd hh:mm:ss')
          }
          return value
        })
        break
      case 'date':
        str = dateUtils.format(obj, 'yyyy-MM-dd hh:mm:ss')
        break
      default:
        str = obj
        break
    }
    return str
  }


// 拼接待签名字符串
var signStrArray = []
dictSign.forEach(item => {
    if (item.value != null) {
        signStrArray.push(item.name + '=' + getValue(item.value))
    }
})
var signStr = signStrArray.join("&") 

// 拼接私钥:
signStr=signStr+secretKey

// 字符串处理
signStr = signStr.replace(/[\r\n]/g, '') //去掉回车换行
signStr = signStr.replace(/\t/g, '') //去掉回车换行
// signStr = signStr.replace(/\ +/g, ''); //去掉空格
signStr = signStr.replace(/ +/g, '') //去掉空格
signStr = signStr.replace(/[ ]/g, '') //去掉空格

var md5 = require('crypto-js').MD5(signStr).toString(); //MD5摘要

pm.request.headers.add({key:'sign',value:md5})

/*
const getParams = pm.request.url.query;
let params = {}; 
let urlAndBodyParams = {};
//获取请求参数名
getParams.each((singleGetParam)=>{
    if (!singleGetParam.disabled){
        const key = singleGetParam.key; 
        const value = singleGetParam.value; 
        Object.assign(params, {[key]: value}); 
    }
});
//拼接请求参数、body参数
urlAndBodyParams = Object.assign(params, request.data);
//参数名按照ASCII码升序排序
urlAndBodyKeys = Object.keys(urlAndBodyParams).sort();
var signStr = [];
//拼接待签名字符串
 for (var p = 0; p < urlAndBodyKeys.length; p++) {
    //摘取公参,公参不参与签名
    if(urlAndBodyKeys[p] == "test1" || urlAndBodyKeys[p] == "test2" ){
        continue;
    }
    signStr.push(urlAndBodyKeys[p] + "=" + urlAndBodyParams[urlAndBodyKeys[p]]);
}
//拼接固定字符串
signStr.push('key=' + '1234567890')
var sign = signStr.join("&")  
var md5 = CryptoJS.MD5(sign).toString(); //MD5摘要
//放入环境变量
postman.setGlobalVariable("md5msg", md5);
*/

添加登录请求,并自动设置token信息

请求需要处于上一步的集合内,不然无法生效

添加登录接口,并设置Scripts的Post-response脚本

使用Postman调试接口

脚本如下:

JavaScript 全选
/**
 * 成功登录后自动提取token以及secretKey
 */
if(pm.response.code==200) {
    var responseData = pm.response.json()
    pm.collectionVariables.set("token", responseData.data.token);
    pm.collectionVariables.set("secretKey", responseData.data.secretKey);
}

 

设置完成后发起登录请求,会自动设置集合的token以及secretKey值,在集合内发起其他请求时,就会自动的携带token信息并且计算签名了。

如果发现token过期等情况,只需要重新发起一次登录请求,就可以了,不需要再手动去配置参数

 

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
张国生
评论列表

发表评论

评论内容
昵称:
关联文章

使用Postman调试接口
SAP hana 接口API使用Postman请求时签名处理,自动签名脚本
微信支付:API v3 Postman脚本使用指南
YESWEB接口日志记录
使用.NET 6开发TodoList应用(11)——使用FluentValidation和MediatR实现接口请求验证
vs2019 调试服务器代码
接口并发控制,限制重要接口的并发请求
API接口安全设计方案
微信支付:API v3 Postman脚本使用指南
VS2017调试闪退之Chrome
NSwag Swagger对接口按照名称排序
.NET Core 项目调试的时候不能修改代码
JOC快速开发平台,增加调试监听功能
框架ajax接口请求超时事件设置
Visual Studio 2019 远程调试工具(Remote Debugger)
ASP.NET Core统一接口返回模型
C#获得类型Type实现的的接口列表,支持排除基类实现的接口
C# 利用Autofac批量接口注入依赖【学习记录】
基础字典管理功能开发-API接口设计
微信 JS 接口签名校验工具 (qq.com)