生成sign签名值
- 一、背景
- 二、接口签名规范
- 三、实现代码
一、背景
最近测试的项目由于需要给第三方调用,所以增加了安全性的认证,所有的接口调用都需要签名进行验签,
于是研究了一下使用python按照接口签名规范生成sign值。
二、接口签名规范
1、请求参数中的 sign 参数和为空的参数去除后,剩余的多个键值对,将键按照字典序排序,
并以key1=value1&key2=value2的格式拼成一个字符串
2、拼接的字符串需要URLEncode
3、将开发者的key拼接在第一步中排序后的字符串后面得到待签名字符串
4、使用md5算法加密待加密字符串并转为大写即为sign
三、实现代码
下面为实现的
代码片
。
import time
import requests
import json
import urllib,hashlib
url = "http://www.xxx.xx"
#获取当前的时间戳
stamp = time.time()
print(stamp)
#转换为int类型的13位时间戳
timestam = int(round(stamp*1000))
print(timestam)
time_new = str(timestam)
print(type(time_new))
data ={
'appId':'3301820001',
"outTradeNo":"20201026001",
"amount":"100",
"body":"test",
"timestamp":time_new,
"notifyUrl":"http://localhost:8080/notify",
}
#将键按照字典序排序
data_order = sorted(data.items(),key=lambda x:x[0],reverse=False)
#将列表转化为字典
data_new = dict(data_order)
print(data_new)
#将key=value键值对进行url编码
datanew = urllib.parse.urlencode(data_new)
datadic = datanew + "&key=BF1BDE5A649724056F904A9335B1C1C7455655"
print(datadic)
#创建md5对象
m = hashlib.md5()
m= hashlib.md5(datadic.encode())
data_md5 = m.hexdigest()
#将小写字母切换为大写字母
sign=data_md5.upper()
print(sign)