def send(self): """ 发红包 :return: """ time.sleep(3) if self.wbOUser and self.wbOTask: pass else: return wbHbClass = WeiboHb(sessionRes=json.loads(self.wbOUser.session)) wbSLObj = WeiboSendList.objects.filter(status='1',umark='1').order_by('setid') if not wbSLObj.exists(): return for item in wbSLObj: try: with transaction.atomic(): wbHbClass.send(item) item.umark='0' item.save() except Exception as e: logger.error(str(e))
def requestHandlerForJson(self): """ "request":{ "url":"http://localhost:8000", "method" : "POST", "type":"json", }, """ logger.info("向上游请求的值:{}".format(json.dumps(self.request_data))) try: if self.rules.get("request").get("type") == 'json': result = request( url=self.rules.get("request").get("url"), method=self.rules.get("request").get("method"), json=self.request_data, headers={"Content-Type": 'application/json'}, verify=False, timeout=5) elif self.rules.get("request").get("type") == 'body': result = request( url=self.rules.get("request").get("url"), method=self.rules.get("request").get("method"), data=self.request_data, verify=False, timeout=5) elif self.rules.get("request").get("type") == 'params': if self.passid == 76: url = self.rules.get("request").get( "url") + "?params={}".format( json.dumps(self.request_data)) # data['params'] = self.request_data print(url) result = request( url=url, method=self.rules.get("request").get("method"), verify=False, timeout=5) else: result = request( url=self.rules.get("request").get("url"), method=self.rules.get("request").get("method"), params=self.request_data, verify=False, timeout=5) else: raise PubErrorCustom("请求参数错误!") except Exception as e: logger.error(str(e)) raise PubErrorCustom( "上游系统很慢,超时了,麻烦别找我,发给上游,谢谢!!!!!!!(慢到什么程度 5秒没有反应,5秒是什么概念,基本上系统已经瘫痪了!!!!!)" ) try: self.response = json.loads(result.content.decode('utf-8')) logger.info("上游返回值:{}".format(result.content.decode('utf-8'))) except Exception as e: raise PubErrorCustom("返回JSON错误!{}".format(result.text))
def handler_before_check(self): """ 业务处理之前校验处理 :return: """ if not self.qr_class.qrcode_valid(self.order_obj.createtime): logger.error("二维码已过期!") raise PubErrorCustom("二维码已过期!") if float(self.order_obj.amount) - self.amount != 0.0: logger.error("金额不符!{},{}".format(float(self.order_obj.amount), self.amount)) raise PubErrorCustom("金额不符!{},{}".format(float(self.order_obj.amount), self.amount))
def init_order_obj(self,ordercode=None): """ 初始化订单结构 :return: """ if ordercode: try: self.order_obj = Order.objects.select_for_update().get(ordercode=ordercode) except Order.DoesNotExist: raise PubErrorCustom("无此订单号") else: self.order_obj = Order.objects.select_for_update().filter(status=1, qr_id=self.qrcode_obj.id,amount=str(self.amount)).order_by("-createtime") if not self.order_obj.exists(): logger.error("无对应订单, qr_id:{} amount:{}".format(self.qrcode_obj.id,self.amount)) raise PubErrorCustom("无对应订单") self.order_obj = self.order_obj[0]
def init_qrcode_obj(self,id=None): """ 初始化二维码结构 :return: """ if id: try: self.qrcode_obj = Qrcode.objects.select_for_update().get(id=id) except Qrcode.DoesNotExist: raise PubErrorCustom("无此二维码") else: self.qrcode_obj = Qrcode.objects.select_for_update().filter(name=self.name,status='0',type=self.type) if not self.qrcode_obj.exists(): logger.error("无对应二维码, name{},type{}".format(self.name,self.type)) raise PubErrorCustom("无对应二维码") self.qrcode_obj = self.qrcode_obj[0]
def wrapper(outside_self, request, *args, **kwargs): try: self.start = time.time() self.__request_validate(request) response = self.__run(func, outside_self, request, *args, **kwargs) self.end = time.time() return response except PubErrorCustom as e: logger.error('[%s : %s ] : [%s]' % (outside_self.__class__.__name__, getattr(func, '__name__'), e.msg)) return HttpResponse(success=False, msg=e.msg, data=None) except InnerErrorCustom as e: logger.error('[%s : %s ] : [%s]' % (outside_self.__class__.__name__, getattr(func, '__name__'), e.msg)) return HttpResponse(success=False, msg=e.msg, rescode=e.code, data=None) except Exception as e: logger.error('[%s : %s ] : [%s]' % (outside_self.__class__.__name__, getattr(func, '__name__'), str(e))) return HttpResponse(success=False, msg=str(e), data=None)
def wrapper(outside_self, request, *args, **kwargs): try: # self.start = time.time() self.__request_validate(request) response = self.__run(func, outside_self, request, *args, **kwargs) # self.end=time.time() return response except PubErrorCustom as e: print("PubErrorCustom") print(e.msg) logger.error('[%s : %s ] : [%s]' % (outside_self.__class__.__name__, getattr(func, '__name__'), e.msg)) return render(request, 'error.html', {'error': e.msg}) except InnerErrorCustom as e: print(1) logger.error('[%s : %s ] : [%s]' % (outside_self.__class__.__name__, getattr(func, '__name__'), e.msg)) return render(request, 'error.html', {'error': e.msg}) except Exception as e: logger.error('[%s : %s ] : [%s]' % (outside_self.__class__.__name__, getattr(func, '__name__'), str(e))) return render(request, 'error.html', {'error': str(e)})
def rob(self): time.sleep(5) if self.wbOUser and self.wbOTask: pass else: return WbSLObj = WeiboSendList.objects.filter(status=1,taskid=self.wbOTask.taskid) if WbSLObj.exists(): for item in WbSLObj: uidsObj=json.loads(item.uids) print(uidsObj) print(item.groupid) for item_member in WeiboGroupMember.objects.filter(group_id=item.groupid): if len(item.uids) and item_member.son_uid in uidsObj['uids']: continue time.sleep(20) wbUserObj = WeiboUser.objects.get(uid=item_member.son_uid) try: print(item_member.son_uid) rFlag = WeiboHbGet(sessionRes=json.loads(wbUserObj.session)).rob(url=item.url) if rFlag: uidsObj['uids'].append(item_member.son_uid) item.getcount +=1 except Exception as e: logger.error("抢红包失败",str(e),item_member.son_uid,item.url) if item.getcount>=item.sendcount: item.status = '0' print(uidsObj) item.uids = json.dumps(uidsObj) item.save()
def gethb(self): time.sleep(2) if self.wbOUser and self.wbOTask: pass else: print("无可用用户或可用任务") return wbHbClass = WeiboHb(sessionRes=json.loads(self.wbOUser.session)) wbSLObj = WeiboSendList.objects.filter().order_by('-setid') if not wbSLObj.exists(): max_set_id = 0 else: max_set_id = wbSLObj[0].setid try: sendlist = wbHbClass.getlistAll(year="2019", type="2", max_set_id=max_set_id) with transaction.atomic(): for item in sendlist: WeiboSendList.objects.create(**{ "groupid":self.wbOTask.groupid, "setid":item['set_id'], "uid":self.wbOUser.uid, "uids":json.dumps({"uids":[]}), "swithurl":item['url'], "taskid":self.wbOTask.taskid, "userid":self.wbOTask.userid, "amount":item['amount'], "getcount":item['getcount'], "sendcount":item['sendcount'], "status": '0' if item['getcount'] == item['sendcount'] else '1' }) except Exception as e: logger.error(str(e)) self.gethb()
def __init__(self,isQueryTask=True): self.ut = UtilTime() self.wbOUser = None self.wbOTask = None if isQueryTask: wbOTasks = WeiboTask.objects.filter(umark='0',status='1',date=self.ut.arrow_to_string(format_v="YYYY-MM-DD")).order_by('sort') if not wbOTasks.exists(): logger.error("无任务可执行!") return self.wbOTask = wbOTasks[0] try: self.wbOUser = WeiboUser.objects.get(uid=self.wbOTask.uid,status='0') except WeiboUser.DoesNotExist: logger.error("无可用组长!") return self.robnumber = self.wbOTask.robnumber self.minamount = self.wbOTask.minamount self.maxamount = self.wbOTask.maxamount
def callback_request_to_server(self): """ 进行回调操作 :return: """ try: user = Users.objects.get(userid=self.order_obj.userid) except Users.DoesNotExist: logger.error("订单用户不存在! 用户:{}".format(self.order_obj.userid)) raise PubErrorCustom("订单用户不存在!") if self.order_obj.lock == '0': data_request = { "rescode": "10000", "msg": "回调成功!", "data": { "ordercode": self.order_obj.ordercode, "status": '0', "confirm_amount": float(self.amount), "pay_time": time.mktime(timezone.now().timetuple()), "keep_info": demjson.decode(self.order_obj.keep_info) }, "ordercode":str(self.order_obj.down_ordercode) } headers={ "token" : str(self.order_obj.userid), "ordercode": str(self.order_obj.down_ordercode) } #天宝报文不加密 if user.userid != 4: data_request['data'] = encrypt(json.dumps(data_request['data'], cls=DjangoJSONEncoder), user.google_token).decode('utf-8') result = send_request(url=urllib.parse.unquote(self.order_obj.notifyurl), method='POST', data=data_request,headers=headers) if not result[0]: logger.error("请求对方服务器错误{}".format(str(result))) self.order_obj.down_status = '2' else: self.order_obj.down_status = '0' else: request_data = { "businessid" : str(user.userid), "ordercode" : str(self.order_obj.ordercode), "down_ordercode" : str(self.order_obj.down_ordercode), # "amount1": str(self.order_obj.amount), "amount" : str(self.amount), "pay_time" : str(UtilTime().timestamp), "status" : "00" } md5params = "{}{}{}{}{}{}{}".format( user.google_token, request_data['businessid'], request_data['ordercode'], request_data['down_ordercode'], request_data['amount'], request_data['pay_time'], user.google_token) md5params = md5params.encode("utf-8") request_data['sign'] = hashlib.md5(md5params).hexdigest() logger.info("验签回调参数:{}{}".format(self.order_obj.notifyurl,request_data)) try: result = request('POST', url=urllib.parse.unquote(self.order_obj.notifyurl), data=request_data , json=request_data, verify=False) logger.info("返回值:{}".format(result.text)) if result.text.strip() != 'SUCCESS': logger.error("请求对方服务器错误{}".format(str(result.text))) self.order_obj.down_status = '2' else: self.order_obj.down_status = '0' except Exception as e: logger.info("下游错误:{}".format(str(e))) self.order_obj.down_status = '2'
import time
def pclogin(self,datas): rdatas=[] for item in datas: try: wbUserObj = WeiboUser.objects.get(username=item['username']) except WeiboUser.DoesNotExist: rdatas.append({ "username":wbUserObj.username, "code":"10001", "msg":"账号不存在系统登录失败!" }) continue wbLFPClass = WeiboLoginForPc(username=wbUserObj.username,password=wbUserObj.password) if 'params' in item and item['params']['showpin'] == '1': wbLFPClass.login_params = item['params'] wbLFPClass.login_params['vercode'] = item['vercode'] try: if wbUserObj.session: session = json.loads(wbUserObj.session) else: session = {} session['cookie'] = {} res = wbLFPClass.login() print(res) session['uid'] = res['uid'] session['cookie']['pccookie'] = res['cookie']['pccookie'] wbUserObj.session = json.dumps(session) wbUserObj.uid = session['uid'] wbUserObj.logintime = UtilTime().timestamp wbUserObj.save() except Exception as e: logger.error(str(e)) rdatas.append({ "username": wbUserObj.username, "code": "10002", "msg": "密码或验证码错误,请重新输入!", "url": wbLFPClass.getvercodeUrl(), "params" : wbLFPClass.login_params }) continue else: wbLFPClass.preLogin() if wbLFPClass.login_params['showpin'] == '1': rdatas.append({ "username": wbUserObj.username, "code": "10002", "msg": "需要获取验证码登录!", "url": wbLFPClass.getvercodeUrl(), "params" : wbLFPClass.login_params }) continue else: try: if wbUserObj.session: session = json.loads(wbUserObj.session) else: session = {} session['cookie'] = {} res = wbLFPClass.login() print(res) session['uid'] = res['uid'] session['cookie']['pccookie'] = res['cookie']['pccookie'] wbUserObj.session = json.dumps(session) wbUserObj.uid = session['uid'] wbUserObj.logintime = UtilTime().timestamp wbUserObj.save() except Exception as e: logger.error(str(e)) rdatas.append({ "username":wbUserObj.username, "code": "10001", "msg":"账号或密码错误!" }) continue print(rdatas) return rdatas