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])





 



posted @ 2019-07-19 16:43  美女爱找茬  阅读(1516)  评论(0编辑  收藏  举报