Our Web Drop-in renders giropay in your payment form, and redirects the shopper to their selected bank's website to complete the payment.
When making a giropay payment, you additionally need to:
- Handle the redirect result after the shopper returns to your website.
Before you begin
This page explains how to add giropay to your existing Web Drop-in integration. The Web Drop-in integration works the same way for all payment methods. If you haven't done this integration yet, refer to our Drop-in integration guide.
Before starting your giropay integration:
- Make sure that you have set up your back end implementation, and added Drop-in to your payments form.
- Add giropay in your test Customer Area.
Show giropay in your payment form
Drop-in uses the countryCode
and the amount.currency
from your /paymentMethods request to show the available payment methods to your shopper.
To show giropay in your payment form, specify in your /paymentMethods request:
- countryCode: DE
- amount.currency: EUR
Make a payment
When the shopper selects the Pay button, Drop-in calls the onSubmit
event, which contains a state.data
.
-
Pass the
state.data
to your server. - From your server, make a /payments request, specifying:
-
paymentMethod
: Thestate.data.paymentMethod
from theonSubmit
event from your front end. -
reference
: Your unique reference for this payment. -
amount
: The amount that the shopper needs to pay. -
returnUrl
: The URL the shopper will be redirected back to after they complete the payment.
-
curl https://checkout-test.adyen.com/v51/payments \
-H "x-API-key: YOUR_X-API-KEY" \
-H "content-type: application/json" \
-d '{
"amount": {
"currency": "EUR",
"value": 1000
},
"reference": "YOUR_ORDER_NUMBER",
"paymentMethod": {
"type": "giropay",
"bic":"DEUTDE2H"
},
"returnUrl": "https://your-company.com/checkout?shopperOrder=12xy..",
"merchantAccount": "YOUR_MERCHANT_ACCOUNT"
}'
# Set your X-API-KEY with the API key from the Customer Area.
adyen = Adyen::Client.new
adyen.api_key = "YOUR_X-API-KEY"
response = adyen.checkout.payments({
:amount => {
:currency => "EUR",
:value => 1000
},
:reference => "YOUR_ORDER_NUMBER",
:paymentMethod => {
:type => "giropay",
:bic => "DEUTDE2H"
},
:returnUrl => "https://your-company.com/checkout?shopperOrder=12xy..",
:merchantAccount => "YOUR_MERCHANT_ACCOUNT"
})
// Set YOUR_X-API-KEY with the API key from the Customer Area.
// Change to Environment.LIVE and add the Live URL prefix when you're ready to accept live payments.
Client client = new Client("YOUR_X-API-KEY", Environment.TEST);
Checkout checkout = new Checkout(client);
PaymentsRequest paymentsRequest = new PaymentsRequest();
String merchantAccount = "YOUR_MERCHANT_ACCOUNT";
paymentsRequest.setMerchantAccount(merchantAccount);
Amount amount = new Amount();
amount.setCurrency("EUR");
amount.setValue(15000L);
paymentsRequest.setAmount(amount);
DefaultPaymentMethodDetails paymentMethodDetails = new DefaultPaymentMethodDetails();
paymentMethodDetails.setType("giropay");
paymentMethodDetails.setBic("DEUTDE2H");
paymentsRequest.setPaymentMethod(paymentMethodDetails);
paymentsRequest.setReference("YOUR_ORDER_NUMBER");
paymentsRequest.setReturnUrl("https://your-company.com/checkout?shopperOrder=12xy..");
PaymentsResponse paymentsResponse = checkout.payments(paymentsRequest);
// Set your X-API-KEY with the API key from the Customer Area.
$client = new \Adyen\Client();
$client->setXApiKey("YOUR_X-API-KEY");
$service = new \Adyen\Service\Checkout($client);
$params = array(
"amount" => array(
"currency" => "EUR",
"value" => 1000
),
"reference" => "YOUR_ORDER_NUMBER",
"paymentMethod" => array(
"type" => "giropay",
"bic" => "DEUTDE2H"
),
"returnUrl" => "https://your-company.com/checkout?shopperOrder=12xy..",
"merchantAccount" => "YOUR_MERCHANT_ACCOUNT"
);
$result = $service->payments($params);
#Set your X-API-KEY with the API key from the Customer Area.
adyen = Adyen.Adyen()
adyen.client.xapikey = 'YOUR_X-API-KEY'
result = adyen.checkout.payments({
'amount': {
'value': 1000,
'currency': 'EUR'
},
'reference': 'YOUR_ORDER_NUMBER',
'paymentMethod': {
'type': 'giropay',
'bic': 'DEUTDE2H'
},
'returnUrl': 'https://your-company.com/checkout?shopperOrder=12xy..',
'merchantAccount': 'YOUR_MERCHANT_ACCOUNT'
})
// Set your X-API-KEY with the API key from the Customer Area.
var client = new Client ("YOUR_X-API-KEY", Environment.Test);
var checkout = new Checkout(client);
var amount = new Model.Checkout.Amount("EUR", 1000);
var details = new Model.Checkout.DefaultPaymentMethodDetails{
Type = "giropay",
Bic = "DEUTDE2H"
};
var paymentsRequest = new Model.Checkout.PaymentRequest
{
Reference = "YOUR_ORDER_NUMBER",
Amount = amount,
ReturnUrl = @"https://your-company.com/checkout?shopperOrder=12xy..",
MerchantAccount = "YOUR_MERCHANT_ACCOUNT",
PaymentMethod = details
};
var paymentResponse = checkout.Payments(paymentsRequest);
// Set your X-API-KEY with the API key from the Customer Area.
const {Client, Config, CheckoutAPI} = require('@adyen/api-library');
const config = new Config();
// Set your X-API-KEY with the API key from the Customer Area.
config.apiKey = '[API_KEY]';
config.merchantAccount = '[YOUR_MERCHANT_ACCOUNT]';
const client = new Client({ config });
client.setEnvironment("TEST");
const checkout = new CheckoutAPI(client);
checkout.payments({
amount: { currency: "EUR", value: 1000 },
paymentMethod: {
type: 'giropay',
bic: 'DEUTDE2H'
},
reference: "YOUR_ORDER_NUMBER",
merchantAccount: config.merchantAccount,
returnUrl: "adyencheckout://your.package.name"
}).then(res => res);
The /payments response contains:
-
resultCode
: RedirectShopper -
details: Array that contains the
key
parameter name and the corresponding datatype
that you should expect when the shopper is redirected to yourreturnURL
. You need to submit this value in your /payments/details request when handling the redirect result. -
redirect
: object containing aurl
. You'll need this URL to present the payment result to the shopper.
{
"resultCode": "RedirectShopper",
"action": {
"method": "GET",
"paymentData": "Ab02b4c0!BQABA...",
"paymentMethodType": "giropay",
"type": "redirect",
"url": "https://test.adyen.com/hpp/..."
},
"details": [
{
"key": "payload",
"type": "text"
}
],
"paymentData": "Ab02b4c0!BQABA...",
"redirect": {
"method": "GET",
"url": "https://test.adyen.com/hpp/..."
}
}
Handle the redirect result
Drop-in uses the redirect.url
to redirect the shopper to the issuing bank's website. After the shopper is redirected back to your website, you need to check the payment result by making a /payments/details request.
For more information and detailed instructions, refer to Handling the redirect result.
Present the payment result
Use the resultCode that you received in the /payments/details response to present the payment result to your shopper.
The resultCode
values you can receive for giropay are:
resultCode | Description | Action to take |
---|---|---|
Authorised | The payment was successful. | Inform the shopper that the payment has been successful. You will receive the funds in 2-3 days. |
Cancelled | The shopper cancelled the payment while on their bank's website. | Ask the shopper whether they want to continue with the order, or request that they select a different payment method. |
Pending | The shopper has completed the payment but the final result is not yet known. It may take minutes or hours for the Open Banking payments network to confirm this. | Inform the shopper that you've received their order, and are waiting for the payment to be completed. You will receive the final result of the payment in an AUTHORISATION notification. |
Refused | The payment was refused by the shopper's bank. | Ask the shopper to try the payment again using a different payment method. For a description of the refusal reason, check the Payment Details page in your Customer Area. |
Recurring payments
We support recurring transactions for giropay through SEPA Direct Debit. To make recurring payments, you need to:
Create a token
To create a token, include in your /payments request:
-
storePaymentMethod
: true - shopperReference: Your unique identifier for the shopper.
When the payment has been settled, you receive a webhook notification containing:
-
eventCode
: RECURRING_CONTRACT -
originalReference
: ThepspReference
of the initial payment. -
pspReference
: This is the token that you need to make recurring payments for this shopper.
Make a payment with a token
To make a payment with the token, include in your /payments request:
-
paymentMethod.storedPaymentMethodId
: ThepspReference
from the RECURRING_CONTRACT.
-
shopperReference
: The unique shopper identifier that you specified when creating the token. -
shopperInteraction
: ContAuth. -
recurringProcessingModel
: Subscription or UnscheduledCardOnFile.
For more information about the shopperInteraction
and recurringProcessingModel
fields, refer to Recurring transaction types.
curl https://checkout-test.adyen.com/v51/payments \
-H "x-API-key: YOUR_X-API-KEY" \
-H "content-type: application/json" \
-d '{
"amount":{
"value":1000,
"currency":"EUR"
},
"paymentMethod":{
"type":"sepadirectdebit",
"recurringDetailReference":"7219687191761347"
},
"reference":"YOUR_ORDER_NUMBER",
"merchantAccount":"YOUR_MERCHANT_ACCOUNT",
"shopperReference":"YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j",
"shopperInteraction":"ContAuth",
"recurringProcessingModel": "Subscription"
}'
# Set your X-API-KEY with the API key from the Customer Area.
adyen = Adyen::Client.new
adyen.api_key = "YOUR_X-API-KEY"
response = adyen.checkout.payments({
:amount => {
:currency => "EUR",
:value => 1000
},
:reference => "YOUR_ORDER_NUMBER",
:paymentMethod => {
:type => "sepadirectdebit",
:recurringDetailReference => "7219687191761347"
},
:returnUrl => "https://your-company.com/checkout?shopperOrder=12xy..",
:shopperReference => "YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j",
:merchantAccount => "YOUR_MERCHANT_ACCOUNT",
:shopperInteraction => "ContAuth",
:recurringProcessingModel => "Subscription"
})
// Set YOUR_X-API-KEY with the API key from the Customer Area.
// Change to Environment.LIVE and add the Live URL prefix when you're ready to accept live payments.
Client client = new Client("YOUR_X-API-KEY", Environment.TEST);
Checkout checkout = new Checkout(client);
PaymentsRequest paymentsRequest = new PaymentsRequest();
String merchantAccount = "YOUR_MERCHANT_ACCOUNT";
paymentsRequest.setMerchantAccount(merchantAccount);
Amount amount = new Amount();
amount.setCurrency("EUR");
amount.setValue(15000L);
paymentsRequest.setAmount(amount);
DefaultPaymentMethodDetails paymentMethodDetails = new DefaultPaymentMethodDetails();
paymentMethodDetails.setRecurringDetailReference("7219687191761347");
paymentMethodDetails.setType("sepadirectdebit");
paymentsRequest.setPaymentMethod(paymentMethodDetails);
paymentsRequest.setReference("YOUR_ORDER_NUMBER");
paymentsRequest.setReturnUrl("https://your-company.com/checkout?shopperOrder=12xy..");
paymentsRequest.setShopperInteraction("ContAuth");
paymentsRequest.setRecurringProcessingModel("Subscription");
PaymentsResponse paymentsResponse = checkout.payments(paymentsRequest);
// Set your X-API-KEY with the API key from the Customer Area.
$client = new \Adyen\Client();
$client->setXApiKey("YOUR_X-API-KEY");
$service = new \Adyen\Service\Checkout($client);
$params = array(
"amount" => array(
"currency" => "EUR",
"value" => 1000
),
"reference" => "YOUR_ORDER_NUMBER",
"paymentMethod" => array(
"type" => "sepadirectdebit",
"recurringDetailReference" => "7219687191761347"
),
"returnUrl" => "https://your-company.com/checkout?shopperOrder=12xy..",
"shopperReference" => "YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j",
"recurringProcessingModel" => "Subscription",
"shopperInteraction" => "ContAuth",
"merchantAccount" => "YOUR_MERCHANT_ACCOUNT"
);
$result = $service->payments($params);
#Set your X-API-KEY with the API key from the Customer Area.
adyen = Adyen.Adyen()
adyen.client.xapikey = 'YOUR_X-API-KEY'
result = adyen.checkout.payments({
'amount': {
'value': 1000,
'currency': 'EUR'
},
'reference': 'YOUR_ORDER_NUMBER',
'paymentMethod': {
'type': 'sepadirectdebit',
'recurringDetailReference': '7219687191761347'
},
'returnUrl': 'https://your-company.com/checkout?shopperOrder=12xy..',
'shopperReference': 'YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j'
'merchantAccount': 'YOUR_MERCHANT_ACCOUNT',
'shopperInteraction':'ContAuth',
'recurringProcessingModel': 'Subscription'
})
// Set your X-API-KEY with the API key from the Customer Area.
var client = new Client ("YOUR_X-API-KEY", Environment.Test);
var checkout = new Checkout(client);
var amount = new Model.Checkout.Amount("EUR", 1000);
var details = new Model.Checkout.DefaultPaymentMethodDetails{
Type = "sepadirectdebit",
RecurringDetailReference = "7219687191761347"
};
var paymentsRequest = new Model.Checkout.PaymentRequest
{
Reference = "YOUR_ORDER_NUMBER",
Amount = amount,
ReturnUrl = @"https://your-company.com/checkout?shopperOrder=12xy..",
MerchantAccount = "YOUR_MERCHANT_ACCOUNT",
ShopperReference = "YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j",
RecurringProcessingModel = "Subscription",
ShopperInteraction = "ContAuth",
PaymentMethod = details
};
var paymentResponse = checkout.Payments(paymentsRequest);
// Set your X-API-KEY with the API key from the Customer Area.
const {Client, Config, CheckoutAPI} = require('@adyen/api-library');
const config = new Config();
// Set your X-API-KEY with the API key from the Customer Area.
config.apiKey = '[API_KEY]';
config.merchantAccount = '[YOUR_MERCHANT_ACCOUNT]';
const client = new Client({ config });
client.setEnvironment("TEST");
const checkout = new CheckoutAPI(client);
checkout.payments({
amount: { currency: "EUR", value: 1000 },
paymentMethod: {
type: 'sepadirectdebit',
recurringDetailReference: "7219687191761347"
},
reference: "YOUR_ORDER_NUMBER",
merchantAccount: config.merchantAccount,
shopperReference: "YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j",
returnUrl: "https://your-company.com/checkout?shopperOrder=12xy..",
shopperInteraction: "ContAuth",
recurringProcessingModel: "Subscription"
}).then(res => res);
Test and go live
Before making live giropay payments, use the following details to test your integration:
Bank Name | BIC | Customer name | IBAN | Account ID | Bankleitzahl |
---|---|---|---|---|---|
Testbank Fiducia | GENODETT488 | Any | DE36444488881234567890 | 1234567890 | 44448888 |
After selecting Testbank Fiducia, you are redirected to a page where you can select different statuses to simulate with. We recommend testing each giropay status code:
sc | extensionSc | importance |
---|---|---|
10 | 4000 | The payment was successful. |
20 | 2000,2100,2200,2300,2400,2500,2600,2700,3100,3900,4900 | The payment was not successful. |
30 | 4500 | Status of the payment is unknown. |
40 | 0 | Bank is not unlocked for giropay. |
You can check the status of a giropay test payment in your Customer Area > Transactions > Payments.
Before you can accept live giropay payments, you need to submit a request for giropay in your live Customer Area.