python-alpha-or-ascii-sort

 

def test():
    json_dict = {
        "page": 1,
        "limit": 20,
        "usr": "1234567890",
        "key": "383280183104810",
        "session": "l2fK0jf20jjfF032",
        "timestamp": "1632720008993"
    }
    
    print('json_dict type:')
    print(type(json_dict))
    json_str = json.dumps(json_dict, sort_keys=True)
    
    print('json_str type:')
    print(type(json_str))
    s = ''
    for (k, v) in json.loads(json_str).items():
        #按参数字母表中顺序排序,然后拼接:k1=v1k2=v2...
        s = s + str(k) + "=" + str(v)
    print('s in below:\n{}'.format(s))
    sig_s = md5(s.encode('utf8')).hexdigest()
    print('sig of s is:'+sig_s)
    f = zip(json_dict.keys(), json_dict.values())
    #print(f)
    c = sorted(f)
    print(c)

结果如下:
json_dict type:
<class 'dict'>
json_str type:
<class 'str'>
s in below:
key=383280183104810limit=20page=1session=l2fK0jf20jjfF032timestamp=1632720008993usr=1234567890
sig of s is:32514c8fad28a2f7921dbf04eafa82c0
[('key', '383280183104810'), ('limit', 20), ('page', 1), ('session', 'l2fK0jf20jjfF032'), ('timestamp', '1632720008993'), ('usr', '1234567890')]

这里也有个示例

def test2():
    str1 = "languageId=0&accessToken=0E4730695CDD9B4F8D56B8107171F525-001407107122545&outTradeNo=148879135312969764307b4a86&payPlatform=1&packageName=com.baidu.vodx&payMode=2&price=0.01&payInfoId=15543373&version=6.2&productname=book&sourceType=1&thirdAppCallBack=&timeStamp=1488793412&thirdappName=com.qq.vod"

    # string 拆分为List 
    strSplit = str1.split('&')  # str.split(str="", num=string.count(str)).
    print (strSplit)
    print ('\n')

    # List排序
    strSorted = sorted(strSplit)
    print("list sorted")
    print (strSorted)
    print ('\n')

    # List转为string,以&连接
    strConvert = '&'.join(strSorted)
    print(strConvert + '\n')


还有这个这个也可以


def dev_ascii_sort():
    str1="languageId=0&accessToken=0E4730695CDD9B4F8D56B8107171F525-001407107122545&outTradeNo=148879135312969764307b4a86&payPlatform=1&packageName=com.baidu.vodx&payMode=2&price=0.01&payInfoId=15543373&version=6.2&productname=book&sourceType=1&thirdAppCallBack=&timeStamp=1488793412&thirdappName=com.qq.vod"

    #string 拆分为List 
    strSplit=str1.split('&')  #str.split(str="", num=string.count(str)).
    print("strSplit in below:")
    print (strSplit)
    print ('\n')

    #List排序
    strSorted=sorted(strSplit)
    print("strSorted in below:")
    print (strSorted)
    print ('\n')

    #List转为string,以&连接
    strConvert = '&'.join(strSorted)
    print("strConvert in below:")
    print(strConvert+'\n')

def dev_ascii_sort_req_body():
    import requests
    import json,hmac,base64
    from hashlib import sha256
    header = {'content-type':'application/json'}
    url = r'http://ip:port/urlpath'
    reqBody = {
        "appId": "APP_60924EAB150441E79280F240769C27D2",
        "deviceId": "DEV_C42F9FCEE6304F64A14C8016F78663AD",
        "signAlgo": "HMAC",
        "bussinessId": "{{bussinessId}}",
        "version": "1.0",
        "name": "xxxxx",
        "idNumber": "xxxx",
        "mobile":"xxx"
    }
    
    #对参数进行排序,
    str1 = ''
    s1 = sorted(list(reqBody.keys()))
    print("s1 in below:")
    print(s1)
    for i in s1:
        str1 = f'{str1}&{i}={reqBody[i]}'
    print("str1 in below:")
    print(str1)
    #s2为最终排序结果
    s2 = str1[1:].encode('utf-8')
    print("s2:")
    print(s2)
    secret = 'mLA6Aoyx7KzPaEtri6X1qYYCYZXvSxIV'.encode('utf-8')
    
    #进行hmac
    x = hmac.new(secret,s2,digestmod=sha256).digest()
    #进行base64编码
    signature = base64.b64encode(x)
    print("signature in below:")
    print(signature)
    reqBody['signature'] = signature.decode('utf-8')
    #res = requests.post(url=url,headers=header,data=json.dumps(reqBody))
    #print(res.json())