def package(): ''' 查询不同套餐的对应的价格 :return: ''' key = request.args.get('key') data = SqlData().search_reg_money(key) money = data.get('money') days = data.get('days') price = data.get('price') return jsonify({'code': RET.OK, 'money': money, 'days': days, 'price': price})
def login(): ''' 注册接口 :return: ''' if request.method == 'GET': context = dict() # 判断是否是通过中介链接过来的,是则保留middle_key referer = request.headers.get('Referer') if referer: results = re.findall('middle_key=(.*)', referer) if results: context['middle_key'] = '?middle_key=' + results[0] return render_template('user/login.html', **context) if request.method == 'POST': user_name = request.form.get('uname') user_pass = request.form.get('upwd') if not all([user_name, user_pass]): return jsonify({'code': RET.SERVERERROR, 'msg': '请完善登录信息后重试!'}) results = {'code': RET.OK, 'msg': MSG.OK} user_data = SqlData().search_user_info(user_name) try: if user_data: user_id = user_data.get('user_id') pass_word = user_data.get('password') name = user_data.get('name') stop_time = user_data.get('stop_time') n_time = xianzai_time() if not verify_login_time(n_time, stop_time): results['code'] = RET.SERVERERROR results['msg'] = '账号已到期,请联系管理员处理!' return jsonify(results) if user_pass == pass_word: session['user_id'] = user_id session['name'] = name session.permanent = True return jsonify(results) else: results['code'] = RET.SERVERERROR results['msg'] = '账号密码错误!' return jsonify(results) else: results['code'] = RET.SERVERERROR results['msg'] = '账号密码错误!' return jsonify(results) except Exception as e: logging.error(str(e)) results['code'] = RET.SERVERERROR results['msg'] = '账号密码错误!' return jsonify(results)
def make_name(n): name_dict = SqlData().search_name_info() last_name = name_dict.get('last_name') female = name_dict.get('female') female_len = len(female) last_len = len(last_name) name_list = list() for i in range(n): name = female[random.randint( 0, female_len - 1)] + " " + last_name[random.randint( 0, last_len - 1)] name_list.append(name) return name_list
def user_info(): user_name = g.user_name user_id = g.user_id dict_info = SqlData().search_user_detail(user_id) account = dict_info.get('account') phone_num = dict_info.get('phone_num') balance = dict_info.get('balance') context = { 'user_name': user_name, 'account': account, 'balance': balance, 'phone_num': phone_num, } return render_template('user/user_info.html', **context)
def reg_check(): if request.method == 'GET': pay_time = request.args.get('pay_time') u_name = request.args.get('u_name') package = request.args.get('package') context = dict() context['pay_time'] = pay_time context['u_name'] = u_name context['package'] = package return render_template('verify_pay/reg_check.html', **context) if request.method == 'POST': try: results = dict() data = json.loads(request.form.get('data')) pay_time = data.get('pay_time') u_name = data.get('u_name') package = data.get('package') check = data.get('check') ver_code = data.get('ver_code') # 校验参数验证激活码 if check != 'yes': results['code'] = RET.SERVERERROR results['msg'] = '请确认已收款!' return jsonify(results) # 查询邮件中的验证码 pass_wd = SqlData().search_account_reg_field('ver_code', pay_time, u_name) if pass_wd != ver_code: results['code'] = RET.SERVERERROR results['msg'] = '验证码错误!' return jsonify(results) # 却认订单状态 status = SqlData().search_account_reg_field('status', pay_time, u_name) if status: results['code'] = RET.SERVERERROR results['msg'] = '该订单已充值,请刷新界面!' return jsonify(results) # 验证成功后,做新增客户端账号(基础参数还需:建卡费, 最低充值,最高充值) # 根据选择的套餐查出对应的收费标准 data = SqlData().search_reg_money(package) price = data.get('price') refund = data.get('refund') min_top = data.get('min_top') max_top = data.get('max_top') u_acc = SqlData().search_account_reg_field('u_acc', pay_time, u_name) u_pass = SqlData().search_account_reg_field('u_pass', pay_time, u_name) phone = SqlData().search_account_reg_field('phone', pay_time, u_name) start_time = SqlData().search_account_reg_field('start_time', pay_time, u_name) stop_time = SqlData().search_account_reg_field('stop_time', pay_time, u_name) SqlData().insert_account(u_acc, u_pass, phone, u_name, price, refund, min_top, max_top, start_time, stop_time) # 添加默认充值记录0元(用于单独充值结算总充值金额避免BUG) n_time = xianzai_time() account_id = SqlData().search_user_field_name('id', u_name) SqlData().insert_top_up('10001', n_time, 0, 0, 0, account_id, '系统') # 判断是否是中介介绍,如果是则绑定到中介 middle_id = SqlData().search_account_reg_field('middle_id', pay_time, u_name) if middle_id: SqlData().update_user_field_int('middle_id', middle_id, account_id) # 更新首款码收款金额 pay_money = SqlData().search_account_reg_field('reg_money', pay_time, u_name) url = SqlData().search_account_reg_field('url', pay_time, u_name) SqlData().update_qr_money('top_money', pay_money, url) # 更新订单状态和确认时间 SqlData().update_account_reg_field('status', '已确认', pay_time, u_name) SqlData().update_account_reg_field('ver_time', n_time, pay_time, u_name) # 给客户和代充值人发送短信通知 if phone: CCP().send_Template_sms(phone, [u_name, n_time, u_acc, u_pass], 488712) results['code'] = RET.OK results['msg'] = MSG.OK return jsonify(results) except Exception as e: logging.error(str(e)) results = dict() results['code'] = RET.SERVERERROR results['msg'] = MSG.SERVERERROR return jsonify(results)
def account_html(): # 用户主页端 ''' #关闭系统时,返回的信息 return "<html><div style='position:absolute;z-index:99;padding-top:346px;left:50%;margin-left:-600px;'>" \ "<h1>{}</h1><div></html>".format('系统临时升级,预计今晚12点前能恢复。做生成的卡可以继续使用。有问题可以联系各自管理员') ''' user_name = g.user_name user_id = g.user_id dict_info = SqlData().search_user_index(user_id) create_card = dict_info.get('create_card') # 百分数显示所以乘一百 refund = dict_info.get('refund') * 100 min_top = dict_info.get('min_top') max_top = dict_info.get('max_top') balance = dict_info.get('balance') sum_balance = dict_info.get('sum_balance') free = dict_info.get('free') # 判断账号有效期是否大于30天 stop_time = dict_info.get('stop_time') s = xianzai_time() res = verify_login_time(s, stop_time, range_s=2592000) if not res: stop_string = '账号使用权到期时间: ' + stop_time else: stop_string = '' out_money = SqlData().search_trans_sum(user_id) ex_change = SqlData().search_admin_field('ex_change') ex_range = SqlData().search_admin_field('ex_range') hand = SqlData().search_admin_field('hand') notice = SqlData().search_admin_field('notice') pay_money = SqlData().search_card_remain(user_id) # 根据推送信息计算失败率 all_payed = SqlData().search_table_count("push_log WHERE account_id={} AND trans_type!='手续费'".format(user_id)) fail = SqlData().search_table_count("push_log WHERE account_id={} AND trans_status='交易失败'".format(user_id)) if all_payed == 0: fail_pro = '0.00%' else: fail_pro = "%.2f%%" % ((fail / all_payed) * 100) context = dict() context['user_name'] = user_name context['balance'] = balance context['pay_money'] = pay_money context['refund'] = refund context['create_card'] = create_card context['min_top'] = min_top context['max_top'] = max_top context['sum_balance'] = sum_balance context['out_money'] = out_money context['ex_change'] = ex_change context['ex_range'] = ex_range context['hand'] = hand context['notice'] = notice context['free'] = free context['fail_pro'] = fail_pro context['stop_time'] = stop_string context['tip_context'] = '' return render_template('user/index.html', **context)
def create_card(): ''' 单卡开卡 :return: ''' data = json.loads(request.form.get('data')) card_name = data.get('card_name') top_money = data.get('top_money') label = data.get('label') user_id = g.user_id user_data = SqlData().search_user_index(user_id) create_price = user_data.get('create_card') min_top = user_data.get('min_top') max_top = user_data.get('max_top') balance = user_data.get('balance') if not check_float(top_money): results = {"code": RET.SERVERERROR, "msg": "充值金额不能为小数!"} return jsonify(results) # 本次开卡需要的费用,计算余额是否充足 money_all = int(top_money) + create_price if money_all > balance: results = {"code": RET.SERVERERROR, "msg": "本次消费金额:" + str(money_all) + ",账号余额不足!"} return jsonify(results) # 计算充值金额是否在允许范围 if not min_top <= int(top_money) <= max_top: results = {"code": RET.SERVERERROR, "msg": "充值金额不在允许范围内!"} return jsonify(results) try: # my_lock.acquire() activation = SqlData().search_activation() if not activation: return jsonify({"code": RET.SERVERERROR, "msg": "请联系服务商添加库存!"}) pay_passwd = "04A5E788" SqlData().update_card_info_field('card_name', 'USING', activation) # my_lock.acquire() # 开卡及更新相关信息(批量开卡为同一流程步骤) resp = QuanQiuFu().create_card(activation, pay_passwd) resp_code = resp.get('resp_code') if resp_code != '0000' and resp_code != '0079': resp_msg = resp.get('resp_msg') s = '卡激活失败! 状态码: ' + resp_code + ',信息: ' + resp_msg + '激活码为: ' + activation logging.error(s) return jsonify({"code": RET.SERVERERROR, "msg": resp_msg}) SqlData().update_card_info_field('account_id', user_id, activation) card_no = resp.get('response_detail').get('card_no') # 查询当次开卡是否免费 free_num = SqlData().search_user_field('free', user_id) # 有免费开卡数量则,设置开卡费用为0元,没有则获取设置的单价 if free_num > 0: # 设置开卡单价,并更新可免费开卡数量 create_price = 0 SqlData().update_remove_free(user_id) elif free_num == 0: create_price = SqlData().search_user_field('create_price', user_id) # 查询账户操作前的账户余额 before_balance = SqlData().search_user_field('balance', user_id) do_money = create_price - create_price * 2 # 直接更新账户余额,不计算理论余额,用sql更新本次操作费用 SqlData().update_balance(do_money, user_id) balance = SqlData().search_user_field('balance', user_id) n_time = xianzai_time() SqlData().insert_account_trans(n_time, TRANS_TYPE.OUT, DO_TYPE.CREATE_CARD, 1, card_no, create_price, 0, before_balance, balance, user_id) # 查询卡信息,及更新相关信息 resp_card_info = QuanQiuFu().query_card_info(card_no) if resp_card_info.get('resp_code') != '0000': expire_date = '' card_verify_code = '' else: re_de = resp_card_info.get('response_detail') expire_date = re_de.get('expire_date') card_verify_code = re_de.get('card_verify_code') SqlData().update_card_info(card_no, pay_passwd, n_time, card_name, label, expire_date, card_verify_code, user_id, activation) money = str(int(float(top_money) * 100)) # 给卡里充值金额,及更新相关信息 resp = QuanQiuFu().trans_account_recharge(card_no, money) resp_code = resp.get('resp_code') if resp_code == '0000': top_money = float(top_money) SqlData().update_card_remain('remain', top_money, card_no) # 查询账户操作前的账户余额 before_balance = SqlData().search_user_field('balance', user_id) do_money_top = top_money - top_money * 2 # 直接更新账户余额,不计算理论余额,用sql更新本次操作费用 SqlData().update_balance(do_money_top, user_id) balance = SqlData().search_user_field('balance', user_id) n_time = xianzai_time() SqlData().insert_account_trans(n_time, TRANS_TYPE.OUT, DO_TYPE.TOP_UP, 1, card_no, top_money, 0, before_balance, balance, user_id) return jsonify({"code": RET.OK, "msg": "开卡成功!请刷新界面!"}) else: resp_msg = resp.get('resp_msg') s = '充值卡余额失败,状态码: ' + resp_code + ',信息: ' + resp_msg logging.error(s) return jsonify({"code": RET.SERVERERROR, "msg": "开卡成功,充值失败!"}) except Exception as e: logging.error(e) results = {"code": RET.SERVERERROR, "msg": MSG.SERVERERROR} return jsonify(results)
def create_some(): ''' 批量开卡接口 :return: ''' # print(session.get('create')) data = json.loads(request.form.get('data')) card_num = data.get('card_num') name_status = data.get('n') content = data.get('content') limit = data.get('limit') label = data.get('label') user_id = g.user_id user_data = SqlData().search_user_index(user_id) create_price = user_data.get('create_card') min_top = user_data.get('min_top') max_top = user_data.get('max_top') balance = user_data.get('balance') card_num = int(card_num) if card_num > 20: results = {"code": RET.SERVERERROR, "msg": "批量开卡数量不得超过20张!"} return jsonify(results) if name_status == "write": name_list = content.split("|") if len(name_list) < card_num: results = {"code": RET.SERVERERROR, "msg": "名字数量小于建卡数量!"} return jsonify(results) else: name_list = make_name(card_num) if not check_float(limit): results = {"code": RET.SERVERERROR, "msg": "充值金额不能为小数!"} return jsonify(results) sum_money = card_num * int(limit) + card_num * create_price # 本次开卡需要的费用,计算余额是否充足 if sum_money > balance: results = {"code": RET.SERVERERROR, "msg": "本次消费金额:" + str(sum_money) + ",账号余额不足!"} return jsonify(results) # 计算充值金额是否在允许范围 if not min_top <= int(limit) <= max_top: results = {"code": RET.SERVERERROR, "msg": "充值金额不在允许范围内!"} return jsonify(results) act_count = SqlData().search_activation_count() if act_count < card_num: results = {"code": RET.SERVERERROR, "msg": "请联系服务商添加库存!"} return jsonify(results) # 查询是否有免费开卡的数量(如果没有,就不必在循环开卡的时候反复查询,浪费资源) free = SqlData().search_user_field('free', user_id) try: for i in range(card_num): # my_lock.acquire() activation = SqlData().search_activation() if not activation: return jsonify({"code": RET.SERVERERROR, "msg": "请联系服务商添加库存!"}) SqlData().update_card_info_field('card_name', 'USING', activation) # my_lock.release() pay_passwd = "04A5E788" resp = QuanQiuFu().create_card(activation, pay_passwd) resp_code = resp.get('resp_code') # print(resp_code) if resp_code != '0000' and resp_code != '0079': resp_msg = resp.get('resp_msg') s = '激活卡失败,状态码: ' + resp_code + ',信息: ' + resp_msg + ',激活码为:' + activation logging.error(s) return jsonify({"code": RET.SERVERERROR, "msg": resp_msg}) SqlData().update_card_info_field('account_id', user_id, activation) card_no = resp.get('response_detail').get('card_no') # 如果有免费开卡数量,则每次开卡查询免费数量,没有则不必每次查询 if free > 0: # 查询当次开卡是否免费 free_num = SqlData().search_user_field('free', user_id) # 有免费开卡数量则,设置开卡费用为0元,没有则获取设置的单价 if free_num > 0: # 设置开卡单价,并更新可免费开卡数量 create_price = 0 SqlData().update_remove_free(user_id) elif free_num == 0: create_price = SqlData().search_user_field('create_price', user_id) # 查询账户操作前的账户余额 before_balance = SqlData().search_user_field('balance', user_id) do_money = create_price - create_price * 2 # 直接更新账户余额,不计算理论余额,用sql更新本次操作费用 SqlData().update_balance(do_money, user_id) balance = SqlData().search_user_field('balance', user_id) n_time = xianzai_time() SqlData().insert_account_trans(n_time, TRANS_TYPE.OUT, DO_TYPE.CREATE_CARD, 1, card_no, create_price, 0, before_balance, balance, user_id) resp_card_info = QuanQiuFu().query_card_info(card_no) # print(resp_card_info) if resp_card_info.get('resp_code') != '0000': expire_date = '' card_verify_code = '' else: re_de = resp_card_info.get('response_detail') expire_date = re_de.get('expire_date') card_verify_code = re_de.get('card_verify_code') card_name = name_list.pop() SqlData().update_card_info(card_no, pay_passwd, n_time, card_name, label, expire_date, card_verify_code, user_id, activation) money = str(int(limit) * 100) resp = QuanQiuFu().trans_account_recharge(card_no, money) resp_code = resp.get('resp_code') # print(resp) if resp_code == '0000': top_money = int(limit) # 更新卡缓存余额 SqlData().update_card_remain('remain', top_money, card_no) # 查询账户操作前的账户余额 before_balance = SqlData().search_user_field('balance', user_id) do_money_top = top_money - top_money * 2 # 直接更新账户余额,不计算理论余额,用sql更新本次操作费用 SqlData().update_balance(do_money_top, user_id) balance = SqlData().search_user_field('balance', user_id) n_time = xianzai_time() SqlData().insert_account_trans(n_time, TRANS_TYPE.OUT, DO_TYPE.TOP_UP, 1, card_no, top_money, 0, before_balance, balance, user_id) else: resp_msg = resp.get('resp_msg') s = '充值卡余额失败,状态码: ' + resp_code + ',信息: ' + resp_msg logging.error(s) card_num = str(i+1) s = "成功开卡"+card_num+"张,充值第"+card_num+"失败!请单独充值卡号:"+card_no+"!" return jsonify({"code": RET.SERVERERROR, "msg": s}) return jsonify({"code": RET.OK, "msg": "成功开卡"+str(card_num)+"张!请刷新界面!"}) except Exception as e: logging.error(e) results = {"code": RET.SERVERERROR, "msg": MSG.SERVERERROR} return jsonify(results)
def pay_pic(): ''' 用户注册支付姐界面 :return: ''' if request.method == 'GET': u_name = request.args.get('u_name') u_acc = request.args.get('u_acc') u_pass = request.args.get('u_pass') phone = request.args.get('phone') middle_key = request.args.get('middle_key') package = SqlData().search_reg_package() # 取出目前当前收款金额最低的收款码 qr_info = SqlData().search_qr_code('WHERE status=0') if not qr_info: url = '' else: url = '' value_list = list() for i in qr_info: value_list.append(i.get('sum_money')) value = min(value_list) for n in qr_info: money = n.get('sum_money') if value == money: url = n.get('qr_code') break context = dict() context['u_name'] = u_name context['u_acc'] = u_acc context['u_pass'] = u_pass context['phone'] = phone context['url'] = url context['middle_key'] = middle_key context['package_list'] = package return render_template('user/register_pay.html', **context) if request.method == 'POST': ''' 获取充值金额, 保存付款截图. 发送邮件通知管理员 ''' try: # 两组数据,1,表单信息充值金额,等一下客户信息 2,截图凭证最多可上传5张 # print(request.form) # print(request.files) data = json.loads(request.form.get('data')) u_name = data.get('u_name') u_acc = data.get('u_acc') u_pass = data.get('u_pass') phone = data.get('phone') middle_key = data.get('middle_key') url = json.loads(request.form.get('url')) package = json.loads(request.form.get('package')) results = {'code': RET.OK, 'msg': MSG.OK} if not request.files: results['code'] = RET.SERVERERROR results['msg'] = '请选择支付截图后提交!' return jsonify(results) data = SqlData().search_reg_money(package) reg_money = data.get('money') reg_days = data.get('days') # 判断是否是用中介的介绍链接进行注册的 middle_name = '' middle_id = 0 if middle_key: try: string = Base64Code().base_decrypt(middle_key.strip()) info_list = string.split('_') middle_id = int(info_list[0]) middle_name = SqlData().search_middle_field('name', middle_id) account = SqlData().search_middle_field('account', middle_id) if info_list[1] != middle_name or info_list[2] != account: return jsonify({'code': RET.SERVERERROR, 'msg': '请使用正确链接注册!'}) except Exception as e: logging.error(str(e)) return jsonify({'code': RET.SERVERERROR, 'msg': '请使用正确链接注册!'}) # 保存所有图片 file_n = 'file_' pic_list = list() for i in range(5): file_name = file_n + str(i+1) file_img = request.files.get(file_name) if file_img: now_time = sum_code() file_name = u_acc + "_" + now_time + str(i) + ".png" file_path = DIR_PATH.PHOTO_DIR + file_name file_img.save(file_path) pic_list.append(file_name) n_time = xianzai_time() pic_json = json.dumps(pic_list) ver_code = str(uuid.uuid1())[:6] context = "客户: " + u_acc + " , 于" + n_time + "申请注册全球付客户端账号: 金额" + str(reg_money) + "元, 有效使用期为 " + \ str(reg_days) + "天。 验证码为: " + ver_code stop_time = get_day_after(reg_days) SqlData().insert_account_reg(package, n_time, n_time, reg_money, reg_days, stop_time, u_name, u_acc, u_pass, phone, url, middle_id, middle_name, pic_json, ver_code) # 获取要推送邮件的邮箱 top_push = SqlData().search_admin_field('top_push') top_dict = json.loads(top_push) email_list = list() for i in top_dict: email_list.append(top_dict.get(i)) for p in email_list: send(context, pic_list, p) return jsonify(results) except Exception as e: logging.error(str(e)) return jsonify({'code': RET.SERVERERROR, 'msg': MSG.SERVERERROR})