Python实现签名去除字典中的键值对的冒号后的空格方法

Python实现签名去除字典中的键值对的冒号后的空格方法

	最近遇到一个比较怪的签名方式,先采用了正则匹配,发现不行。之后发现使用字符串的replace方法可以实现。

代码实例

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": "[email protected]",
		"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())

你可能感兴趣的:(Python)