Exemple #1
0
    def getJohnsPayOutBankWire(self):
        """Creates Pay-Out  Bank Wire object"""
        if self._johnsPayOutBankWire == None:
            wallet = self.getJohnsWallet()
            user = self.getJohn()
            account = self.getJohnsAccount()

            payOut = PayOut()
            payOut.Tag = 'DefaultTag'
            payOut.AuthorId = user.Id
            payOut.CreditedUserId = user.Id
            payOut.DebitedFunds = Money()
            payOut.DebitedFunds.Currency = 'EUR'
            payOut.DebitedFunds.Amount = 10
            payOut.Fees = Money()
            payOut.Fees.Currency = 'EUR'
            payOut.Fees.Amount = 5

            payOut.DebitedWalletId = wallet.Id
            payOut.MeanOfPaymentDetails = PayOutPaymentDetailsBankWire()
            payOut.MeanOfPaymentDetails.BankAccountId = account.Id
            payOut.MeanOfPaymentDetails.Communication = 'Communication text'

            self._johnsPayOutBankWire = self.sdk.payOuts.Create(payOut)
        return self._johnsPayOutBankWire
    def getJohnsPayOutBankWire(self):
        """Creates Pay-Out  Bank Wire object"""
        if self._johnsPayOutBankWire == None:
            wallet = self.getJohnsWallet()
            user = self.getJohn()
            account = self.getJohnsAccount()

            payOut = PayOut()
            payOut.Tag = 'DefaultTag'
            payOut.AuthorId = user.Id
            payOut.CreditedUserId = user.Id
            payOut.DebitedFunds = Money()
            payOut.DebitedFunds.Currency = 'EUR'
            payOut.DebitedFunds.Amount = 10
            payOut.Fees = Money()
            payOut.Fees.Currency = 'EUR'
            payOut.Fees.Amount = 5

            payOut.DebitedWalletId = wallet.Id
            payOut.MeanOfPaymentDetails = PayOutPaymentDetailsBankWire()
            payOut.MeanOfPaymentDetails.BankAccountId = account.Id
            payOut.MeanOfPaymentDetails.Communication = 'Communication text'

            self._johnsPayOutBankWire = self.sdk.payOuts.Create(payOut)
        return self._johnsPayOutBankWire
    def test_Idempotency(self):
        key = random.randrange(100000000000000000, 999999999999999999)
        wallet = self.getJohnsWallet()
        user = self.getJohn()
        account = self.getJohnsAccount()

        payOutPost = PayOut()
        payOutPost.AuthorId = user.Id
        payOutPost.DebitedWalletId = wallet.Id
        payOutPost.DebitedFunds = Money(10, 'EUR')
        payOutPost.Fees = Money(5, 'EUR')
        payOutPost.MeanOfPaymentDetails = PayOutPaymentDetailsBankWire()
        payOutPost.MeanOfPaymentDetails.BankAccountId = account.Id
        payOutPost.MeanOfPaymentDetails.BankWireRef = 'Johns bank wire ref'
        payOutPost.Tag = 'DefaultTag'
        payOutPost.CreditedUserId = user.Id

        payOut = self.sdk.payOuts.CreateIdempotent(key, payOutPost)

        self.assertIsNotNone(payOut)

        # test existing key
        result = self.sdk.idempotency.Get(key)
        self.assertIsNotNone(result)

        # test non-existing key
        try:
            result = self.sdk.idempotency.Get(key + '_no')

            # expecting a response error
            self.assertTrue(1 == 0)
        except:
            result = None
Exemple #4
0
def payout(db, participant, amount):
    if participant.is_suspicious:
        raise UserIsSuspicious

    route = ExchangeRoute.from_network(participant, 'mango-ba')
    assert route
    ba = mangoapi.users.GetBankAccount(participant.mangopay_user_id, route.address)

    # Do final calculations
    credit_amount, fee = skim_credit(amount, ba)
    if credit_amount <= 0 or fee / credit_amount > 0.1:
        raise TransactionFeeTooHigh

    # Try to dance with MangoPay
    e_id = record_exchange(db, route, -credit_amount, fee, participant, 'pre')
    payout = PayOut()
    payout.AuthorId = participant.mangopay_user_id
    payout.DebitedFunds = Money(int(credit_amount * 100), 'EUR')
    payout.DebitedWalletId = participant.mangopay_wallet_id
    payout.Fees = Money(int(fee * 100), 'EUR')
    payout.MeanOfPaymentDetails = PayOutPaymentDetailsBankWire(
        BankAccountId=route.address,
        BankWireRef=str(e_id),
    )
    payout.Tag = str(e_id)
    try:
        test_hook()
        mangoapi.payOuts.Create(payout)
        return record_exchange_result(db, e_id, 'created', None, participant)
    except Exception as e:
        error = repr_exception(e)
        return record_exchange_result(db, e_id, 'failed', error, participant)
    def test_Idempotency(self):
        key = random.randrange(100000000000000000, 999999999999999999)
        wallet = self.getJohnsWallet()
        user = self.getJohn()
        account = self.getJohnsAccount()
        
        payOutPost = PayOut()
        payOutPost.AuthorId = user.Id
        payOutPost.DebitedWalletId = wallet.Id
        payOutPost.DebitedFunds = Money(10, 'EUR')
        payOutPost.Fees = Money(5, 'EUR')
        payOutPost.MeanOfPaymentDetails = PayOutPaymentDetailsBankWire()
        payOutPost.MeanOfPaymentDetails.BankAccountId = account.Id
        payOutPost.MeanOfPaymentDetails.BankWireRef = 'Johns bank wire ref'
        payOutPost.Tag = 'DefaultTag'
        payOutPost.CreditedUserId = user.Id

        payOut = self.sdk.payOuts.CreateIdempotent(key, payOutPost)

        self.assertIsNotNone(payOut)

        # test existing key
        result = self.sdk.idempotency.Get(key)
        self.assertIsNotNone(result)

        # test non-existing key
        try:
            result = self.sdk.idempotency.Get(key + '_no')

            # expecting a response error
            self.assertTrue(1 == 0)
        except:
            result = None
Exemple #6
0
def payout(db, participant, amount):
    if participant.is_suspicious:
        raise UserIsSuspicious

    route = ExchangeRoute.from_network(participant, 'mango-ba')
    assert route
    ba = mangoapi.users.GetBankAccount(participant.mangopay_user_id,
                                       route.address)

    # Do final calculations
    credit_amount, fee = skim_credit(amount, ba)
    if credit_amount <= 0 or fee / credit_amount > 0.1:
        raise TransactionFeeTooHigh

    # Try to dance with MangoPay
    e_id = record_exchange(db, route, -credit_amount, fee, participant, 'pre')
    payout = PayOut()
    payout.AuthorId = participant.mangopay_user_id
    payout.DebitedFunds = Money(int(credit_amount * 100), 'EUR')
    payout.DebitedWalletId = participant.mangopay_wallet_id
    payout.Fees = Money(int(fee * 100), 'EUR')
    payout.MeanOfPaymentDetails = PayOutPaymentDetailsBankWire(
        BankAccountId=route.address,
        BankWireRef=str(e_id),
    )
    payout.Tag = str(e_id)
    try:
        test_hook()
        mangoapi.payOuts.Create(payout)
        return record_exchange_result(db, e_id, 'created', None, participant)
    except Exception as e:
        error = repr_exception(e)
        return record_exchange_result(db, e_id, 'failed', error, participant)
Exemple #7
0
 def create(self, tag=''):
     pay_out = PayOut()
     pay_out.Tag = tag
     pay_out.AuthorId = self.mangopay_user.mangopay_id
     pay_out.DebitedFunds = python_money_to_mangopay_money(
         self.debited_funds)
     pay_out.Fees = python_money_to_mangopay_money(self.fees)
     pay_out.DebitedWalletId = self.mangopay_wallet.mangopay_id
     details = PayOutPaymentDetailsBankWire()
     details.BankAccountId = self.mangopay_bank_account.mangopay_id
     pay_out.MeanOfPaymentDetails = details
     client = get_mangopay_api_client()
     created_pay_out = client.payOuts.Create(pay_out)
     self.mangopay_id = created_pay_out.Id
     return self._update(created_pay_out)
Exemple #8
0
 def create(self, tag=''):
     pay_out = PayOut()
     pay_out.Tag = tag
     pay_out.AuthorId = self.mangopay_user.mangopay_id
     pay_out.DebitedFunds = python_money_to_mangopay_money(
         self.debited_funds)
     pay_out.Fees = python_money_to_mangopay_money(self.fees)
     pay_out.DebitedWalletId = self.mangopay_wallet.mangopay_id
     details = PayOutPaymentDetailsBankWire()
     details.BankAccountId = self.mangopay_bank_account.mangopay_id
     pay_out.MeanOfPaymentDetails = details
     client = get_mangopay_api_client()
     created_pay_out = client.payOuts.Create(pay_out)
     self.mangopay_id = created_pay_out.Id
     return self._update(created_pay_out)
Exemple #9
0
def payout(db, participant, amount, ignore_high_fee=False):
    assert amount > 0

    if participant.is_suspended:
        raise AccountSuspended()

    payday = db.one("SELECT * FROM paydays WHERE ts_start > ts_end")
    if payday:
        raise PaydayIsRunning

    route = ExchangeRoute.from_network(participant, 'mango-ba')
    assert route
    ba = mangoapi.users.GetBankAccount(participant.mangopay_user_id,
                                       route.address)

    # Do final calculations
    credit_amount, fee, vat = skim_credit(amount, ba)
    if credit_amount <= 0 and fee > 0:
        raise FeeExceedsAmount
    fee_percent = fee / amount
    if fee_percent > FEE_PAYOUT_WARN and not ignore_high_fee:
        raise TransactionFeeTooHigh(fee_percent, fee, amount)

    # Try to dance with MangoPay
    e_id = record_exchange(db, route, -credit_amount, fee, vat, participant,
                           'pre')
    payout = PayOut()
    payout.AuthorId = participant.mangopay_user_id
    payout.DebitedFunds = Money(int(amount * 100), 'EUR')
    payout.DebitedWalletId = participant.mangopay_wallet_id
    payout.Fees = Money(int(fee * 100), 'EUR')
    payout.MeanOfPaymentDetails = PayOutPaymentDetailsBankWire(
        BankAccountId=route.address,
        BankWireRef=str(e_id),
    )
    payout.Tag = str(e_id)
    try:
        test_hook()
        payout = mangoapi.payOuts.Create(payout)
        return record_exchange_result(db, e_id, payout.Status.lower(),
                                      repr_error(payout), participant)
    except Exception as e:
        error = repr_exception(e)
        return record_exchange_result(db, e_id, 'failed', error, participant)
Exemple #10
0
def payout(db, participant, amount, ignore_high_fee=False):
    assert amount > 0

    payday = db.one("SELECT * FROM paydays WHERE ts_start > ts_end")
    if payday:
        raise PaydayIsRunning

    route = ExchangeRoute.from_network(participant, 'mango-ba')
    assert route
    ba = mangoapi.users.GetBankAccount(participant.mangopay_user_id, route.address)

    # Do final calculations
    credit_amount, fee, vat = skim_credit(amount, ba)
    if credit_amount <= 0 and fee > 0:
        raise FeeExceedsAmount
    fee_percent = fee / amount
    if fee_percent > FEE_CREDIT_WARN and not ignore_high_fee:
        raise TransactionFeeTooHigh(fee_percent, fee, amount)

    # Try to dance with MangoPay
    e_id = record_exchange(db, route, -credit_amount, fee, vat, participant, 'pre')
    payout = PayOut()
    payout.AuthorId = participant.mangopay_user_id
    payout.DebitedFunds = Money(int(amount * 100), 'EUR')
    payout.DebitedWalletId = participant.mangopay_wallet_id
    payout.Fees = Money(int(fee * 100), 'EUR')
    payout.MeanOfPaymentDetails = PayOutPaymentDetailsBankWire(
        BankAccountId=route.address,
        BankWireRef=str(e_id),
    )
    payout.Tag = str(e_id)
    try:
        test_hook()
        mangoapi.payOuts.Create(payout)
        return record_exchange_result(db, e_id, 'created', None, participant)
    except Exception as e:
        error = repr_exception(e)
        return record_exchange_result(db, e_id, 'failed', error, participant)