Ejemplo n.º 1
0
def initialize(path_to_config_file, path_to_key_info_json):
    log = logging.getLogger('werkzeug')
    log.setLevel(logging.ERROR)
    success = ConfigManager.load(path_to_config_file)
    if not success:
        return False

    config = ConfigManager.getConfig()
    Logger.setLogFolder(config.server_log_file_folder)
    success = TransactionSigner.initialize()
    if not success:
        return False

    success = KeyInfoManager.load(path_to_key_info_json)
    if not success:
        return False

    if KeyInfoManager.getKeyInfo(KeyAlias.WHITELIST_CONTROLLER) == None:
        Logger.printError('%s key info not loaded!' %
                          (KeyAlias.WHITELIST_CONTROLLER))
        return False

    if KeyInfoManager.getKeyInfo(KeyAlias.EXCHANGE_RATE_CONTROLLER) == None:
        Logger.printError('%s key info not loaded!' %
                          (KeyAlias.EXCHANGE_RATE_CONTROLLER))
        return False

    success = TransactionSigner.initialize()
    if not success:
        return False

    return True
    def initialize():
        if not ConfigManager.isInitialized():
            return False

        try:
            theta_abi_file_path = ConfigManager.getConfig(
            ).getThetaAbiFilePath()
            with open(theta_abi_file_path) as abi_json_data:
                TransactionSigner._theta_abi = json.load(abi_json_data)
        except:
            return False
        if TransactionSigner._theta_abi is None:
            return False

        try:
            theta_token_sale_abi_file_path = ConfigManager.getConfig(
            ).getThetaTokenSaleAbiFilePath()
            with open(theta_token_sale_abi_file_path) as abi_json_data:
                TransactionSigner._theta_token_sale_abi = json.load(
                    abi_json_data)
        except:
            return False
        if TransactionSigner._theta_token_sale_abi is None:
            return False

        return True
    def get_amount():
        '''获取待结算表各账户的余额'''
        # 存管户
        depository_mch_accnt_no = ConfigManager.get_service(
            Constants.SubMerchant.DEPOSITORY)
        depository_event_amt = SqlSave.select_his_mch_accnt_keep_event_amt(
            depository_mch_accnt_no, 'depository')
        # 在途商户
        onway_mch_accnt_no = ConfigManager.get_service(
            Constants.SubMerchant.ONWAY)
        onway_event_amt = SqlSave.select_his_mch_accnt_keep_event_amt(
            onway_mch_accnt_no, 'onway')
        # 分润商户的损益金额
        profit_mch_accnt_no = ConfigManager.get_service(
            Constants.SubMerchant.PROFIT['profit_1'])
        profit_event_amt = SqlSave.select_his_mch_accnt_keep_event_amt(
            profit_mch_accnt_no, 'profit')
        # 子商户的金额
        mch_accnt_no = ConfigManager.get_service(
            Constants.SubMerchant.MUCSUB['mucsub_1'])
        mch_accnt_no_event_amt = SqlSave.select_his_mch_accnt_keep_event_amt(
            mch_accnt_no, 'pay')

        amount_list = [
            depository_event_amt, onway_event_amt, profit_event_amt,
            mch_accnt_no_event_amt
        ]

        return amount_list
Ejemplo n.º 4
0
 def mch_promotion_sttled_amt(self,
                              settled_ant_aft,
                              settled_ant_bef,
                              mach_pay_up_obj,
                              button='pay'):
     """准备金账户或子商户在请求前和请求后可结算金额变化"""
     for key, value in settled_ant_aft.items():
         if button.__eq__('pay'):
             if key.__eq__(
                     ConfigManager.get_service(
                         Constants.SubMerchant.PREPAY['prepay_1'])):
                 self.assertEqual(
                     int(value[0][0]) - int(settled_ant_bef[key][0][0]),
                     int(mach_pay_up_obj.trans_amt_dict[key]),
                     msg=
                     '准备金账户号为:%s的商户,对比子商户可结算金额时 请求后的金额:%s -  请求前的金额 %s 不等于 预期金额:-%s'
                     % (key, value[0][0], settled_ant_bef[key][0][0],
                        mach_pay_up_obj.trans_amt_dict[key]))
             continue
         else:
             if key != ConfigManager.get_service(
                     Constants.SubMerchant.PREPAY['prepay_1']):
                 self.assertEqual(
                     int(value[0][0]) - int(settled_ant_bef[key][0][0]),
                     -int(mach_pay_up_obj.trans_amt_dict[key]),
                     msg=
                     '商户账户号为:%s的商户,对比子商户可结算金额时 请求后的金额:%s -  请求前的金额 %s 不等于 预期金额:%s'
                     % (key, value[0][0], settled_ant_bef[key][0][0],
                        mach_pay_up_obj.trans_amt_dict[key]))
 def _getToAddress(smart_contract_name):
     if smart_contract_name == SmartContractName.THETA_TOKEN:
         return ConfigManager.getConfig().getThetaContractAddresss()
     elif smart_contract_name == SmartContractName.THETA_TOKEN_SALE:
         return ConfigManager.getConfig().getThetaTokenSaleContractAddresss(
         )
     else:
         return None
 def test_error_flow_none_promotion_refund(self, flow_error_none_Promotion):
     """
     异常活动金额支付流程,没有准备金账户
     """
     PreconditionKeepingAccounts.mct_promotion_pre(button=Constants.RESULT.FALSE,
                                    mch_no=ConfigManager.get_service(Constants.SubMerchant.PREPAY['prepay_2']))
     PreconditionKeepingAccounts.mct_promotion_pre(button=Constants.RESULT.FALSE,
                                    mch_no=ConfigManager.get_service(Constants.SubMerchant.PREPAY['prepay_1']))
     self.err_public(flow_error_none_Promotion)
     PreconditionKeepingAccounts.mct_promotion_pre(button=Constants.RESULT.TRUE,
                                    mch_no=ConfigManager.get_service(Constants.SubMerchant.PREPAY['prepay_1']))
Ejemplo n.º 7
0
 def update_super_money(button):
     """
     是否开启超额提现开关 True为开启
                       False为关闭
     """
     if button:
         sql = "update mch_other_config set spuer_money = '1' where mch_no = '%s'" % (
             ConfigManager.get_service(Constants.Merchant.CS))
     else:
         sql = "update mch_other_config set spuer_money = '0' where mch_no = '%s'" % (
             ConfigManager.get_service(Constants.Merchant.CS))
     ConnectionMysql().execute_db(sql)
 def mct_promotion_pre(button, all=False):
     """
     在提现时更改备用准备金账户类型为准备金
     :return:
     """
     # 多个准备金账户暂时不管
     if all:
         mch_no_list = [ConfigManager.get_service(Constants.SubMerchant.PREPAY['prepay_1']),
                        ConfigManager.get_service(Constants.SubMerchant.PREPAY['prepay_2'])]
     else:
         mch_no_list = [ConfigManager.get_service(Constants.SubMerchant.PREPAY['prepay_1'])]
     for i in mch_no_list:
         SqlSave.update_accnt_type(i, button=button)
Ejemplo n.º 9
0
 def update_card_name(button):
     """修改绑定银行卡姓名进行提现测试sql"""
     if button is False:
         sql = "update %s set cardholder_name='提现银行卡姓名修改' where mch_accnt_no='%s'" % (
             Constants.TableName.BANK_CARD,
             ConfigManager.get_service(
                 Constants.SubMerchant.MUCSUB['mucsub_4']))
     else:
         sql = "update %s set cardholder_name='靳伟' where mch_accnt_no='%s'" % (
             Constants.TableName.BANK_CARD,
             ConfigManager.get_service(
                 Constants.SubMerchant.MUCSUB['mucsub_4']))
     ConnectionMysql().execute_db(sql)
Ejemplo n.º 10
0
    def update_pay_url(pay_type):
        """更新提现真实请求的url"""
        success_url = Constants.MockUrl.SUCCESS
        fail_url = Constants.MockUrl.FAIL
        wait_url = Constants.MockUrl.WAIT
        time_out_url = Constants.MockUrl.TIME_OUT
        default = Constants.MockUrl.DEFAULT
        select_success_url = Constants.MockUrl.SELECT_SUCCESS
        select_none_url = Constants.MockUrl.SELECT_NONE
        select_wait_url = Constants.MockUrl.SELECT_WAIT
        select_fail_url = Constants.MockUrl.SELECT_FAIL
        select_long_url = Constants.MockUrl.SELECT_LONG

        if pay_type == 'success':
            sql = "update mch_config set pay_url = '%s' where mch_no = '%s'" % (
                success_url, ConfigManager.get_service(Constants.Merchant.CS))
        elif pay_type == 'fail':
            sql = "update mch_config set pay_url = '%s' where mch_no = '%s'" % (
                fail_url, ConfigManager.get_service(Constants.Merchant.CS))
        elif pay_type == 'wait':
            sql = "update mch_config set pay_url = '%s' where mch_no = '%s'" % (
                wait_url, ConfigManager.get_service(Constants.Merchant.CS))
        elif pay_type == 'time_out':
            sql = "update mch_config set pay_url = '%s' where mch_no = '%s'" % (
                time_out_url, ConfigManager.get_service(Constants.Merchant.CS))
        elif pay_type == 'select_success':
            sql = "update mch_config set pay_url = '%s' where mch_no = '%s'" % (
                select_success_url,
                ConfigManager.get_service(Constants.Merchant.CS))
        elif pay_type == 'select_none':
            sql = "update mch_config set pay_url = '%s' where mch_no = '%s'" % (
                select_none_url,
                ConfigManager.get_service(Constants.Merchant.CS))
        elif pay_type == 'select_wait':
            sql = "update mch_config set pay_url = '%s' where mch_no = '%s'" % (
                select_wait_url,
                ConfigManager.get_service(Constants.Merchant.CS))
        elif pay_type == 'select_fail':
            sql = "update mch_config set pay_url = '%s' where mch_no = '%s'" % (
                select_fail_url,
                ConfigManager.get_service(Constants.Merchant.CS))
        elif pay_type == 'select_long':
            sql = "update mch_config set pay_url = '%s' where mch_no = '%s'" % (
                select_long_url,
                ConfigManager.get_service(Constants.Merchant.CS))
        else:
            sql = "update mch_config set pay_url = '%s' where mch_no = '%s'" % (
                default, ConfigManager.get_service(Constants.Merchant.CS))
        ConnectionMysql().execute_db(sql)
Ejemplo n.º 11
0
 def public_handle(data, exc_data):
     """回填商户号"""
     if not isinstance(data, dict):
         data = json.loads(exc_data['data'])
     i = data.get('biz_content')
     if i.get('mch_accnt_no') in Constants.SubMerchant.MUCSUB.keys():
         i['mch_accnt_no'] = ConfigManager.get_service(
             Constants.SubMerchant.MUCSUB[i.get('mch_accnt_no')])
     if i.get('mch_accnt_no') in Constants.SubMerchant.PROFIT.keys():
         i['mch_accnt_no'] = ConfigManager.get_service(
             Constants.SubMerchant.PROFIT[i.get('mch_accnt_no')])
     if i.get('mch_accnt_no') in Constants.SubMerchant.PREPAY.keys():
         i['mch_accnt_no'] = ConfigManager.get_service(
             Constants.SubMerchant.PREPAY[i.get('mch_accnt_no')])
     return data
Ejemplo n.º 12
0
 def __init__(self):
     obj = ConfigManager.get_ini_obj()
     self.username = obj.get('param_iko', 'username').strip()
     self.password = obj.get('param_iko', 'password').strip()
     self.server_host = obj.get('param_iko', 'server_host').strip()
     self.port = obj.get('param_iko', 'port').strip()
     self.ssh = self.connect()
Ejemplo n.º 13
0
 def update_amount_for_prepay(amt, settled_amt):
     """更新准备金账户余额为10000"""
     sql = "update mch_accnt set remain_amt = '%s',settled_amount='%s' where mch_accnt_no = '%s'" % (
         amt, settled_amt,
         ConfigManager.get_service(
             Constants.SubMerchant.PREPAY['prepay_1']))
     ConnectionMysql().execute_db(sql)
 def mch_update_prepay_amount(amt='1000', set_amt='1000'):
     """
     设置提现准备金账户余额和可结算余额
     :return:
     """
     mch = ConfigManager.get_service(Constants.SubMerchant.PREPAY['prepay_1'])
     SqlSave.update_amount(amt, set_amt, mch)
Ejemplo n.º 15
0
 def mch_update_fixed_poundage(button, number):
     if button is True:
         sql = "update mch_other_config set fixed_poundage = '%s' where mch_no = '%s'" % (
             number, ConfigManager.get_service(Constants.Merchant.CS))
     else:
         sql = "update mch_other_config set fixed_poundage = null where mch_no = '%s'" % ConfigManager.get_service(
             Constants.Merchant.CS)
     ConnectionMysql().execute_db(sql)
 def mct_update_amount_pre(unusual_parameter, amt='10000', set_amt='10000',
                           ):
     """
     设置提现专用子商户的余额和可结算余额amt, set_amt
     :return:
     """
     data = unusual_parameter['data']
     if not isinstance(data, dict):
         data = json.loads(data)
     data = data['biz_content']
     if data.get('mch_accnt_no') in Constants.SubMerchant.MUCSUB.keys():
         mch = ConfigManager.get_service(Constants.SubMerchant.MUCSUB[data.get('mch_accnt_no')])
     elif data.get('mch_accnt_no') in Constants.SubMerchant.PROFIT.keys():
         mch = ConfigManager.get_service(Constants.SubMerchant.PROFIT[data.get('mch_accnt_no')])
     else:
         mch = ConfigManager.get_service(Constants.SubMerchant.PREPAY[data.get('mch_accnt_no')])
     SqlSave.update_amount(amt, set_amt, mch)
Ejemplo n.º 17
0
 def update_change(is_change):
     """
     更改手续费为29999支付方式,费率为0.01
     :return:
     """
     sql = "update mch_other_config set fee_undertaker='%s',is_charge='Y' where mch_no = '%s'" % (
         is_change, ConfigManager.get_service(Constants.Merchant.CS))
     ConnectionMysql().execute_db(sql)
Ejemplo n.º 18
0
 def select_fix_poundage():
     """获取数据库的手续费"""
     sql = "select fixed_poundage from mch_other_config where mch_no='%s'" % ConfigManager.get_service(
         Constants.Merchant.CS)
     result = ConnectionMysql().select_db(sql)
     if result[0][0] == None:
         return 0
     return result[0][0]
    def send_requests(**kwargs):
        url = ConfigManager.get_service(Constants.HOST.TEST)
        # todo 关于接口签名认证的方法可以做进一步处理如:直接去数据库查询等。
        headers = {
            'User-Agent': ConfigManager.get_basic(Constants.UserAgent.CHROME)
        }  # 请求头默认带浏览器chrome 可配置
        headers = headers if kwargs.get('HEADERS') is None else dict(
            headers, **kwargs.get('HEADERS'))  # 和传入的请求头合并
        # method = 'post' if kwargs.get('请求类型') is '' else kwargs.get('METHOD')
        method = 'post'
        allow_redirects = True if kwargs.get(
            'allow_redirects') is None else kwargs.get(
                'allow_redirects')  # 是否重定向
        timeout = 500 if kwargs.get('time_out') is None else kwargs.get(
            'time_out')  # 超时时间的设置
        data = dict()
        format_data = kwargs.get('data')
        if isinstance(format_data, str):
            format_data = json.loads(format_data)
        format_data['mch_no'] = ConfigManager.get_service(
            Constants.Merchant.CS)
        format_data = json.dumps(format_data)
        data['data'] = format_data
        log.info("==============================本次请求data:::%s" % format_data)
        data['sign'] = RequestManager.get_sign(format_data)  # 为请求增加签名认证
        if method.upper().__eq__('GET'):
            res = requests.get(
                url,
                params=kwargs.get('params'),
                headers=headers,
                allow_redirects=allow_redirects,
                timeout=timeout,
                verify=False)  # verify 由于该请求走fiddler会报错 所以关闭verify保证能抓到请求
            return res, res.json()

        if method.upper().__eq__('POST'):
            res = requests.post(url,
                                json=kwargs.get('json'),
                                headers=headers,
                                data=data,
                                params=kwargs.get('params'),
                                allow_redirects=allow_redirects,
                                timeout=timeout,
                                verify=False)
            return res, json.loads(res.json().get('data'))
Ejemplo n.º 20
0
 def __init__(self):
     config = ConfigManager.get_ini_obj()
     self.db = pymysql.connect(config.get('Mysql', 'server_host'),
                               config.get('Mysql', 'username'),
                               config.get('Mysql', 'password'),
                               config.get('Mysql', 'database'),
                               int(config.get('Mysql', 'port')),
                               charset='utf8')
     self.cursor = self.db.cursor()
Ejemplo n.º 21
0
def get_sub_mch(type_mch):
    """
    type 值为以下几种形式
    much_sub = ['mucsub_1','mucsub_2','mucsub_3','mucsub_4'] # 商户子商户
    profit = ['profit_1', 'profit_2']  # 商户分润商户
    prepay = ['prepay_1', 'prepay_2']  # 准备金账户
    """
    sub_mch_no = ConfigManager.get_service(
        Constants.SubMerchant.MUCSUB[type_mch])
    return sub_mch_no
Ejemplo n.º 22
0
def remove_mch_accnt_no_settle_key():
    """提现接口调用时会写入缓存,自动化脚本跑时会重复提交redis所以需要删除redis的缓存数据"""
    obj = ConfigManager.get_ini_obj()
    r = redis.Redis(connection_pool=redis.ConnectionPool(
        host=obj.get('redis_config', 'server_host'),
        password=obj.get('redis_config', 'password'),
        db='0'))
    keys = 'mch_accnt_no_settle_key'

    r.delete(keys)
Ejemplo n.º 23
0
 def mct_update_acct_type(button):
     if button is True:
         sql_1 = "update mch_accnt set accnt_type='%s' where mch_accnt_no='%s'" % (
             'mch_sub',
             ConfigManager.get_service(
                 Constants.SubMerchant.PROFIT['profit_1']))
         sql_2 = "update mch_accnt set accnt_type='%s' where mch_accnt_no='%s'" % (
             'mch_sub',
             ConfigManager.get_service(
                 Constants.SubMerchant.PROFIT['profit_2']))
     else:
         sql_1 = "update mch_accnt set accnt_type='%s' where mch_accnt_no='%s'" % (
             'profit',
             ConfigManager.get_service(
                 Constants.SubMerchant.PROFIT['profit_1']))
         sql_2 = "update mch_accnt set accnt_type='%s' where mch_accnt_no='%s'" % (
             'profit',
             ConfigManager.get_service(
                 Constants.SubMerchant.PROFIT['profit_2']))
     ConnectionMysql().execute_db(sql_1)
     ConnectionMysql().execute_db(sql_2)
Ejemplo n.º 24
0
def remove_withdrawal_info(mch_no, order_no):
    """提现接口调用时会写入缓存,自动化脚本跑时会重复提交redis所以需要删除redis的缓存数据"""
    obj = ConfigManager.get_ini_obj()
    r = redis.Redis(connection_pool=redis.ConnectionPool(
        host=obj.get('redis_config', 'server_host'),
        password=obj.get('redis_config', 'password'),
        db=obj.get('redis_config', 'db')))
    keys = 'com.deposit.withdraw:' + mch_no + order_no
    v = r.get(keys)
    print('正在清理缓存%s' % v)
    if v is None:
        print('没有缓存')
        return
    r.delete(keys)
    def public_handle(self, channel, is_change):
        """进行存管户和在途账户的金额校验"""
        result = SqlSave.select_reconciliation_result_settle(channel)
        recon_amt = result[2]
        profit_loss_amt = result[3]
        depository_mch_accnt_no = ConfigManager.get_service(
            Constants.SubMerchant.DEPOSITORY)
        depository_event_amt = SqlSave.select_his_mch_accnt_keep_event_amt(
            depository_mch_accnt_no, 'depository')

        self.assertEqual(depository_event_amt, recon_amt)

        onway_mch_accnt_no = ConfigManager.get_service(
            Constants.SubMerchant.ONWAY)
        onway_event_amt = SqlSave.select_his_mch_accnt_keep_event_amt(
            onway_mch_accnt_no, 'onway')

        self.assertEqual(onway_event_amt, recon_amt)

        profit_mch_accnt_no = ConfigManager.get_service(
            Constants.SubMerchant.PROFIT['profit_1'])
        profit_event_amt = SqlSave.select_his_mch_accnt_keep_event_amt(
            profit_mch_accnt_no, 'profit')

        self.assertEqual(profit_event_amt, profit_loss_amt)

        # 进行子商户的金额校验
        mch_accnt_no = ConfigManager.get_service(
            Constants.SubMerchant.MUCSUB['mucsub_1'])

        mch_accnt_no_event_amt = SqlSave.select_his_mch_accnt_keep_event_amt(
            mch_accnt_no, 'pay')

        trans_amount_total = HandleSettle.get_trans_amount_total(
            channel, is_change)

        self.assertEqual(trans_amount_total, mch_accnt_no_event_amt)
Ejemplo n.º 26
0
 def __init__(self, ex_name, sheet=0):
     """
     初始化excle,传入服务名称查询到excle_name和case_data
     """
     # 获取在配置文件中管理的文件名称,然后拿到文件的存储路径
     case_dir, case_data = ConfigManager.get_ex_name(ex_name).split(',')
     path = os.path.join(os.path.dirname(os.path.dirname(__file__)),
                         'project_data', case_dir, case_data)
     log.info('准备读取的测试数据为%s' % path)
     self.data = xlrd.open_workbook(path, encoding_override='utf-8')
     # 默认选取第一张sheet
     self.table = self.data.sheet_by_index(sheet)
     # 获取第一行的值作为key
     self.keys = self.table.row_values(0)
     # 获取总行数
     self.rowNumber = self.table.nrows
     # 获取总列数
     self.colNumber = self.table.ncols
Ejemplo n.º 27
0
 def machaccnt_pay_channel_rate_common(exc_data):
     """
     含有手续费的handle处理  exc_data 是给构造预期结果用 copy是给请求用
     回填 计算手续费后的金额
     """
     copy_exc_data = copy.deepcopy(exc_data)
     comparison_muc_sub_list = []
     for key, value in Constants.SubMerchant.MUCSUB.items():
         comparison_muc_sub_list.append(ConfigManager.get_service(value))
     data = copy_exc_data['data']
     if not isinstance(data, dict):
         data = json.loads(copy_exc_data['data'])
     trans_amt = data.get('biz_content').get('trans_amt')
     for i in data.get('biz_content').get('split_accnt_detail'):
         if i.get('mch_accnt_no') in comparison_muc_sub_list:
             new_amount = Base.count_charge(trans_amt, i.get('amount'))
             i['amount'] = new_amount
     copy_exc_data['data'] = HandleKeepingAccounts.public_handle(
         data, copy_exc_data)
     return copy_exc_data
 def get_sign(data):
     """获取请求时需要的sign"""
     token = ConfigManager.get_service(Constants.MD5Token.CS)
     sign = ''.join((data, "&", json.loads(data).get('timestamp'), token))
     sign_md5 = hashlib.md5(sign.encode(encoding='utf-8')).hexdigest()
     return sign_md5
#      "expected_total_supply" : 1000000000000000000000000000
#    }
#

if __name__ == '__main__':
    if len(sys.argv) != 4:
        print(
            "\nUsage: python run.py <config_file_path> <target_height> <balance_file_path>\n"
        )
        exit(1)
    #Logger.enableDebugLog()

    config_file_path = sys.argv[1]
    target_height = int(sys.argv[2])
    balance_file_path = sys.argv[3]

    cfgMgr = ConfigManager()
    if not cfgMgr.load(config_file_path):
        Logger.printError('Failed to load config: %s' % (config_file_path))
        exit(1)

    config = cfgMgr.config
    ethereum_rpc_url = config.ethereum_rpc_url
    smart_contract_address = config.smart_contract_address
    expected_total_supply = config.expected_total_supply
    genesis_height = config.genesis_height

    exportTokenBalance(ethereum_rpc_url, smart_contract_address,
                       expected_total_supply, genesis_height, target_height,
                       balance_file_path)
Ejemplo n.º 30
0
def get_url():
    url = ConfigManager.get_service(Constants.HOST.TEST)
    return url