SEPA Direct Debit
Client-Side Implementation
SEPA Direct Debit is available to eligible merchants using a custom client-side integration. It is only available in Android v4.13+, iOS v5.11+, and JavaScript v3 SDK. It's not currently available in Drop-in.
If you meet the criteria, Contact us to enable SEPA Direct Debit in your Sandbox or Production account.
Get the SDK
Add the following in your app-level build.gradle
:
- Kotlin
- Groovy
dependencies {
implementation("com.braintreepayments.api:sepa-direct-debit:4.49.1")
}
Collect information
Once your component is ready, collect the required bank account information from the customer.
Bank information:
- accountHolderName (the name of the account owner)
- iban (International Bank Account Number)
Customer information:
- billingAddress
- customerId (customer id in the merchant's system)
Invoking the SEPA Direct Debit flow
Construct a SEPADirectDebitClient
and a SEPADirectDebitRequest
. Call SEPADirectDebit#tokenize
to launch the SEPA Direct Debit flow. This method will create a mandate, launch a browser to display the mandate to the user, and redirect back to your app to tokenize.
Add a SEPADirectDebitListener
to your SEPADirectDebitClient
to receive results from the flow. A SEPADirectDebitNonce
will be returned to the onSEPADirectDebitSuccess
listener method on successful completion of the flow.
- Kotlin
- Java
class MyActivity : AppCompatActivity(), SEPADirectDebitListener {
lateinit var braintreeClient: BraintreeClient
lateinit var sepaDirectDebitClient: SEPADirectDebitClient
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
braintreeClient = BraintreeClient(this, ExampleClientTokenProvider())
sepaDirectDebitClient = SEPADirectDebitClient(braintreeClient)
sepaDirectDebitClient.setListener(this)
}
private fun startSEPADirectDebit() {
val billingAddress = PostalAddress()
billingAddress.recipientName = "John Doe"
billingAddress.streetAddress = "123 Main St"
billingAddress.countryCodeAlpha2 = "NL"
billingAddress.locality = "Amsterdam"
billingAddress.postalCode = "1072 AE"
val request = SEPADirectDebitRequest()
request.accountHolderName = "John Doe"
request.customerId = "1234"
request.iban = "FR7618106000321234566666608"
request.mandateType = SEPADirectDebitMandateType.ONE_OFF
request.billingAddress = billingAddress
sepaDirectDebitClient.tokenize(this, request)
}
override fun onSEPADirectDebitSuccess(sepaDirectDebitNonce: SEPADirectDebitNonce) {
// send sepaDirectDebitNonce.string to server and create a transaction
}
override fun onSEPADirectDebitFailure(error: Exception) {
if (error is UserCanceledException) {
// user canceled
} else {
// handle error
}
}
}