request 中url拼接排序参数与签名算法
一、参数要求:
{
appId:应用在后台创建应用时分配的应用编号,与应用密钥一一对应
sign:按照当前请求参数名的字母序进行升序排列(排序时区分大小写,除sign外,其它值不为空的参数都参与签名), 将所有参数值组合以key=value 的形式拼成一个新字符串,不同参数值“&”之间没有任何分隔符,最后加上对应的签名密钥appKey 进行签名运算。 如进行MD5签名运算的串为 MD5(key1=value1&key2=value2appKey)
time: 1970年以来的毫秒数,每次请求都要更新,有效期5分钟
version: 接口版本号,目前默认写1.0
}
二、请求path示例:http://test.com/**/**?account=string&appId=string&sign=string&time=0&version=string
三、代码实现:
# coding=utf-8 from urllib.parse import urlencode from collections import OrderedDict import hashlib from base_utils.crypte import Md5 import time params = { "version": "1.0", "account": "zhangsan", "appId": "gyAppId", "time": int(time.time() * 1000) } def md5(self, data): self.md5 = hashlib.md5() self.md5.update(data.encode("utf-8")) return self.md5.hexdigest() def url_join(server, uri, appkey, params): args = OrderedDict() for key in sorted(params.keys()): args.update({key: params[key]}) nparams = urlencode(args) args = urlencode(args) + appkey sign = Md5().md5(args) prefix, suffix =nparams.split("&time=") print("".join([server, uri, '?',prefix, "&sign=", sign, "&time=", suffix])) return "".join([server, uri, '?',prefix, "&sign=", sign, "&time=", suffix])
三十六般武艺,七十二般变化,修练出个人品牌并发出光芒