接口在请求时,需要将参数排序后进行sha256加密,获取sign,作为参数。
postman的预处理,找不到方法可以对字符串进行有key的sha256加密,所以用python写一个加密接口,在预处理中调用加密接口即可
1.python文件
"""
@Describe:对请求参数进行排序拼接,后进行加密获取sign
"""import ast
from flask import Flask,request
import json
import base64
import hmac
from hashlib import sha256
import time
app=Flask(__name__)#只接受post请求@app.route("/jiami",methods=["POST"])defcheck():#默认返回内容
t=int(time.time())
return_dict={'return_code':'200','retuen_msg':'加密成功','nowtime':t}#判断传入的数据是否为空if request.get_data()isNone:
return_dict['return_code']='1001'
return_dict['retuen_msg']='请求参数不能为空'return json.dumps(return_dict,ensure_ascii=False)#获取传入的参数,并转成json
get_data_dict=request.get_data()try:
get_data_json = json.loads(get_data_dict, strict=False)except:
return_dict['return_code']='1002'
return_dict['retuen_msg']='请求参数格式必须为json'return json.dumps(return_dict, ensure_ascii=False)
all_str=get_sort_string(get_data_json,t)
sign=jm_sha256(all_str)
return_dict['retuen_msg']=sign
return json.dumps(return_dict,ensure_ascii=False)defget_sort_string(old_value,t):if'time'in old_value.keys():
old_value['time']=str(t)if'sign'in old_value.keys():
old_value.pop('sign')# 将参数(字典)进行升序排序
new =sorted(old_value.items())
new_value =dict(new)
str_sign =""for key, value in new_value.items():# print(key,value)
str_sign = str_sign + key +"="+ value +"&"# print(str)
str_sign_final = str_sign.strip("&")print("加密前",str_sign_final)return str_sign_final
defjm_sha256(str_sign):'''
:key: 接口文档中提供的密钥,根据需求修改
:str_sign: 需要加密的字符串字符串
:return:混淆后的加密结果
'''
key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
key=key.encode("utf-8")
message = str_sign.encode("utf-8")#进行加密
sign_before=hmac.new(key, message, digestmod=sha256).digest()
sign=base64.b64encode(sign_before)
string_sign =str(sign,'utf-8')print("加密后",string_sign)return string_sign
if __name__ =='__main__':
app.run(debug=True)
运行jiami.py文件。运行后,可以通过访问http://127.0.0.1:5000/jiami实现参数加密
2.postman预处理代码
预处理语句中,已将时间戳,和sign设置为全局变量,分别是:nowtime和sign。所以在做接口测试时,时间戳和sign使用全局变量即可。
//获取参数let queryParam = pm.request.url.query.members;let param = request.data;
console.log(param);
console.log(typeof(param))//调用加密接口const loginRequest ={url:'http://127.0.0.1:5000/jiami',method:'POST',header:'Content-Type:application/json',body:{mode:'raw',raw:JSON.stringify(param)}};// 发送请求
pm.sendRequest(loginRequest,function(err, res){
console.log(res.json());
sign=res.json()['retuen_msg']
nowtime=res.json()['nowtime']
pm.globals.set("sign",sign);
pm.globals.set("nowtime",nowtime)});
例子
版权归原作者 Silence_ming 所有, 如有侵权,请联系我们删除。