signature.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3. #
  4. # 签名
  5. # 字典升序
  6. # 拼接规则:secret_key_value+key+value
  7. # author: Scott Chen
  8. # date: 2019-12-17
  9. import time
  10. from hashlib import md5
  11. class Signature:
  12. def __init__(self, in_params_map, secret_key):
  13. self.__params = in_params_map
  14. self.__secret_key = secret_key
  15. self.__sort_params = {}
  16. self.__joint_str = ''
  17. self.__out_params = in_params_map
  18. # 请求参数字典排序-升序
  19. def __dict_sort_asc(self):
  20. temp = sorted(self.__params.items())
  21. for i in temp:
  22. self.__sort_params[i[0]] = i[1]
  23. print('升序排列后:{}'.format(str(self.__sort_params)))
  24. # 参数拼接
  25. def __params_joint(self):
  26. self.__joint_str += self.__secret_key
  27. for k, v in self.__sort_params.items():
  28. self.__joint_str += (k + v)
  29. print('参数拼接后:{}'.format(str(self.__joint_str)))
  30. # md5签名
  31. def sign_with_md5(self):
  32. self.__dict_sort_asc()
  33. self.__params_joint()
  34. sign_str = md5(self.__joint_str.encode("utf-8")).hexdigest()
  35. print('md5签名的参数值:{}'.format(sign_str))
  36. self.__out_params['sign'] = sign_str
  37. print('请求参数签名结果:{}'.format(str(self.__out_params)))
  38. return self.__out_params
  39. # 单元测试
  40. if __name__ == '__main__':
  41. data = {
  42. 'merchId': '111',
  43. 'merchName': '商户',
  44. 'thirdPartyMerchCode': '222',
  45. 'thirdPartyMerchName': '三方商户',
  46. 'name': '张三',
  47. 'idCard': '440305198009183074',
  48. 'isCheckIdCard': '0'
  49. }
  50. params_map = {
  51. 'merchId': '111',
  52. 'data': str(data),
  53. 'timestamp': str(int(time.time()))
  54. }
  55. secret_key = 'abc789'
  56. instance = Signature(params_map, secret_key)
  57. ret = instance.sign_with_md5()
  58. print(str(ret))