| Version: | 0.3.0 |
|---|---|
| Download: | https://pypi.python.org/pypi/ideal |
| Source: | https://github.com/maykinmedia/python-ideal |
| Keywords: | python, ideal, django |
Implementation of the iDEAL v3.3.1 specification in Python.
You can install ideal either via the Python Package Index (PyPI) or from source.
To install using pip:
$ pip install -U idealIt is assumed you have already requested access at your bank for iDEAL.
Install the ideal library:
$ pip install idealGenerate or locate your certificates (
cert.cer, andpriv.pem) and your bank's public certificate (here namedideal_v3.cerbut 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 theideal-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)
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 (
listor comma-separatedstringif 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
ACQUIRERandDEBUGsetting (default:None). - LANGUAGE (
string) - Response language in ISO 639-1 format, only Dutch (
nl) and English (en) are supported (default:nl).
To run all unit tests, download the entire package and run:
$ python setup.py testAll settings can be capitalized and prefixed with
IDEAL_and placed in Django'ssettings.pyfile, rather than using a configuration file. Of course, you may still use the settings file method.Add
ideal.contrib.django.ideal_compatto yourINSTALLED_APPS.Run
python manage.py migrateto create theIssuertable in your database, to store a local copy of all issuers.Run
python manage.py sync_issuersto fill theIssuertable 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 yoururls.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 as e: # Do something with the error message. error_message = e # Redirect to some view with a failure message. return '<payment failed url>'
Optionally, you can add the the following to your main
urls.pyto 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/.