123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- import base64
- import re
- import json
- import time
- import execjs
- from spiders.hengbang.guishu.hb_config import *
- from config import *
- import requests
- from datetime import datetime, timedelta
- class HB_update(object):
- def __init__(self, plyappno):
- self.plyappno = str(redis_conn.hget('hengbang_' + plyappno, 'plyappno'), 'utf8')
- self.username = str(redis_conn.hget('hengbang_' + plyappno, 'username'), 'utf8')
- self.license = str(redis_conn.hget('hengbang_' + plyappno, 'license'), 'utf8')
- def check_login(self):
- # redis取出token
- self.token = str(redis_conn.hget('hengbang_' + self.username, 'token'), 'utf8')
- if self.token == '':
- self.token = '用户名、密码错误'
- else:
- self.headers = {
- 'Authorization': self.token,
- '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'
- }
- params = {
- 'proposalno': '',
- 'licenseno': '',
- 'carowner': '',
- 'insuredcname': '',
- 'insrntcname': '',
- 'apptime': '',
- 'creator': self.username,
- 'pageNo': '0',
- 'pageSize': '8',
- }
- response = requests.get('https://car.hbins.com.cn/new-insure/api/carInsureMain/list', params=params,
- headers=self.headers)
- if '登录失效' in response.text:
- get_userinfo(self.username)
- self.check_login()
- def get_time(self):
- import time
- timestamp = int(time.time()) - 604800
- time_local = time.localtime(timestamp)
- dt = time.strftime("%Y-%m-%d %H:%M:%S", time_local)
- dt = dt[0:10] + ' 00:00:00'
- return dt
- def get_destr(self, x):
- data = execjs.compile(open(js_path + 'hengbang/decrypt.js', 'r', encoding='utf8').read()).call('decrypt', x)
- return data
- def bj_update(self):
- # 获取当前日期
- now = datetime.now()
- # 获取七天前的日期
- seven_days_ago = now - timedelta(days=7)
- seven_days_ago=str(seven_days_ago.strftime('%Y-%m-%d'))+' 00:00:00'
- url = "https://car.hbins.com.cn/new-insure/api/carInsureMain/list"
- params = {
- "proposalno": "",
- "licenseno": self.license,
- "frameNo": "",
- "carowner": "",
- "insuredcname": "",
- "insrntcname": "",
- "apptime": seven_days_ago,
- "creator": self.username,
- "orderStatus": "-9",
- "pageNo": "0",
- "pageSize": "10"
- }
- response =self.get_destr(requests.get(url, headers=self.headers, params=params).json().get('hb_enc_d'))
- res_data_json = json.loads(response)
- for i in res_data_json.get('content'):
- if i.get('PLYAPPNO') == self.plyappno:
- if i.get('UNDERWRITESTATUS')=='2':
- return {
- 'code':500,
- 'message':i.get('REMARK')
- }
- elif i.get('UNDERWRITESTATUS')=='3':
- params = {
- 'plyappno': self.plyappno,
- }
- response = requests.get('https://car.hbins.com.cn/new-insure/api/carinsurenew/coreproposal',
- params=params, headers=self.headers)
- # 投保单号
- tbdanhao = response.json().get('proposalNo')
- # 商业险投保单号
- bizProposalNo = response.json().get('bizProposalNo')
- # 交强险投保单号
- efcProposalNo = response.json().get('efcProposalNo')
- # 存储投保单号
- redis_conn.hset('hengbang_' + self.busiNo, 'tbdanhao', tbdanhao)
- res = requests.post(
- url='https://car.hbins.com.cn/new-insure/api/carinsurenew/pay?plyAppNo=' + self.busiNo,
- headers=self.headers, data={})
- payUrl = res.json().get('payUrl')
- headers = {
- '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',
- 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
- 'Cache-Control': 'max-age=0',
- 'Connection': 'keep-alive',
- 'Sec-Fetch-Dest': 'document',
- 'Sec-Fetch-Mode': 'navigate',
- 'Sec-Fetch-Site': 'none',
- 'Sec-Fetch-User': '?1',
- 'Upgrade-Insecure-Requests': '1',
- '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',
- 'sec-ch-ua': '"Chromium";v="104", " Not A;Brand";v="99", "Google Chrome";v="104"',
- 'sec-ch-ua-mobile': '?0',
- 'sec-ch-ua-platform': '"Windows"',
- }
- ress = requests.get(payUrl, headers=headers)
- pay_url = "".join(re.findall(r'/hbins/electronicSignatureQR\?(.*?)"', ress.text, re.S))
- params = {
- "proposalno": bizProposalNo if bizProposalNo else efcProposalNo,
- "licenseno": "",
- "carowner": "",
- "insuredcname": "",
- "insrntcname": "",
- "apptime": self.get_time(),
- "creator": self.username,
- "orderStatus": "1,3,5",
- "pageNo": "0",
- "pageSize": "5"
- }
- response = requests.get('https://car.hbins.com.cn/new-insure/api/carInsureMain/list', params=params,
- headers=self.headers)
- tbdh = re.findall(r'POLICYNO" : "(.*?)"', response.text, re.S)
- if tbdh:
- tbdh = tbdh[0]
- else:
- tbdh = ''
- return {
- 'message': response.json().get('desCription'),
- 'code': 200,
- 'SY_policy': bizProposalNo if bizProposalNo else '',
- 'JQ_Policy': efcProposalNo if efcProposalNo else '',
- 'JYX_policy': '',
- 'Application': tbdh,
- 'pay_url': 'https://hbpay.hbins.com.cn/hbins/electronicSignatureQR?' + pay_url
- }
- else:
- return {
- 'code':400,
- 'message':'审核中~~~~~~~~~~~'
- }
- return {
- 'code':400,
- 'message':'暂未查到该订单'
- }
- def main(self):
- self.check_login()
- if self.token!='用户名、密码错误':
- return self.bj_update()
- if __name__ == '__main__':
- hnhebao=HB_update('T9704020801202465504462').main()
- print(hnhebao)
|