Package: ideal
Version:0.3.0Download:https://pypi.python.org/pypi/idealSource:https://github.com/maykinmedia/python-idealKeywords:python, ideal, djangoAboutImplementation of the iDEAL v3.3.1 specification in Python.InstallationYou can installidealeither via the Python Package Index (PyPI) or from
source.To install usingpip:$pipinstall-UidealUsageIt is assumed you have already requested access at your bank for iDEAL.Install theideallibrary:$pipinstallidealGenerate 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 calledideal.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 = INGIn Python, make sure your settings are initialized by loading the config file:fromideal.confimportsettingssettings.load('ideal.cfg')# You may adjust (or completely define) your settings (capitalized) in Python as wellsettings.DEBUG=TrueAfter your settings are loaded, you can communicate with iDEAL:fromideal.clientimportIdealClientideal=IdealClient()response=ideal.get_issuers()printresponse.issuersSettingsThese settings are lower-case and stored in yourideal.cfgfile (or in Django’ssettings.py, prefixed withIDEAL_).DEBUG(boolean)Uses the test URL of the acquirer if set toTrue, 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 theACQUIRERandDEBUGsetting (default:None).LANGUAGE(string)Response language in ISO 639-1 format, only Dutch (nl) and English (en) are supported (default:nl).TestingTo run all unit tests, download the entire package and run:$pythonsetup.pytestContribDjangoAll settings can be capitalized and prefixed withIDEAL_and placed in Django’ssettings.pyfile, rather
than using a configuration file. Of course, you may still use the settings file method.Addideal.contrib.django.ideal_compatto yourINSTALLED_APPS.Runpython manage.py migrateto create theIssuertable in your database, to store a local
copy of all issuers.Runpython 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 asMERCHANT_RETURN_URL) to yoururls.py. Below, you’ll find an example view to redirect the use depending on
the transaction status:fromdjango.views.generic.baseimportRedirectViewfromideal.clientimportIdealClient,TransactionStatusfromideal.exceptionsimportIdealExceptionclassIdealCallbackView(RedirectView):permanent=Falsedefget_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'))ifresponse.status==TransactionStatus.SUCCESS:# Redirect to some view with a success message.return'<payment success url>'exceptIdealException,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 mainurls.pyto test your configuration and perform all iDEAL
operations via a web interface:ifsettings.DEBUG:urlpatterns+=[url(r'^ideal/tests/',include('ideal.contrib.django.ideal_compat.test_urls')),]If you are in DEBUG mode and userunserver, you can point your browser to:http://localhost:8000/ideal/tests/.