def __init__(self): super().__init__() self._all_average_logger = configure_logger("all_average") self._order_list_logger = configure_logger("order_list") self._host_id = None # 设置host id if domain: self.set_host_id(domain[0])
def __init__(self): # 支付宝单独的日志 self._logger = configure_logger("alipay") # 构建支付宝基础服务 self._client = None self._sandbox_debug = pay_config['sandbox_debug'] self._appId = pay_config['appId'] self._rsaPrivateKey = pay_config['rsaPrivateKey'] self._rsaPublickKey = pay_config['rsaPublickKey'] self._alipay_public_key = pay_config['alipayrsaPublicKey'] self._alipayCertPublicKey_RSA2 = pay_config['alipayCertPublicKey_RSA2'] self._alipayRootCert = pay_config['alipayRootCert'] self._appCertPublicKey = pay_config['appCertPublicKey'] self.build_client()
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'jingyu.he' import base64 import hashlib import redis from redis import sentinel import traceback from urllib.parse import parse_qs from conf.constants import * from utils.logger_conf import configure_logger from utils.get_conf import * log_path = get_logger_file() log_path = log_path + 'author.log' author_log = configure_logger('author', log_path) try: if if_redis_sentinel: _hosts = [hp.split(':') for hp in pre_rs_hosts] hosts = [(hp[0].strip(), int(hp[1].strip())) for hp in _hosts] r_sentinel = sentinel.Sentinel(hosts, socket_timeout=r_timeout) redis_cli = r_sentinel.master_for(r_master, socket_timeout=r_timeout, password=r_password, db=r_database, decode_responses=True) else: redis_cli = redis.StrictRedis(host=r_host, port=r_port, db=r_database,
# -*- encoding:utf-8 -*- from service import app from utils.logger_conf import configure_logger logger = configure_logger('root') __author__ = 'jingyu.he' if __name__ == '__main__': app.run(host="0.0.0.0", port=5002, debug=False)
from flask import request, jsonify, render_template, Blueprint import base64 import requests import asyncio import time from utils.utility import Utility from conf.constants import * from utils.authorization import check_ckey from utils.request_util import RequestUtil from utils.get_conf import * from conf.sharemsg_params_define import * from utils.logger_conf import configure_logger log_path = get_logger_file() log_path = log_path + 'sharemsg.log' sharemsg_logger = configure_logger('sharemsg', log_path) sharemsg_blueprint = Blueprint('sharemsg', __name__, template_folder='../../templates', static_folder='../../static') # sharemsg_blueprint = Blueprint('sharemsg', __name__) def authorization(func): def wrapper(*args, **kw): ckey = '' user_id = 'DEFAULT' request_util = RequestUtil() res = False
#!/usr/bin/env python # -*- coding:utf-8 -*- from utils.request_util import RequestUtil from flask import request, jsonify from conf.constants import * from utils.authorization import check_ckey from utils.logger_conf import configure_logger import requests log_path = get_logger_file('read_envelope_check_ck.log') ck_logger = configure_logger('read_envelope_check_ck', log_path) def authorization(func): def wrapper(*args, **kw): # ckey = '' # user_id = '' request_util = RequestUtil() user_id = request_util.get_user(request) res = False if is_check_ckey: ckey = request_util.get_ckey(request) if ckey: if auth_ckey_url: try: r_data = {'ckey': ckey, 'system': 'red_envelope'} ret = requests.post(url=auth_ckey_url, json=r_data) # r_domain.append(ret.json().get('data').get('d')) ck_logger.info("ckey:{},ret:{}".format(ckey, ret.text)) if ret.json().get('ret'):
from utils.get_conf import get_config_file, get_logger_file from utils.logger_conf import configure_logger config = get_config_file() pgconfig = config['postgresql'] host = pgconfig['host'] port = pgconfig['port'] user = pgconfig['user'] database = pgconfig['database'] password = pgconfig['password'] domain = config['qtalk']['domain'] conference_str = 'conference.' + domain log_path = get_logger_file() log_path = log_path + '_sql.log' logger = configure_logger('sql', log_path) class UserLib: def __init__(self): self.conn = psycopg2.connect(host=host, database=database, user=user, password=password, port=port) self.conn.autocommit = True def search_user(self, username, user_id, limit, offset): s_result = list() conn = self.conn sql = "select aa.user_id,aa.department,aa.icon,aa.user_name,aa.mood from (SELECT a.user_id, a.department, b.url AS icon, a.user_name, b.mood FROM host_users a LEFT JOIN vcard_version b ON a.user_id = b.username WHERE a.hire_flag = 1 AND LOWER(a.user_type) != 's' AND (a.user_id ILIKE '%" + username + "%' OR a.user_name ILIKE '%" + username + "%' OR a.pinyin ILIKE '%" + username + "%')) aa left join (select case when m_from = '" + user_id + "' then m_to else m_from end as contact,max(create_time) mx from msg_history where m_from = '" + user_id + "' or m_to = '" + user_id + "' group by contact) bb on aa.user_id = bb.contact order by bb.mx desc nulls last limit " + str(
def pay_success(): current_args = RequestUtil.get_request_args(request) logger = configure_logger("pay_success") logger.info("支付回调接口参数:" + json.dumps(current_args)) # 测试的时候暂不验签 pa = PayAlipay() status = pa.check_sign(**current_args) if not status: logger.info("验签失败") return "fail" # 商家的appid app_id = current_args['app_id'] if app_id != pay_config['appId']: logger.info("appid校验失败") return "fail" # 如果不是支付回调 直接返回fail if current_args['msg_method'] != 'alipay.fund.trans.order.changed': logger.info("msg_method 不是 alipay.fund.trans.order.changed") return "fail" current_args = json.loads(current_args['biz_content']) ''' { "action_type": "FINISH", "biz_scene": "PERSONAL_PAY", "order_id": "20190912110075000006740023648562", #支付宝系统的单据唯一ID "origin_interface": "alipay.fund.trans.app.pay", #支付的接口 "out_biz_no": "qt_20190912162507_298",#商户端的唯一订单号 "pay_date": "2019-09-12 16:25:15", "pay_fund_order_id": "20190912110075001506740023416000",#支付宝支付资金流水号(转账成功时才返回) "product_code": "STD_RED_PACKET", "status": "SUCCESS", "trans_amount": "0.01" } ''' # 只有成功的 才进行下一部 if current_args['status'] != 'SUCCESS': logger.info("本次status:%s ,直接返回success" % current_args['status']) return "success" # 支付宝交易号 pay_order_no = current_args['order_id'] pay_order_line = current_args['pay_fund_order_id'] # 商家唯一订单号 out_order_no = current_args['out_biz_no'] # 支付金额 amount = float(current_args['trans_amount']) # 付款时间 gmt_payment = current_args['pay_date'] red_instance = RedEnvelopeSql() conn = red_instance.get_pg_conn() pg_cursor = red_instance.get_pg_dict_cursor() sql = "Select id,state,order_type,credit from public.order_list where order_no=%s" try: pg_cursor.execute(sql, (out_order_no,)) row = pg_cursor.fetchone() conn.commit() except Exception as e: pg_cursor.close() logger.info("订单号order_no为:%s,数据库执行失败" % out_order_no) return "fail" if not row: pg_cursor.close() logger.info("订单未查找成功,订单号order_no为%s" % out_order_no) return "fail" if row['state'] != 'unpay': pg_cursor.close() logger.info("订单未查找成功,订单号order_no为%s;订单状态为%s,不在进行操作" % (out_order_no, row['state'])) if row['state'] == 'pay': return "success" return "fail" if row['order_type'] != 'red_envelope' and row['order_type'] != 'all_average': pg_cursor.close() logger.info("订单未查找成功,订单号order_no为%s;订单状态为%s,order_type:%s;直接退出" % (out_order_no, row['order_type'])) return "fail" if amount != float(row['credit']): pg_cursor.close() logger.info("支付金额与订单金额不符,支付金额 %s VS 订单金额 %s" % (amount, row['credit'])) return "fail" # 修改订单状态 # auth_no:pay_order_no # out_order_no:order_no # operation_id:pay_order_line # out_request_no:order_line # 插入订单流水 try: order_sql = """Update public.order_list set state='pay', pay_order_no=%(pay_order_no)s,pay_order_line=%(pay_order_line)s, pay_time=%(gmt_payment)s where order_no=%(out_order_no)s and state='unpay'""" pg_cursor.execute(order_sql, {"pay_order_no": pay_order_no, "pay_order_line": pay_order_line, "gmt_payment": gmt_payment, "out_order_no": out_order_no}) if 0 == parse_psycopg2_statusmessage(pg_cursor.statusmessage): pg_cursor.close() logger.info("订单未查找成功,订单号order_no为%s;更新失败" % out_order_no) return "fail" conn.commit() except Exception as e: pg_cursor.close() logger.info("订单号order_no为%s;更新成为pay状态失败" % out_order_no) return "fail" pay_order = PayOrder(id=row['id']) order_trace_result = pay_order.insert_order_trace(order_line=out_order_no) # 生成小红包 if row['order_type'] == 'red_envelope': try: rel = RedEnvelope(order_id=row['id']) except Exception as e: logger.info("订单号order_no为%s;红包不存在;error_code:%s" % (out_order_no, str(e))) return "fail" ret = rel.generate_sub_redenv() if not ret['ret']: return jsonify({"ret": False, "error_msg": "红包生成失败"}) # 发送红包消息 params = {"msg_type": "pay_success", "id": rel.id, "group_id": rel.group_chat_id[0]} rel.add_qtalk_message_queue(**params) elif row['order_type'] == 'all_average': try: aas = AllAverageSql() ret = aas.pay_success_callback(order_no=out_order_no, ) if not ret: print("aa状态数据库更新失败") return 'failed' pa = PayAlipay() payee_info = aas.get_aa_payee(order_no=out_order_no) print("获取 支付者信息 {}".format(payee_info)) order_line = order_trace_result['data']['order_line'] print("准备支付") print("...original order id: {}".format(pay_order.get_pay_order_no())) print("...order_no: {}".format(order_line)) print("...payee_info: {}".format(payee_info)) disburse_result = pa.disburse( order_no=str(order_line), original_order_id=str(pay_order.get_pay_order_no()), amount=float(row['credit']), payee_logon_id=str(payee_info), title=pay_config['all_average']['grab_bill_title'] ) print("支付返回 {}".format(disburse_result)) if not disburse_result['ret']: print("支付失败, 没有拿到返回, 结果 {}".format(disburse_result)) # pg_cursor_normal.execute("rollback") # message = message_prefix + "\n红包领取转账失败;\n返回结果:%s" % (json.dumps(disburse_result, ensure_ascii=False)) # 更新order_trace表 order_trace_result = pay_order.insert_order_trace(**{ "order_line": order_line, "op": "return_balance", "credit": float(row['credit']), "pay_order_no": "", "pay_status": "re_balance_faild", 'trace_comments': disburse_result }) else: order_trace_result = pay_order.insert_order_trace(**{ "order_line": order_line, "op": "return_balance", "credit": float(row['credit']), "pay_order_no": disburse_result['order_id'], "pay_status": "re_balance_ok", 'trace_comments': disburse_result }) if order_trace_result['ret'] != 1: print("插入失败") print("\n红包调用支付宝成功,插入order_trace失败,order_line:%s;请检order_list日志" % order_line) except Exception as e: print(e) print(traceback.print_exc()) print("aa状态更新失败") return "failed" return "success"
# -*- encoding:utf-8 -*- from flask import Blueprint, request, jsonify import json from utils.request_util import RequestUtil from utils.common_sql import UserLib from utils.get_conf import get_config_file, get_logger_file from utils.logger_conf import configure_logger search_blueprint = Blueprint('search', __name__) # -------------------------- 生成logger -------------------------- log_path = get_logger_file() log_path = log_path + '_search.log' logger = configure_logger('main', log_path) # -------------------------- 读取默认配置 -------------------------- config = get_config_file() is_check_ckey = config['qtalk'].getboolean('ckey_check') if is_check_ckey: logger.info("CKEY AUTHORIZATION INITIALING...") from utils.authorization import check_ckey single_portrait = config['qtalk']['single_portrait'] muc_portrait = config['qtalk']['muc_portrait'] # -------------------------- 既定的配置 -------------------------- userGroup = 'Q01' groupGroup = 'Q02' singlekeywordGroup = 'Q05' muckeywordGroup = 'Q06' commonGroup = 'Q07'
#!/usr/bin/env python # -*- coding:utf-8 -*- # import json from flask import request, jsonify, render_template, Blueprint import datetime import requests from conf.constants import * from utils.authorization import check_ckey from utils.request_util import RequestUtil from conf.meetingdetail_params_define import * from utils.logger_conf import configure_logger log_path = get_logger_file('meetingdetail.log') meeting_logger = configure_logger('meetingdetail', log_path) meeting_blueprint = Blueprint('meeting', __name__, template_folder='../../templates', static_folder='../../static') def authorization(func): def wrapper(*args, **kw): ckey = '' user_id = 'DEFAULT' request_util = RequestUtil() res = False if is_check_ckey: ckey = request_util.get_ckey(request) if ckey:
__author__ = 'jingyu.he' import json from utils.common_sql import UserLib from xml.etree import ElementTree as eTree from conf.search_params_define import if_lookback, if_es from conf.cache_params_define import SINGLE_KEY, MUC_KEY, SINGLE_TRACE_KEY, MUC_TRACE_KEY, SINGLE_CACHE, MUC_CACHE, \ ALL_USER_DATA_CACHE, USER_MUCS from utils.redis_utils import RedisUtil from utils.logger_conf import get_logger_file, configure_logger from utils.redis_utils import redis_cli from utils.common_sql import UserLib, AsyncLib, if_async from utils.time_utils import TimeUtils time_utils = TimeUtils() log_path = get_logger_file('search.log') lookback_logger = configure_logger('search', log_path) cache_redis_cli = RedisUtil() class LookbackLib: def __init__(self, args, user_id, timeout=5): # 参数获取 self.timeout=timeout userlib = None self.args = args self.user = user_id self.group_id = args.get("groupid", "") self.offset = int(args.get("start", 0)) self.limit = int(args.get("length", 5)) # 关键词处理, 控制长度在2-20个字符之间