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
Example #2
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 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']))
Example #4
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)
Example #5
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)
 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)
Example #7
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)
Example #8
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
 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)
Example #10
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 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)
Example #12
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)
Example #13
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]
Example #14
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 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'))
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
Example #17
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)
    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)
Example #19
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_url():
    url = ConfigManager.get_service(Constants.HOST.TEST)
    return url
def get_mch_no():
    """子商户号"""
    mch_no = ConfigManager.get_service(Constants.Merchant.CS)
    return mch_no
def get_token():
    """token"""
    token = ConfigManager.get_service(Constants.MD5Token.CS)
    return token
Example #23
0
 def select_count_mch_details():
     """获取解析对账单表中共存在多少条数据"""
     sql = "select count(id) from mch_account_details where mch_no = '%s'" % ConfigManager.get_service(
         Constants.Merchant.CS)
     result = ConnectionMysql().select_db(sql)
     return result[0][0]
 def send_with():
     """触发还准备金定时器"""
     requests.post(url=ConfigManager.get_service(Constants.HOST.TIMER_WITH))
Example #25
0
 def delete_download_info():
     sql = "delete from download_info where mch_no = '%s'" % ConfigManager.get_service(
         Constants.Merchant.CS)
     ConnectionMysql().execute_db(sql)
 def send_deal_withdraw():
     """触发提现"""
     requests.post(url=ConfigManager.get_service(Constants.HOST.TIMER_TEST))
Example #27
0
 def delete_mch_account_details():
     sql = "delete from mch_account_details where mch_no = '%s'" % ConfigManager.get_service(
         Constants.Merchant.CS)
     ConnectionMysql().execute_db(sql)
Example #28
0
 def delete_reconciliation_result():
     sql = "delete from reconciliation_result where mchNo='%s' and beginTime='%s'" % (
         ConfigManager.get_service(Constants.Merchant.CS), '2020-05-19')
     ConnectionMysql().execute_db(sql)
 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
Example #30
0
 def select_download_url():
     """获取对账单的名称"""
     sql = "select download_url,type from download_info where mch_no = '%s'" % ConfigManager.get_service(
         Constants.Merchant.CS)
     result = ConnectionMysql().select_db(sql)
     return result