#!/usr/bin/python # -*- coding: UTF-8 -*- # # 签名 # 字典升序 # 拼接规则:secret_key_value+key+value # author: Scott Chen # date: 2019-12-17 import time from hashlib import md5 from log_ware import LogWare logger = LogWare().get_logger() class Signature: def __init__(self, in_params_map, secret_key): self.__params = in_params_map self.__secret_key = secret_key self.__sort_params = {} self.__joint_str = '' self.__out_params = in_params_map # 请求参数字典排序-升序 def __dict_sort_asc(self): temp = sorted(self.__params.items()) for i in temp: self.__sort_params[i[0]] = i[1] logger.debug('升序排列后:%s', str(self.__sort_params)) # 参数拼接 def __params_joint(self): self.__joint_str += self.__secret_key for k, v in self.__sort_params.items(): self.__joint_str += (k + v) logger.debug('参数拼接后:%s', str(self.__joint_str)) # md5签名 def sign_with_md5(self): self.__dict_sort_asc() self.__params_joint() sign_str = md5(self.__joint_str.encode("utf-8")).hexdigest() logger.debug('md5签名的参数值:%s', sign_str) self.__out_params['sign'] = sign_str logger.debug('请求参数签名结果:%s', str(self.__out_params)) return self.__out_params # 单元测试 if __name__ == '__main__': data = { 'merchId': '111', 'merchName': '商户', 'thirdPartyMerchCode': '222', 'thirdPartyMerchName': '三方商户', 'name': '张三', 'idCard': '440305198009183074', 'isCheckIdCard': '0' } params_map = { 'merchId': '111', 'data': str(data), 'timestamp': str(int(time.time())) } secret_key = 'abc789' instance = Signature(params_map, secret_key) ret = instance.sign_with_md5() logger.debug(str(ret))