예제 #1
0
    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()
예제 #2
0
    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()
예제 #3
0
    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))