Source code for web_payments_externalpayments
from .forms import OrderIdForm, IBANBankingForm
from web_payments import RedirectNeeded, NotSupported
from web_payments.status import PaymentStatus
from web_payments.logic import BasicProvider
__all__ = ["DirectPaymentProvider", "BankTransferProvider"]
[docs]class DirectPaymentProvider(BasicProvider):
'''
Payment is done manually e.g. cash on delivery, voucher in restaurant.
Payments are just a placeholder; to allow every further operation set to CONFIRMED.
:param bool skipform: doesn't show form with data
:param bool usetoken: if you don't verify the name; don't allow people supplying others order numbers (use token) because it is much longer it defaults to off
:param str prefix: add prefix to payment id as reference
:param bool confirm: set PaymentStatus to CONFIRMED when get_form completes
'''
def __init__(self, skipform=True, confirm=False,
usetoken=False, prefix="", **kwargs):
super(DirectPaymentProvider, self).__init__(**kwargs)
self.skipform = skipform
self.prefix = prefix
self.usetoken = usetoken
self.confirm = confirm
if not self._capture:
raise NotSupported(
'Direct Payments do not support pre-authorization.')
[docs] def refund(self, payment, amount=None):
if not amount:
amount = payment.total
payment.change_status(PaymentStatus.REFUNDED)
return amount
[docs]class BankTransferProvider(BasicProvider):
'''
Banking software or human confirms transaction.
Because there is no security problems if somebody pays for somebody else and references can not hold many characters, only the id is required.
The form is used to show the user the data he has to send.
:param str iban: IBAN number
:param str bic: BIC number
:param str prefix: add prefix to payment id as reference
:param bool confirm: set PaymentStatus to CONFIRMED when get_form completes
'''
def __init__(self, iban, bic, confirm=False,
prefix="", **kwargs):
if len(iban) <= 10 or len(bic) <= 4:
raise NotSupported("Wrong IBAN or BIC")
self.iban = iban.upper()
self.bic = bic.upper()
self.confirm = confirm
self.prefix = prefix
super(BankTransferProvider, self).__init__(**kwargs)
if not self._capture:
raise NotSupported(
'Advance Payment does not support pre-authorization.')
[docs] def get_fields(self, payment):
return {
'iban': self.iban,
'bic': self.bic,
'order': payment.transaction_id
}
[docs] def refund(self, payment, amount=None):
if not amount:
amount = payment.total
payment.change_status(PaymentStatus.REFUNDED)
return amount