Implementation of the iDEAL v3.3.1 specification in Python.
Project description
- Version:
- 0.3.0
- Download:
- Source:
- Keywords:
python, ideal, django
About
Implementation of the iDEAL v3.3.1 specification in Python.
Installation
You can install ideal either via the Python Package Index (PyPI) or from source.
To install using pip:
$ pip install -U ideal
Usage
It is assumed you have already requested access at your bank for iDEAL.
Install the ideal library:
$ pip install ideal
Generate or locate your certificates (cert.cer, and priv.pem) and your bank’s public certificate (here named ideal_v3.cer but depends on your bank), and place them in a folder where your web application can access them.
Create a config file called ideal.cfg (or copy and modify the ideal-example.cfg):
[ideal] debug = 1 private_key_file = priv.pem private_key_password = secret private_certificate = cert.cer certificates = ideal_v3.cer merchant_id = 123456789 sub_id = 0 merchant_return_url = https://www.example.com/ideal/callback/ acquirer = ING
In Python, make sure your settings are initialized by loading the config file:
from ideal.conf import settings settings.load('ideal.cfg') # You may adjust (or completely define) your settings (capitalized) in Python as well settings.DEBUG = True
After your settings are loaded, you can communicate with iDEAL:
from ideal.client import IdealClient ideal = IdealClient() response = ideal.get_issuers() print response.issuers
Settings
These settings are lower-case and stored in your ideal.cfg file (or in Django’s settings.py, prefixed with IDEAL_).
- DEBUG (boolean)
Uses the test URL of the acquirer if set to True, otherwise the production URL is used (default: True).
- PRIVATE_KEY_FILE (string)
Absolute path to the merchant’s private key (default: priv.pem).
- PRIVATE_KEY_PASSWORD (string)
Password to access the merchant’s private key.
- PRIVATE_CERTIFICATE (string)
Absolute path to the merchant’s private certificate (default: cert.cer).
- CERTIFICATES (list or comma-separated string if file config is used)
Absolute path the the acquirer’s iDEAL certificate (default: ideal_v3.cer).
- MERCHANT_ID (string)
The ID of the online shop, received by the acceptor during the iDEAL registration process.
- SUB_ID (string)
Sub ID of the online shop, also received during the registration process (default: 0).
- MERCHANT_RETURN_URL (string)
The callback URL for iDEAL. The customer is redirected to this URL after the payment process at the acquirer.
- EXPIRATION_PERIOD (string)
The time a transaction is valid for in ISO 8601 format, minimum is 1 minute, maximum is 1 hour (default: PT15M).
- ACQUIRER (string)
Acquirer code to identify the endpoint. Valid values are: [ING, RABOBANK] (default: None).
- ACQUIRER_URL (string)
Overrides the default acquirer URL and ignores the ACQUIRER and DEBUG setting (default: None).
- LANGUAGE (string)
Response language in ISO 639-1 format, only Dutch (nl) and English (en) are supported (default: nl).
Testing
To run all unit tests, download the entire package and run:
$ python setup.py test
Contrib
Django
All settings can be capitalized and prefixed with IDEAL_ and placed in Django’s settings.py file, rather than using a configuration file. Of course, you may still use the settings file method.
Add ideal.contrib.django.ideal_compat to your INSTALLED_APPS.
Run python manage.py migrate to create the Issuer table in your database, to store a local copy of all issuers.
Run python manage.py sync_issuers to fill the Issuer table with a list of issuers. You should run this command every day or so using a cronjob.
You should create a view to handle the iDEAL callback and add the URL (as defined in your settings as MERCHANT_RETURN_URL) to your urls.py. Below, you’ll find an example view to redirect the use depending on the transaction status:
from django.views.generic.base import RedirectView from ideal.client import IdealClient, TransactionStatus from ideal.exceptions import IdealException class IdealCallbackView(RedirectView): permanent = False def get_redirect_url(self, **kwargs): """ Simplistic view to handle the callback. You probably want to update your database with the transaction status as well, or sent a confirmation email, etc. """ client = IdealClient() try: response = client.get_transaction_status(self.request.GET.get('trxid')) if response.status == TransactionStatus.SUCCESS: # Redirect to some view with a success message. return '<payment success url>' except IdealException, e: # Do something with the error message. error_message = e.message # Redirect to some view with a failure message. return '<payment failed url>'
Optionally, you can add the the following to your main urls.py to test your configuration and perform all iDEAL operations via a web interface:
if settings.DEBUG: urlpatterns += [ url(r'^ideal/tests/', include('ideal.contrib.django.ideal_compat.test_urls')), ]
If you are in DEBUG mode and use runserver, you can point your browser to: http://localhost:8000/ideal/tests/.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for ideal-0.3.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 445212b3c312b9094e399fc9041710d24645bb76714a8e09632ca2679a5d54b1 |
|
MD5 | bcc1541191586fd46b9324daebc295fa |
|
BLAKE2b-256 | 5eddb671144cea8b5143b9a5eaf8d5efd56f6cbc0f8780b39bdb48dafff9a4fa |