コード例 #1
0
    def init_merchant(cls):
        # 先创建商户
        if not cls.get_merchant_info():
            MerchantInfo.create_merchant(m_name=cls.merchant,
                                         m_type=MerchantTypeEnum.TEST)

            # 给商户加钱
            rst, msg = MerchantBalanceEvent.update_balance(
                merchant=cls.merchant,
                ref_id=OrderUtils.gen_unique_ref_id(),
                source=OrderSourceEnum.MANUALLY,
                order_type=PayTypeEnum.MANUALLY,
                bl_type=BalanceTypeEnum.AVAILABLE,
                ad_type=BalanceAdjustTypeEnum.PLUS,
                tx_id=OrderUtils.gen_normal_tx_id(10),
                value=100000000,
                comment="手动脚本修改商户可用余额")
            # print(rst, msg)

        merchant_fee_list = list()
        if not cls.get_merchant_fee_config(PayTypeEnum.DEPOSIT):
            # 商户费率配置
            merchant_fee_list.append(
                dict(
                    merchant=cls.merchant,
                    payment_way=PayTypeEnum.DEPOSIT,
                    value="3",
                    fee_type=PaymentFeeTypeEnum.PERCENT_PER_ORDER,
                    payment_method=cls.channel_enum.conf.payment_method,
                ))
            MerchantFeeConfig.update_fee_config(cls.merchant,
                                                merchant_fee_list)

            # 商户费率配置
            merchant_fee_list.append(
                dict(
                    merchant=cls.merchant,
                    payment_way=PayTypeEnum.DEPOSIT,
                    value="3",
                    fee_type=PaymentFeeTypeEnum.PERCENT_PER_ORDER,
                    payment_method=cls.channel_enum2.conf.payment_method,
                ))
            MerchantFeeConfig.update_fee_config(cls.merchant,
                                                merchant_fee_list)

        if not cls.get_merchant_fee_config(PayTypeEnum.WITHDRAW):
            merchant_fee_list.append(
                dict(merchant=cls.merchant,
                     payment_way=PayTypeEnum.WITHDRAW,
                     value="3.2",
                     fee_type=PaymentFeeTypeEnum.PERCENT_PER_ORDER))
            MerchantFeeConfig.update_fee_config(cls.merchant,
                                                merchant_fee_list)

        merchant_config = cls.get_merchant_fee_config(PayTypeEnum.DEPOSIT)
        assert merchant_config.fee_type == PaymentFeeTypeEnum.PERCENT_PER_ORDER

        merchant_config = cls.get_merchant_fee_config(PayTypeEnum.WITHDRAW)
        assert merchant_config.fee_type == PaymentFeeTypeEnum.PERCENT_PER_ORDER
コード例 #2
0
    def init_user2(cls):
        user = cls.get_user2()
        if not user:
            user = User.register_account(cls.merchant,
                                         account=cls.user_account2,
                                         ac_type=AccountTypeEnum.MOBILE,
                                         login_pwd=cls.password)

            data = dict(
                uid=user.uid,
                merchant=cls.merchant,
                ref_id=OrderUtils.gen_unique_ref_id(),
                source=OrderSourceEnum.MANUALLY,
                order_type=PayTypeEnum.MANUALLY,
                bl_type=BalanceTypeEnum.AVAILABLE,
                ad_type=BalanceAdjustTypeEnum.PLUS,
                tx_id=OrderUtils.gen_normal_tx_id(user.uid),
                value=Decimal("500000000"),
                comment="手动脚本修改用户可用余额",
            )
            rst, msg = UserBalanceEvent.update_user_balance(**data)
            # print(rst, msg)

        # 写入数据库
        if not cls.get_bank_card():
            bank_card = BankCard.add_bank_card(
                user.merchant,
                uid=user.uid,
                bank_name=PaymentBankEnum.ZHONGGUO.desc,
                bank_code=PaymentBankEnum.ZHONGGUO.bank_code,
                card_no=cls.bank_card_no2,
                account_name="王小儿",
                branch="深圳支行",
                province="广东省",
                city="深圳市",
            )
コード例 #3
0
ファイル: balance.py プロジェクト: LyanJin/check-pay
    def transfer(cls, from_user, to_user, merchant: MerchantEnum, amount, comment: str = ''):
        """
        转账
        ref_id = OrderUtils.gen_unique_ref_id()
        PayTypeEnum.TRANSFER
        商户类型是TEST,那么source就是 TEST
        否则是 ONLINE
        """
        from app.models.user import UserBindInfo

        # 记录一个参数日志, locals自动收集这行代码之前出现过的局部变量
        params = copy.deepcopy(locals())
        params.pop('cls')

        try:
            with db.auto_commit(True):

                # 构造source的值
                if merchant.is_test:
                    source = OrderSourceEnum.TESTING
                else:
                    source = OrderSourceEnum.ONLINE

                ref_id_a = OrderUtils.gen_unique_ref_id()
                ref_id_b = OrderUtils.gen_unique_ref_id()
                tx_id = OrderUtils.gen_normal_tx_id(from_user.uid)

                in_bind = UserBindInfo.query_bind_by_uid(to_user.uid)
                if in_bind:
                    in_account = in_bind.name
                else:
                    in_account = to_user.account

                out_bind = UserBindInfo.query_bind_by_uid(from_user.uid)
                if out_bind:
                    out_account = out_bind.name
                else:
                    out_account = from_user.account

                # A用户扣钱
                flag_a, msg_b = cls.update_user_balance(from_user.uid, merchant,
                                                        ref_id=ref_id_a,
                                                        source=source,
                                                        order_type=PayTypeEnum.TRANSFER,
                                                        value=amount,
                                                        bl_type=BalanceTypeEnum.AVAILABLE,
                                                        ad_type=BalanceAdjustTypeEnum.MINUS,
                                                        comment=comment,
                                                        tx_id=tx_id,
                                                        in_account=in_account,
                                                        out_account=out_account,
                                                        commit=False,
                                                        )

                if flag_a != 0:
                    raise RuntimeError(msg_b)

                # B用户加钱
                flag_b, msg_b = cls.update_user_balance(to_user.uid, merchant,
                                                        ref_id=ref_id_b,
                                                        source=source,
                                                        order_type=PayTypeEnum.TRANSFER,
                                                        value=amount,
                                                        bl_type=BalanceTypeEnum.AVAILABLE,
                                                        ad_type=BalanceAdjustTypeEnum.PLUS,
                                                        comment=comment,
                                                        tx_id=tx_id,
                                                        in_account=in_account,
                                                        out_account=out_account,
                                                        commit=False,
                                                        )

                if flag_b != 0:
                    raise RuntimeError(msg_b)

        except RuntimeError as e:
            # 捕获异常,返回失败
            msg = "%s, params: %s" % (str(e), params)
            current_app.config['SENTRY_DSN'] and current_app.logger.fatal(msg)
            return -100, msg

        return True, ''