def post(self): """ 获取当前可用的充值方式 """ form, error = AmountInputForm().request_validate() if error: return error.as_response() routers = ChannelListHelper.get_channel_payment_type_router( interface=InterfaceTypeEnum.CASHIER_H5, amount=form.amount.data, merchant=form.merchant.data, uid=g.user.uid, ) channels = ChannelListHelper.get_available_channels( form.merchant.data, PayTypeEnum.DEPOSIT, client_ip=form.client_ip.data, ) payment_type_list = ChannelListHelper.choice_one_channel_for_payment_type( channels, routers, form.merchant.data, form.amount.data, ) return ResponsePaymentType(bs_data=dict( payment_type_list=payment_type_list)).as_response()
def get(self): """ 查询可用的通道 :return: """ if not request.args: return ResponseSuccess( message="参数规则:?merchant=test&interface=&amount=&uid=" ).as_response() try: merchant = MerchantEnum.from_name(request.args['merchant']) except: return ResponseSuccess( message="请输入正确的 merchant,有效的 merchant 包括:%s" % MerchantEnum.get_names()).as_response() try: interface = request.args.get('interface') if interface: interface = InterfaceTypeEnum.from_name(interface) except: return ResponseSuccess( message="请输入正确的 interface,有效的 interface 包括:%s" % InterfaceTypeEnum.get_names()).as_response() try: amount = request.args.get('amount') or 0 if amount: amount = Decimal(amount) except: return ResponseSuccess(message="请输入正确的 amount") try: uid = request.args.get('uid') if uid: uid = int(uid) except: return ResponseSuccess(message="请输入正确的 uid") routers = ChannelListHelper.get_channel_payment_type_router( interface=interface, amount=amount, merchant=merchant, uid=uid, ) channels = ChannelListHelper.get_available_channels( merchant, PayTypeEnum.DEPOSIT) payment_type_list = ChannelListHelper.choice_one_channel_for_payment_type( channels, routers, merchant, amount) for item in payment_type_list: item['limit_min'] = str(item['limit_min']) item['limit_max'] = str(item['limit_max']) return ResponseSuccess(bs_data=payment_type_list).as_response()
def test_channel_guid_rule(self): data = dict( config_list=[ dict(payment_type=PaymentTypeEnum.ZHIFUBAO, priority=100), dict(payment_type=PaymentTypeEnum.WEIXIN, priority=200), dict(payment_type=PaymentTypeEnum.YINLIAN, priority=10), dict(payment_type=PaymentTypeEnum.YUNSHANFU, priority=50), ], amount_min=Decimal('100.33'), amount_max=Decimal('500.22'), interface=InterfaceTypeEnum.CASHIER_H5, merchants=[MerchantEnum.TEST, MerchantEnum.QF2], uid_list=[1, 2, 3, 4], ) rule = ChannelRouter.create_rule(**data) def check_item_and_data(_data, _item): self.assertEqual(set([x.name for x in _data['merchants']]), set([x.name for x in _item.merchants])) self.assertEqual(set(_data['uid_list']), set(_item.uid_list)) self.assertEqual(_data['interface'], _item.interface) self.assertEqual(len(_data['config_list']), len(_item.config_list)) check_item_and_data(data, rule) count = 1 all_configs = list(ChannelRouter.query_all()) self.assertEqual(count, len(all_configs)) q_rule = all_configs[count - 1] self.assertEqual(rule.router_id, q_rule.router_id) data = dict( router_id=q_rule.router_id, config_list=[ dict(payment_type=PaymentTypeEnum.ZHIFUBAO, priority=100), dict(payment_type=PaymentTypeEnum.WEIXIN, priority=200), dict(payment_type=PaymentTypeEnum.YUNSHANFU, priority=50), ], amount_min=Decimal('800.33'), amount_max=Decimal('3000.22'), interface=InterfaceTypeEnum.CASHIER_H5, merchants=[MerchantEnum.TEST, MerchantEnum.QF3], uid_list=[1, 3, 4], ) rule, error = ChannelRouter.update_rule(**data) check_item_and_data(data, rule) data['uid_list'] = [10, 20, 30] data.pop('router_id') data['config_list'] = [ dict(payment_type=PaymentTypeEnum.ZHIFUBAO, priority=100), dict(payment_type=PaymentTypeEnum.WEIXIN, priority=200), dict(payment_type=PaymentTypeEnum.YINLIAN, priority=10), dict(payment_type=PaymentTypeEnum.YUNSHANFU, priority=50), ] rule = ChannelRouter.create_rule(**data) check_item_and_data(data, rule) data['amount_min'] = Decimal('400') data['amount_max'] = Decimal('500') data['interface'] = InterfaceTypeEnum.API data['merchants'] = [] data['uid_list'] = [] data['config_list'] = [ dict(payment_type=PaymentTypeEnum.YINLIAN, priority=10), dict(payment_type=PaymentTypeEnum.YUNSHANFU, priority=50), ] rule = ChannelRouter.create_rule(**data) check_item_and_data(data, rule) data['amount_min'] = 0 data['amount_max'] = 0 data['interface'] = InterfaceTypeEnum.CASHIER_PC data['merchants'] = [] data['uid_list'] = [] data['config_list'] = [ dict(payment_type=PaymentTypeEnum.YINLIAN, priority=4), dict(payment_type=PaymentTypeEnum.YUNSHANFU, priority=8), dict(payment_type=PaymentTypeEnum.ZHIFUBAO, priority=3), dict(payment_type=PaymentTypeEnum.WEIXIN, priority=5), dict(payment_type=PaymentTypeEnum.BANKCARD, priority=10), dict(payment_type=PaymentTypeEnum.JDQIANBAO, priority=7), ] rule = ChannelRouter.create_rule(**data) check_item_and_data(data, rule) data['interface'] = None data['config_list'] = [ dict(payment_type=PaymentTypeEnum.YINLIAN, priority=4), dict(payment_type=PaymentTypeEnum.ZHIFUBAO, priority=3), dict(payment_type=PaymentTypeEnum.WEIXIN, priority=5), dict(payment_type=PaymentTypeEnum.BANKCARD, priority=10), dict(payment_type=PaymentTypeEnum.JDQIANBAO, priority=7), ] rule = ChannelRouter.create_rule(**data) check_item_and_data(data, rule) count = 5 all_configs = list(ChannelRouter.query_all()) self.assertEqual(count, len(all_configs)) q_rule = all_configs[count - 1] self.assertEqual(rule.router_id, q_rule.router_id) config_list = ChannelListHelper.get_channel_payment_type_router(uid=3, amount=Decimal("1000"), merchant=MerchantEnum.QF3, interface=InterfaceTypeEnum.CASHIER_H5) print('config_list', config_list) self.assertEqual(3, len(config_list)) config_list = ChannelListHelper.get_channel_payment_type_router(uid=20, amount=Decimal("1000"), merchant=MerchantEnum.QF3, interface=InterfaceTypeEnum.CASHIER_H5) print('config_list', config_list) self.assertEqual(4, len(config_list)) config_list = ChannelListHelper.get_channel_payment_type_router(amount=Decimal("450"), interface=InterfaceTypeEnum.API) print('config_list', config_list) self.assertEqual(2, len(config_list)) config_list = ChannelListHelper.get_channel_payment_type_router(interface=InterfaceTypeEnum.CASHIER_PC) print('config_list', config_list) self.assertEqual(6, len(config_list)) config_list = ChannelListHelper.get_channel_payment_type_router() print('config_list', config_list) self.assertEqual(5, len(config_list)) config_list = ChannelListHelper.get_channel_payment_type_router(interface=InterfaceTypeEnum.API) print('config_list', config_list) self.assertEqual(5, len(config_list))