year_limit_query.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3. #
  4. # 年度额度查询
  5. # author: Scott Chen
  6. # date: 2019-12-13
  7. import json
  8. import time
  9. import requests
  10. from apps.limit.biz.signature import Signature
  11. with open('apps/limit/biz/config.json', 'r', encoding='utf-8') as json_file:
  12. config_json = json.load(json_file)
  13. class YearLimitQuery:
  14. def __init__(self, name, id_no):
  15. self.__name = name
  16. self.__id_no = id_no
  17. self.__secret_key = ""
  18. def __build_merch_info(self):
  19. merch_param = {}
  20. merch_param["merchId"] = config_json["merchId"]
  21. merch_param["merchName"] = config_json["merchName"]
  22. merch_param["thirdPartyMerchCode"] = config_json["thirdPartyMerchCode"]
  23. merch_param["thirdPartyMerchName"] = config_json["thirdPartyMerchName"]
  24. merch_param["name"] = self.__name
  25. merch_param["idCard"] = self.__id_no
  26. merch_param["isCheckIdCard"] = config_json["isCheckIdCard"]
  27. self.__secret_key = config_json["secret_key"]
  28. print("原始参数集:{}".format(merch_param))
  29. return merch_param
  30. def __build_req_params(self):
  31. merch_param = self.__build_merch_info()
  32. req_params = {
  33. "merchId": merch_param["merchId"],
  34. "data": str(json.dumps(merch_param)),
  35. "timestamp": str(int(time.time()))
  36. }
  37. return req_params
  38. def __sign(self):
  39. req_params = self.__build_req_params()
  40. instance = Signature(req_params, self.__secret_key)
  41. ret_sign = instance.sign_with_md5()
  42. return ret_sign
  43. # 额度查询请求并返回结果
  44. def __req(self, req_params):
  45. result = {}
  46. try:
  47. req_url = config_json["year_limit_url"]
  48. # GET方法,必须是params=str(dict or list or tuple or bytes)
  49. # POST方法,必须是data=dict or list or tuple or bytes or file
  50. headers = { "Content-Type": "application/json;charset=UTF-8" }
  51. response = requests.request("POST", req_url, headers=headers, data=json.dumps(req_params), timeout=20)
  52. if response.text:
  53. result = json.loads(response.text)
  54. print("API返回数据:{}".format(result))
  55. result = self.__parse_response(result)
  56. # 返回额度查询结果
  57. return result
  58. else:
  59. print("response.text is empty")
  60. result['error'] = '[20000]请求查询API失败'
  61. return result
  62. except Exception as e:
  63. print(e)
  64. result['error'] = '[20001]请求查询API异常'
  65. return result
  66. # 额度查询数据处理
  67. def __parse_response(self, data):
  68. result = {}
  69. # 处理返回数据
  70. if data["code"] == '0':
  71. limit_data = data["data"]["rows"][0]
  72. if str(limit_data["success"]).lower() == "true":
  73. result["totalAmount"] = limit_data["result"]["totalAmount"]
  74. result["innerbalance"] = limit_data["result"]["innerbalance"]
  75. print("【{},{}】查询额度为:{}".format(self.__name, self.__id_no, data))
  76. else:
  77. print("海关返回【{},{}】额度数据不成功".format(self.__name, self.__id_no))
  78. result['error'] = '[20002]查询额度不成功'
  79. else:
  80. print("【{},{}】额度查询失败:{}".format(self.__name, self.__id_no, data["msg"]))
  81. result['error'] = '[20003]额度查询失败'
  82. return result
  83. def query(self):
  84. ret = self.__sign()
  85. return self.__req(ret)
  86. # 单元测试
  87. if __name__ == '__main__':
  88. yq = YearLimitQuery("张三", "xxxxx")
  89. yq.query()