Preview to Direct Debit payment processor for CiviCRM and Drupal payment gateway module

Update: Our modifications to CiviCRM are in CiviCRM 3.0 core now. We will publish the Payment Processor and the corresponding Drupal module in the next weeks. Don't expect fast process though - we are quite busy currently. Use our demo at (username and password: demo) meanwhile.

Update 2: Get a newer version of this text including downloadable files at (german only).


  1. Add files to the sites module directory and patch your CiviCRM (version 2.2)
  2. Add the payment processor by running addDirectDebitPaymentProcessor.php from command line
  3. Configure Payment Processor (Instead of using http requests to call the processor we call directly a module function direct_debit_pp_do_payment($input_data, $mode);). You need to fill in the required fields in the payment processor setup form, but we won't use/need them.
  4. Create the contribution page and choose the direct debit payment processor.
  5. Make a contribution (fill in the required data and send the form and its confirmation).
  6. The drupal module will get invoked (by calling direct_debit_pp_do_payment()), it validates the contribution data and stores it to its database. (At the moment, the function returns the transaction result.)
  7. Set contribution status to pending. (I adapted the function processConfirm() in CRM/Contribute/BAO/Contribution/Utils.php so that we can set the $pending parameter in the function call CRM_Contribute_Form_Contribution_Confirm::processContribution to true. The payment processor can now control if he wants to set the contribution status to pending or not.
  8. A user with the access direct debit permissions can now create a DTA file which includes the new transactions (DTA is a standard transaction file format in Germany and will be accepted by the most german banks; for an export different file formats we need to adept the export functions code). While creating the DTA the contribution status in the direct debit module (and in civicrm) get set to "in progress".
  9. If the transactions have got completed / canceled / failed the status can be set to completed / canceled / failed. (At this point we will call some civicrm functions to set the contribution status also in civicrm to completed.)
  10. That's it. Test it and it would be nice to receive your feedback.



  • Enable and test the payment processor for CiviEvents and CiviMember
  • Recurring payments

About the attachment:

I attached an archive which includes:
  • the patch (civicrm-2.2.2-direct-debit-all.20090504.patch; see READEME.txt for instructions how to apply the patch)
  • the drupal module direct_debit (to use the drupal module you may need the bank identification numbers from the German Bundesbank and the pears Payment_DTA Package from PEAR ... If you only want to test the payment processor you properly won't need this files.)
  • README.txt and LICENSE.txt


Patch für 2.2 und Massen DTA


ich wollte fragen ob es auch schon einen Patch für 2.2 gibt und ob es im PULL verfahren möglich ist DTAs zu generieren.

Für unseren Verein machen wir monatlich einen Lastschrifteinzug für den Mitgliedsbeitrag und es wäre super wenn ich das mit diesem Modul irgendwie abbilden könnte.

Lieben Gruß Malte

Ja, der Patch für CiviCRM 2.2

Ja, der Patch für CiviCRM 2.2 wird derzeit von uns getestet. In den kommenden Tagen stellen wir ihn hier zur Verfügung

Support for SEPA Direct Debit?

Have you checked out Single European Payments Area Direct Debit standard? If and when this happens it's going to make life a bit easier for software developers.

Not yet - waiting for german banks

SEPA direct debit will not start in Germany (or Europe) before November 2009. As soon as the german banks support SEPA direct debit we consider switching to SEPA. This will enhance the availableness of our payment processor to all european countries which is a nice thing of course.

Currently we only support German ELV (Elektronisches Lastschriftverfahren) using DTA files. ELV is supported up to 2012.


I can't seem to find the attachment.
Would be quite interested in this and would certainly provide feedback / code updates (working on civicrm4.1 / drupal 7).


Please have a look here for the files: