Authorization and capture

Some gateways offer a two-step payment method known as Authorization & Capture, which allows you to collect the payment manually after the buyer has authorized it. To enable this payment type, you have to set the capture parameter to False in the configuration of payment backend:

# settings.py
PAYMENT_VARIANTS_API = {
    'default': ('web_payments_dummy.DummyProvider', {'capture': False}, {})}

# as PaymentVariant
    ...
    PaymentVariant('web_payments_dummy.DummyProvider', {'capture': False}, {})
    ....

Capturing the payment

To capture the payment from the buyer, call the capture() method on the Payment instance:

>>> payment = Payment.objects.get()
>>> payment.capture()

By default, the total amount will be captured and the capture will be finalized. You can capture a lower amount, by providing the amount parameter and take multiple captures by providing final:

>>> from decimal import Decimal
>>> captured_amount = payment.capture(amount=Decimal(10.0), final=False)
>>> payment.capture(amount=Decimal(10.0), final=True)

Note

Only payments with the preauth status can be captured.

Releasing the payment

To release the payment to the buyer, call the release() method on your Payment instance:

>>> payment = Payment.objects.get()
>>> payment.release()

Note

Only payments with the preauth status can be released (voiding transaction).