I recently started working with CiviCRM. For a project I need a contribution type different from the credit card system, which is called direct debit (mor Informations: http://en.wikipedia.org/wiki/Direct_debit). At least in Germany direct debit seems to be more accepted than credit cards.
If somebody wants to do a direct debit transaction he just need to fill in his name (name of Account Holder), the Bank Account Number, the Bank Identification Number and maybe the bank name (the name of the bank is not necessarily needed but it's quiet common that you also have to type in the name of your bank – a better way is to automatically show up the name when the Bank Identification Number is provided, but at least in Germany this means the site operator needs to update the bank identification numbers every 3 months).
Now I started to adapt CiviCRM for this new method. Therefore I introduced a new variable "payment_type" with the values 1 (PAYMENT_TYPE_CREDIT_CARD) and 2 (PAYMENT_TYPE_DIRECT_DEBIT). I have not implemented the value 3 (to use both if the payment processor will provide both methods).
The next step was that each time where he credit card was used I had to check which payment type we are currently using. If it is PAYMENT_TYPE_DIRECT_DEBIT we show the direct debit input fields and process the direct debit.
I have seen that there are Payment Instruments But I'm not sure if I can use payment instruments for my purposes. If it is so, we can use the variable payment_instrument_id in space of payment_type.
I haven't implemented the direct debit for CiviCRM 2.2, but I'll do this soon. I also haven't Implemented the functionality for other modules which are using payments processors (event registration). It also will be done later. First I want to start this issue in hop that it makes into core for 2.3.