Usage

Basics

The main entry point into the plugin is the adyen.scaffold.Scaffold class:

>>> from adyen.scaffold import Scaffold
>>> scaffold = Scaffold()

Of course, one can use Oscar’s get_class function instead:

>>> from oscar.core.loading import get_class
>>> Scaffold = get_class('adyen.scaffold', 'Scaffold')
>>> sclaffold = Scaffold()

Scaffold should be the only class used in your application, and you can consider it as the public interface of the plugin.

Payment form

The first step in the Adyen HPP workflow is to generate the form that will be submitted from your e-commerce site to the Adyen HPP. This form must contain several fields as described in the Adyen HPP Documentation.

You can get both from the scaffold:

>>> sclaffold = Scaffold()
>>> form_action_url = scaffold.get_form_action(request)
>>> form_fields = scaffold.get_form_fields(request, payment_data)

This should be used in the last view of your checkout before the payment return view - for example, in get_context_data to add the form URL and form fields.

See also

You can check the docstring of adyen.scaffold.Scaffold.get_form_action() and adyen.scaffold.Scaffold.get_form_fields() for more information.

List of payment data items

Key Adyen Form Field Description Required
order_number merchantReference Order Number Yes
client_id shopperReference Customer’s identifier Yes
client_email shopperEmail Customer’s email Yes
currency_code currencyCode Currency code Yes
amount paymentAmount Payment amount (in cent) Yes
shopper_locale shopperLocale Customer’s locale Yes
country_code countryCode Merchant’s Country Yes
source_type allowedMethods Selected SourceType object No
return_url resURL Custom Payment Return URL No
shipping_address deliveryAddress.* Customer shipping address No
shipping_visibility deliveryAddressType Visibility of the address No
billing_address billingAddress.* Customer billing address No
billing_visibility billingAddressType Visibility of the address No

Both shipping_address and billing_address are expected to be standard shipping and billing Django-Oscar address objects.

The shipping_visibility and billing_visibility take the values defined in the Adyen documentation: 1 for visible but not editable and 2 for not visible. By default, 2 is used by the plugin.

Handle payment return

When customers authorise a payment through the Adyen HPP, they are redirected back to your e-commerce site with a payment status that can be used to record the transaction (successful or not).

As usual, everything is handled with the scaffold:

>>> sclaffold = Scaffold()
>>> result = sclaffold.handle_payment_return(request)
>>> success, status, details = result

This can be done in the payment return view, to determine what to display to the customer: a thank-you or sorry page, depending on the value of success for example.

If you didn’t place the order yet, it should be the right place to do it - if not the last possible one.

In any case, it’s up to you to decide if you want to handle the payment here or if you want to wait for the payment notification.

See also

You can check the docstring of adyen.scaffold.Scaffold.handle_payment_return() for more information.

Register payment notification

Eventually Adyen will send to your Payment Notification URL a POST request to notify your application of a transaction. Since you may already have recorded the transaction, you need to assess the relevance of the notification, and then handle it.

The same way you handled payment return, you can handle payment notification:

>>> sclaffold = Scaffold()
>>> result = sclaffold.handle_payment_notification(request)
>>> success, status, details = result

With Adyen Payment Notification, your application must expose an URL accessible through a POST request. This view is the right place to call this method, but it is up to you to decide if you want to handle the payment here, modify the order, or ignore it if already done in the payment return view.

See also

You can check the docstring of adyen.scaffold.Scaffold.handle_payment_notification() for more information.