import collections
from hashlib import md5
import json
pramrs = {
"action": "wanyilian.distributor.order.create",
"app_key": "rebecca",
"data": {
"address1": "1 Stafford Crt.",
"address2": "aaaaaaa",
"city": "Bayswater North",
"doorplateNumbers": "109",
"emailAddress": "abc@winit.com",
"phoneNum": "15900001111",
"packageList": [{
"packageNo": "",
"warehouseCode": "US0003",
"deliveryWayCode": "OSF1010520",
"authBarcode": "",
"eBayOrderID": "3434245-24377766",
"productList": [{
"eBayBuyerID": "98877456rere",
"eBaySellerID": "99887rtrtr66123",
"eBayItemID": "3434245",
"eBayTransactionID": "24377766",
"productCode": "LCD-IP4-06",
"productNum": "3"
},
{
"eBayBuyerID": "98877456rere",
"eBaySellerID": "99887rtrtr66123",
"eBayItemID": "3434245",
"eBayTransactionID": "24377766",
"productCode": "WLCD-IP4-01",
"productNum": "1"
}
]
}],
"recipientName": "mingbao",
"region": "WV",
"repeatable": "Y",
"isAuto": "N",
"sellerOrderNo": "PowerSellerABC123",
"state": "US",
"zipCode": "25085"
},
"format": "json",
"language": "zh_CN",
"platform": "SELLERERP",
"sign": "00000000000000000000000000000000",
"sign_method": "md5",
"timestamp": "2016-06-16 00:19:26",
"version": "1.0"
}
def dict_de(data):
# 函数实现字典按特殊字段排序
dic = collections.OrderedDict() # 生成有序字典
for i in range(len(data)):
k, v = data[i]
dic[k] = v
return dic
# 对productList的【0】进行排序
pa = pramrs['data']['packageList'][0]['productList'][0]
f = sorted(pa.items(), key=lambda x: x[0])
dic1 = dict_de(f)
pramrs['data']['packageList'][0]['productList'][0] = dic1
# 对productList的【1】进行排序
pk = pramrs['data']['packageList'][0]['productList'][1]
h = sorted(pk.items(), key=lambda x: x[0])
dic2 = dict_de(h)
pramrs['data']['packageList'][0]['productList'][1] = dic2
# 对packageList进行排序
pack = pramrs['data']['packageList'][0]
p = sorted(pack.items(), key=lambda x: x[0])
dic = dict_de(p)
pramrs['data']['packageList'][0] = dic
# 对data的value进行排序
data = pramrs['data']
d = sorted(data.items(), key=lambda x: x[0])
dic3 = dict_de(d)
# 去掉键值对的连接符:后面的空格
data1 = json.dumps(dic3)
c = data1.replace('": ', '":').replace(', "', ',"').replace(", {", ",{")
# 拼接
str1 = '?'+ c + '?'
m = md5()
m.update(str1.encode(encoding='UTF-8'))
sign = m.hexdigest()
print(sign.upper())