def gdbsSign(self,caller, data, sign_secret_key): if isinstance(data, dict): #FIXME 只处理了data为object的情况 m = dict() for k1, v1 in data.iteritems(): if isinstance(v1, dict) or isinstance(v1, list): m[k1] = json.dumps(v1, separators=(',', ':'), ensure_ascii=False) # mapSer = dict() # for k2, v2 in v1.iteritems(): # if isinstance(v2,dict)|isinstance(v2,list): # mapSer[k2] = k2 # else: # #FIXME 处理json的null值 # mapSer[k2] = str(v2) # mapSer = OrderedDict(sorted(mapSer.items(), key=lambda t:t[0])) # mapSer = "".join(["=".join((str(key), str(elem))) for key, elem in mapSer.iteritems()]) # m[k1] = mapSer else: #FIXME 处理json的null值 m[k1] = str(v1) m = OrderedDict(sorted(m.items(), key=lambda t:t[0])) m = "".join(["=".join((str(key), str(elem))) for key, elem in m.iteritems()]) print("拼接出来的字符串为:%s" %m) m = md5.new(caller+m+sign_secret_key) return m.hexdigest().lower() else: raise Exception("data is not a dict")