hb_update.py 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. import base64
  2. import re
  3. import json
  4. import time
  5. import execjs
  6. from spiders.hengbang.guishu.hb_config import *
  7. from config import *
  8. import requests
  9. from datetime import datetime, timedelta
  10. class HB_update(object):
  11. def __init__(self, plyappno):
  12. self.plyappno = str(redis_conn.hget('hengbang_' + plyappno, 'plyappno'), 'utf8')
  13. self.username = str(redis_conn.hget('hengbang_' + plyappno, 'username'), 'utf8')
  14. self.license = str(redis_conn.hget('hengbang_' + plyappno, 'license'), 'utf8')
  15. def check_login(self):
  16. # redis取出token
  17. self.token = str(redis_conn.hget('hengbang_' + self.username, 'token'), 'utf8')
  18. if self.token == '':
  19. self.token = '用户名、密码错误'
  20. else:
  21. self.headers = {
  22. 'Authorization': self.token,
  23. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
  24. }
  25. params = {
  26. 'proposalno': '',
  27. 'licenseno': '',
  28. 'carowner': '',
  29. 'insuredcname': '',
  30. 'insrntcname': '',
  31. 'apptime': '',
  32. 'creator': self.username,
  33. 'pageNo': '0',
  34. 'pageSize': '8',
  35. }
  36. response = requests.get('https://car.hbins.com.cn/new-insure/api/carInsureMain/list', params=params,
  37. headers=self.headers)
  38. if '登录失效' in response.text:
  39. get_userinfo(self.username)
  40. self.check_login()
  41. def get_time(self):
  42. import time
  43. timestamp = int(time.time()) - 604800
  44. time_local = time.localtime(timestamp)
  45. dt = time.strftime("%Y-%m-%d %H:%M:%S", time_local)
  46. dt = dt[0:10] + ' 00:00:00'
  47. return dt
  48. def get_destr(self, x):
  49. data = execjs.compile(open(js_path + 'hengbang/decrypt.js', 'r', encoding='utf8').read()).call('decrypt', x)
  50. return data
  51. def bj_update(self):
  52. # 获取当前日期
  53. now = datetime.now()
  54. # 获取七天前的日期
  55. seven_days_ago = now - timedelta(days=7)
  56. seven_days_ago=str(seven_days_ago.strftime('%Y-%m-%d'))+' 00:00:00'
  57. url = "https://car.hbins.com.cn/new-insure/api/carInsureMain/list"
  58. params = {
  59. "proposalno": "",
  60. "licenseno": self.license,
  61. "frameNo": "",
  62. "carowner": "",
  63. "insuredcname": "",
  64. "insrntcname": "",
  65. "apptime": seven_days_ago,
  66. "creator": self.username,
  67. "orderStatus": "-9",
  68. "pageNo": "0",
  69. "pageSize": "10"
  70. }
  71. response =self.get_destr(requests.get(url, headers=self.headers, params=params).json().get('hb_enc_d'))
  72. res_data_json = json.loads(response)
  73. for i in res_data_json.get('content'):
  74. if i.get('PLYAPPNO') == self.plyappno:
  75. if i.get('UNDERWRITESTATUS')=='2':
  76. return {
  77. 'code':500,
  78. 'message':i.get('REMARK')
  79. }
  80. elif i.get('UNDERWRITESTATUS')=='3':
  81. params = {
  82. 'plyappno': self.plyappno,
  83. }
  84. response = requests.get('https://car.hbins.com.cn/new-insure/api/carinsurenew/coreproposal',
  85. params=params, headers=self.headers)
  86. # 投保单号
  87. tbdanhao = response.json().get('proposalNo')
  88. # 商业险投保单号
  89. bizProposalNo = response.json().get('bizProposalNo')
  90. # 交强险投保单号
  91. efcProposalNo = response.json().get('efcProposalNo')
  92. # 存储投保单号
  93. redis_conn.hset('hengbang_' + self.busiNo, 'tbdanhao', tbdanhao)
  94. res = requests.post(
  95. url='https://car.hbins.com.cn/new-insure/api/carinsurenew/pay?plyAppNo=' + self.busiNo,
  96. headers=self.headers, data={})
  97. payUrl = res.json().get('payUrl')
  98. headers = {
  99. 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
  100. 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
  101. 'Cache-Control': 'max-age=0',
  102. 'Connection': 'keep-alive',
  103. 'Sec-Fetch-Dest': 'document',
  104. 'Sec-Fetch-Mode': 'navigate',
  105. 'Sec-Fetch-Site': 'none',
  106. 'Sec-Fetch-User': '?1',
  107. 'Upgrade-Insecure-Requests': '1',
  108. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36',
  109. 'sec-ch-ua': '"Chromium";v="104", " Not A;Brand";v="99", "Google Chrome";v="104"',
  110. 'sec-ch-ua-mobile': '?0',
  111. 'sec-ch-ua-platform': '"Windows"',
  112. }
  113. ress = requests.get(payUrl, headers=headers)
  114. pay_url = "".join(re.findall(r'/hbins/electronicSignatureQR\?(.*?)"', ress.text, re.S))
  115. params = {
  116. "proposalno": bizProposalNo if bizProposalNo else efcProposalNo,
  117. "licenseno": "",
  118. "carowner": "",
  119. "insuredcname": "",
  120. "insrntcname": "",
  121. "apptime": self.get_time(),
  122. "creator": self.username,
  123. "orderStatus": "1,3,5",
  124. "pageNo": "0",
  125. "pageSize": "5"
  126. }
  127. response = requests.get('https://car.hbins.com.cn/new-insure/api/carInsureMain/list', params=params,
  128. headers=self.headers)
  129. tbdh = re.findall(r'POLICYNO" : "(.*?)"', response.text, re.S)
  130. if tbdh:
  131. tbdh = tbdh[0]
  132. else:
  133. tbdh = ''
  134. return {
  135. 'message': response.json().get('desCription'),
  136. 'code': 200,
  137. 'SY_policy': bizProposalNo if bizProposalNo else '',
  138. 'JQ_Policy': efcProposalNo if efcProposalNo else '',
  139. 'JYX_policy': '',
  140. 'Application': tbdh,
  141. 'pay_url': 'https://hbpay.hbins.com.cn/hbins/electronicSignatureQR?' + pay_url
  142. }
  143. else:
  144. return {
  145. 'code':400,
  146. 'message':'审核中~~~~~~~~~~~'
  147. }
  148. return {
  149. 'code':400,
  150. 'message':'暂未查到该订单'
  151. }
  152. def main(self):
  153. self.check_login()
  154. if self.token!='用户名、密码错误':
  155. return self.bj_update()
  156. if __name__ == '__main__':
  157. hnhebao=HB_update('T9704020801202465504462').main()
  158. print(hnhebao)