# Use Bancontact to set up future SEPA Direct Debit payments Learn how to save bank details from a Bancontact payment and charge your customers later with SEPA Direct Debit. > We recommend that you follow the [Set up future payments](https://docs.stripe.com/payments/save-and-reuse.md) guide. If you’ve already integrated with Elements, see the [Payment Element migration guide](https://docs.stripe.com/payments/payment-element/migration.md). Bancontact is a [single use](https://docs.stripe.com/payments/payment-methods.md#usage) payment method where customers are required to [authenticate](https://docs.stripe.com/payments/payment-methods.md#customer-actions) each payment. With this integration, Stripe charges your customer 0.02 EUR through Bancontact to collect their bank details. After your customer authenticates the payment, Stripe refunds the payment and stores your customer’s [IBAN](https://en.wikipedia.org/wiki/International_Bank_Account_Number) in a [SEPA Direct Debit](https://docs.stripe.com/payments/sepa-debit.md) payment method. You can then use the SEPA Direct Debit [PaymentMethod](https://docs.stripe.com/api/payment_methods.md) to [accept payments](https://docs.stripe.com/payments/sepa-debit/accept-a-payment.md) or [set up a subscription](https://docs.stripe.com/billing/subscriptions/sepa-debit.md). If you want to save IBAN details when you accept a payment, see [Save bank details during payment](https://docs.stripe.com/payments/bancontact/save-during-payment.md). > #### Activate SEPA Direct Debit > > To use Bancontact to set up SEPA Direct Debit payments, you must activate SEPA Direct Debit in the [Dashboard](https://dashboard.stripe.com/account/payments/settings). You must also comply with the [Bancontact Terms of Service](https://stripe.com/bancontact/legal) and [SEPA Direct Debit Terms of Service](https://stripe.com/sepa-direct-debit/legal). # Checkout > This is a Checkout for when payment-ui is checkout. View the full page at https://docs.stripe.com/payments/bancontact/set-up-payment?payment-ui=checkout. You can use [Checkout in setup mode](https://docs.stripe.com/payments/save-and-reuse.md?platform=checkout) to collect payment details and set up future SEPA Direct Debit payments using Bancontact. ## Create or retrieve a customer [Sisi server] To set up future SEPA Direct Debit payments using Bancontact, you must attach the SEPA Direct Debit payment method to an object that represents your customer. > #### Menggunakan API Akun v2 untuk mewakili pelanggan > > API Akun v2 umumnya tersedia untuk pengguna Connect, dan dalam pratinjau publik untuk pengguna Stripe lainnya. Jika Anda adalah bagian dari pratinjau Akun v2, Anda perlu menentukan [Tentukan versi pratinjau](https://docs.stripe.com/api-v2-overview.md#sdk-and-api-versioning) dalam kode Anda. > > Untuk meminta akses ke pratinjau Akun v2, > > Untuk sebagian besar contoh penggunaan, sebaiknya Anda [memodelkan pelanggan Anda sebagai objek Akun yang dikonfigurasi pelanggan](https://docs.stripe.com/accounts-v2/use-accounts-as-customers.md) alih-alih menggunakan objek [Pelanggan](https://docs.stripe.com/api/customers.md). Buat [Akun](https://docs.stripe.com/api/v2/core/accounts/create.md#v2_create_accounts-configuration-customer) atau [Pelanggan](https://docs.stripe.com/api/customers/create.md) yang dikonfigurasi pelanggan saat pelanggan Anda membuat akun dengan bisnis Anda, atau saat menyimpan metode pembayaran. Kaitkan ID objek dengan representasi internal pelanggan Anda sendiri. Buat pelanggan baru atau ambil pelanggan yang sudah ada untuk dikaitkan dengan pembayaran ini. #### Akun v2 ```curl curl -X POST https://api.stripe.com/v2/core/accounts \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-04-22.preview" \ --json '{ "contact_email": "jenny.rosen@example.com", "display_name": "Jenny Rosen", "configuration": { "customer": {} }, "include": [ "configuration.customer" ] }' ``` #### Pelanggan v1 ```curl curl https://api.stripe.com/v1/customers \ -u "<>:" \ -d "name=Jenny Rosen" \ --data-urlencode "email=jenny.rosen@example.com" ``` ## Siapkan pembayaran mendatang This guide builds on the foundational [set up future payments](https://docs.stripe.com/payments/save-and-reuse.md?platform=checkout) Checkout integration and shows the differences between using [dynamic payment methods](https://docs.stripe.com/payments/payment-methods/dynamic-payment-methods.md) and manually configuring payment methods. ### Enable Bancontact as a payment method When creating a new [Checkout Session](https://docs.stripe.com/api/checkout/sessions.md), you need to add `bancontact` to the list of `payment_method_types`. #### Halaman yang di-hosting Stripe #### Accounts v2 ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d mode=setup \ -d "payment_method_types[]=card" \ -d "payment_method_types[]=bancontact" \ --data-urlencode "success_url=https://example.com/success" ``` #### Customers v1 ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d mode=setup \ -d "payment_method_types[]=card" \ -d "payment_method_types[]=bancontact" \ --data-urlencode "success_url=https://example.com/success" ``` #### Full embedded page #### Accounts v2 ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d mode=setup \ -d "payment_method_types[]=card" \ -d "payment_method_types[]=bancontact" \ --data-urlencode "return_url=https://example.com/return" \ -d ui_mode=embedded_page ``` #### Customers v1 ```curl curl https://api.stripe.com/v1/checkout/sessions \ -u "<>:" \ -d "customer={{CUSTOMER_ID}}" \ -d mode=setup \ -d "payment_method_types[]=card" \ -d "payment_method_types[]=bancontact" \ --data-urlencode "return_url=https://example.com/return" \ -d ui_mode=embedded_page ``` ## Charge the SEPA Direct Debit PaymentMethod later [Sisi server] When you need to charge your customer again, create a new PaymentIntent. Find the ID of the SEPA Direct Debit payment method by [retrieving](https://docs.stripe.com/api/setup_intents/retrieve.md) the SetupIntent and [expanding](https://docs.stripe.com/api/expanding_objects.md) the `latest_attempt` field where you’ll find the `generated_sepa_debit` ID inside of `payment_method_details`. ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUP_INTENT_ID}} \ -u "<>:" \ -d "expand[]=latest_attempt" ``` Create a `PaymentIntent` with the SEPA Direct Debit ID and the customer’s ID. #### Accounts v2 ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "payment_method_types[]=sepa_debit" \ -d amount=1099 \ -d currency=eur \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d payment_method={{SEPA_DEBIT_PAYMENT_METHOD_ID}} \ -d confirm=true ``` #### Customers v1 ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "payment_method_types[]=sepa_debit" \ -d amount=1099 \ -d currency=eur \ -d "customer={{CUSTOMER_ID}}" \ -d payment_method={{SEPA_DEBIT_PAYMENT_METHOD_ID}} \ -d confirm=true ``` ## Coba integrasi Anda When testing your Checkout integration, select Bancontact as the payment method and click the **Pay** button. # API langsung > This is a API langsung for when payment-ui is direct-api. View the full page at https://docs.stripe.com/payments/bancontact/set-up-payment?payment-ui=direct-api. Setting up future SEPA Direct Debit payments using Bancontact in your app consists of creating a [SetupIntent](https://docs.stripe.com/api/setup_intents.md) to track the process, collecting mandate acknowledgement, and redirecting your customer to Bancontact. Stripe uses the SetupIntent to track and handle all the states of the setup until the setup completes. ## Siapkan Stripe [Sisi server] Pertama, Anda membutuhkan akun Stripe. [Daftar sekarang](https://dashboard.stripe.com/register). Gunakan pustaka resmi kami untuk mendapatkan akses ke API Stripe dari aplikasi Anda: #### Ruby ```bash # Available as a gem sudo gem install stripe ``` ```ruby # If you use bundler, you can add this line to your Gemfile gem 'stripe' ``` ## Create or retrieve a customer [Sisi server] To set up future SEPA Direct Debit payments using Bancontact, you must attach the SEPA Direct Debit payment method to an object that represents your customer. > #### Menggunakan API Akun v2 untuk mewakili pelanggan > > API Akun v2 umumnya tersedia untuk pengguna Connect, dan dalam pratinjau publik untuk pengguna Stripe lainnya. Jika Anda adalah bagian dari pratinjau Akun v2, Anda perlu menentukan [Tentukan versi pratinjau](https://docs.stripe.com/api-v2-overview.md#sdk-and-api-versioning) dalam kode Anda. > > Untuk meminta akses ke pratinjau Akun v2, > > Untuk sebagian besar contoh penggunaan, sebaiknya Anda [memodelkan pelanggan Anda sebagai objek Akun yang dikonfigurasi pelanggan](https://docs.stripe.com/accounts-v2/use-accounts-as-customers.md) alih-alih menggunakan objek [Pelanggan](https://docs.stripe.com/api/customers.md). Buat [Akun](https://docs.stripe.com/api/v2/core/accounts/create.md#v2_create_accounts-configuration-customer) atau [Pelanggan](https://docs.stripe.com/api/customers/create.md) yang dikonfigurasi pelanggan saat pelanggan Anda membuat akun dengan bisnis Anda, atau saat menyimpan metode pembayaran. Kaitkan ID objek dengan representasi internal pelanggan Anda sendiri. Buat pelanggan baru atau ambil pelanggan yang sudah ada untuk dikaitkan dengan pembayaran ini. #### Akun v2 ```curl curl -X POST https://api.stripe.com/v2/core/accounts \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-04-22.preview" \ --json '{ "contact_email": "jenny.rosen@example.com", "display_name": "Jenny Rosen", "configuration": { "customer": {} }, "include": [ "configuration.customer" ] }' ``` #### Pelanggan v1 ```curl curl https://api.stripe.com/v1/customers \ -u "<>:" \ -d "name=Jenny Rosen" \ --data-urlencode "email=jenny.rosen@example.com" ``` ## Buat SetupIntent [Sisi server] A [SetupIntent](https://docs.stripe.com/api/setup_intents.md) is an object that represents your intent to set up a customer’s payment method for future payments and tracks the steps of this setup process. For Bancontact, this includes collecting a [SEPA Direct Debit mandate](https://www.europeanpaymentscouncil.eu/what-we-do/sepa-direct-debit/sdd-mandate) from the customer and tracking its validity. Create a `SetupIntent` with the customer’s ID and add `bancontact` to the [payment_method_types](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_types) array. #### Accounts v2 ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "payment_method_types[]=bancontact" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" ``` #### Customers v1 ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "payment_method_types[]=bancontact" \ -d customer={{CUSTOMER_ID}} ``` The `SetupIntent` includes a *client secret* (The client secret is a unique key returned from Stripe as part of a SetupIntent. This key lets the client access important fields from the SetupIntent (for example, status)), which is used on the client side to securely complete the setup process without needing the `SetupIntent` object. ## Collect payment method details and mandate acknowledgement [Sisi klien] Create a form on your client to collect the required billing details from the customer. #### HTML+JS ​​To process SEPA Direct Debit payments, you must collect a mandate agreement from your customer. Display the following standard authorization text for your customer to implicitly sign the mandate. Replace *Rocket Rides* with your company name. #### de Durch Angabe Ihrer Zahlungsinformationen und der Bestätigung der vorliegenden Zahlung ermächtigen Sie (A) und Stripe, unseren Zahlungsdienstleister, Ihrem Kreditinstitut Anweisungen zur Belastung Ihres Kontos zu erteilen, und (B) Ihr Kreditinstitut, Ihr Konto gemäß diesen Anweisungen zu belasten. Im Rahmen Ihrer Rechte haben Sie, entsprechend den Vertragsbedingungen mit Ihrem Kreditinstitut, Anspruch auf eine Rückerstattung von Ihrem Kreditinstitut. Eine Rückerstattung muss innerhalb von 8 Wochen ab dem Tag, an dem Ihr Konto belastet wurde, geltend gemacht werden. Eine Erläuterung Ihrer Rechte können Sie von Ihrem Kreditinstitut anfordern. Sie erklären sich einverstanden, Benachrichtigungen über künftige Belastungen bis spätestens 2 Tage vor dem Buchungsdatum zu erhalten. #### id By providing your payment information and confirming this payment, you authorise (A) and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. As part of your rights, you’re entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited. Your rights are explained in a statement that you can obtain from your bank. You agree to receive notifications for future debits up to 2 days before they occur. #### es Al proporcionar sus datos de pago y confirmar este pago, usted autoriza a (A) y Stripe, nuestro proveedor de servicios de pago, a enviar instrucciones a su banco para realizar un débito en su cuenta y (B) a su banco a realizar un cargo en su cuenta de conformidad con dichas instrucciones. Como parte de sus derechos, usted tiene derecho a un reembolso de su banco conforme a los términos y condiciones del contrato con su banco. El reembolso debe reclamarse en un plazo de 8 semanas a partir de la fecha en la que se haya efectuado el cargo en su cuenta. Sus derechos se explican en un extracto que puede obtener en su banco. Usted acepta recibir notificaciones de futuros débitos hasta 2 días antes de que se produzcan. #### fi Antamalla maksutiedot ja vahvistamalla tämän maksun, valtuutat (A) ja Stripen, maksupalveluntarjoajamme, lähettämään ohjeet pankille tilisi veloittamiseksi ja (B) pankkisi veloittamaan tiliäsi kyseisten ohjeiden mukaisesti. Oikeuksiesi mukaisesti olet oikeutettu maksun palautukseen pankilta, kuten heidän kanssaan tekemässäsi sopimuksessa ja sen ehdoissa on kuvattu. Maksun palautus on lunastettava 8 viikon aikana alkaen päivästä, jolloin tiliäsi veloitettiin. Oikeutesi on selitetty pankilta saatavissa olevassa lausunnossa. Hyväksyt vastaanottamaan ilmoituksia tulevista veloituksista jopa kaksi päivää ennen niiden tapahtumista. #### fr En fournissant vos informations de paiement et en confirmant ce paiement, vous autorisez (A) et Stripe, notre prestataire de services de paiement et/ou PPRO, son prestataire de services local, à envoyer des instructions à votre banque pour débiter votre compte et (B) votre banque à débiter votre compte conformément à ces instructions. Vous avez, entre autres, le droit de vous faire rembourser par votre banque selon les modalités et conditions du contrat conclu avec votre banque. La demande de remboursement doit être soumise dans un délai de 8 semaines à compter de la date à laquelle votre compte a été débité. Vos droits sont expliqués dans une déclaration disponible auprès de votre banque. Vous acceptez de recevoir des notifications des débits à venir dans les 2 jours précédant leur réalisation. #### it Fornendo i dati di pagamento e confermando il pagamento, l’utente autorizza (A) e Stripe, il fornitore del servizio di pagamento locale, a inviare alla sua banca le istruzioni per eseguire addebiti sul suo conto e (B) la sua banca a effettuare addebiti conformemente a tali istruzioni. L’utente, fra le altre cose, ha diritto a un rimborso dalla banca, in base a termini e condizioni dell’accordo sottoscritto con l’istituto. Il rimborso va richiesto entro otto settimane dalla data dell’addebito sul conto. I diritti dell’utente sono illustrati in una comunicazione riepilogativa che è possibile richiedere alla banca. L’utente accetta di ricevere notifiche per i futuri addebiti fino a due giorni prima che vengano effettuati. #### nl Door je betaalgegevens door te geven en deze betaling te bevestigen, geef je (A) en Stripe, onze betaaldienst, toestemming om instructies naar je bank te verzenden om het bedrag van je rekening af te schrijven, en (B) geef je je bank toestemming om het bedrag van je rekening af te schrijven conform deze aanwijzingen. Als onderdeel van je rechten kom je in aanmerking voor een terugbetaling van je bank conform de voorwaarden van je overeenkomst met de bank. Je moet terugbetalingen binnen acht weken claimen vanaf de datum waarop het bedrag is afgeschreven van je rekening. Je rechten worden toegelicht in een overzicht dat je bij de bank kunt opvragen. Je gaat ermee akkoord meldingen te ontvangen voor toekomstige afschrijvingen tot twee dagen voordat deze plaatsvinden. ​​Setting up a payment method creates the accepted mandate. As the customer has implicitly signed the mandate when accepting these terms, you must communicate these terms in your form or through email. | Field | Value | | ------- | ----------------------------------------------- | | `name` | The full name (first and last) of the customer. | | `email` | The customer’s email. | ```html
By providing your payment information and confirming this payment, you authorise (A) Rocketship Inc and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited. Your rights are explained in a statement that you can obtain from your bank. You agree to receive notifications for future debits up to 2 days before they occur.
``` #### React #### npm Instal [React Stripe.js](https://www.npmjs.com/package/@stripe/react-stripe-js) dan [loader Stripe.js](https://www.npmjs.com/package/@stripe/stripe-js) dari register publik npm. ```bash npm install --save @stripe/react-stripe-js @stripe/stripe-js ``` #### umd Kami juga menyediakan build UMD untuk situs yang tidak menggunakan npm atau modul. Sertakan skrip Stripe.js, yang mengekspor fungsi `Stripe` global, dan build UMD React Stripe.js, yang mengekspor objek `ReactStripe` global. Selalu muat skrip Stripe.js secara langsung dari **js.stripe.com** agar tetap mematuhi PCI. Jangan menyertakan skrip dalam paket atau meng-host sendiri salinannya. ```html ``` > [Demo di CodeSandbox](https://codesandbox.io/s/react-stripe-official-q1loc?fontsize=14&hidenavigation=1&theme=dark) memungkinkan Anda mencoba React Stripe.js tanpa perlu membuat proyek baru. ### Tambahkan Stripe.js dan Elements ke halaman Anda Untuk menggunakan komponen Element, bungkus komponen halaman checkout Anda di [penyedia Elements](https://docs.stripe.com/sdks/stripejs-react.md#elements-provider). Panggil `loadStripe` dengan kunci yang dapat dipublikasikan dan teruskan `Promise` yang dikembalikan ke penyedia `Elements`. ```jsx import React from 'react'; import ReactDOM from 'react-dom'; import {Elements} from '@stripe/react-stripe-js'; import {loadStripe} from '@stripe/stripe-js'; import CheckoutForm from './CheckoutForm'; // Make sure to call `loadStripe` outside of a component's render to avoid // recreating the `Stripe` object on every render. const stripePromise = loadStripe('<>'); function App() { return ( ); }; ReactDOM.render(, document.getElementById('root')); ``` ## Submit the payment method details to Stripe [Sisi klien] Rather than sending the entire SetupIntent object to the client, use its [client secret](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-client_secret). This is different from your API keys that authenticate Stripe API requests. The client secret should be handled carefully because it can complete the setup. Don’t log it, embed it in URLs, or expose it to anyone but the customer. #### HTML+JS Use [stripe.confirmBancontactSetup](https://docs.stripe.com/js/setup_intents/confirm_bancontact_setup) to complete the setup when the customer submits the form. Include the customer’s name and email address in `billing_details`. The SetupIntent’s `status` is `succeeded` if the setup is successful. If the setup isn’t successful, inspect the returned `error` to determine the cause. As the SetupIntent was created with a [Customer](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-customer), the PaymentMethod is attached to the Customer. This enables you to use the payment method to collect future payments without prompting the customer for payment method details again. ```javascript var stripe = Stripe('<>'); var accountholderName = document.getElementById('name'); var accountholderEmail = document.getElementById('email'); // Redirects away from the client const {error} = await stripe.confirmBancontactSetup( '{{PAYMENT_INTENT_CLIENT_SECRET}}', { payment_method: { billing_details: { name: accountholderName.value, email: accountholderEmail.value, }, }, return_url: 'https://example.com/checkout/complete', } ); if (error) { // Inform the customer that there was an error. } ``` The `return_url` should correspond to a page on your website that displays the result of the setup. You can determine what to display by verifying the status of the `SetupIntent`. When Stripe redirects the customer to the `return_url`, the following URL query parameters are provided to verify status. You can also append your own query parameters to the `return_url`. They persist throughout the redirect process. | Parameter | Keterangan | | ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | | `setup_intent` | The unique identifier for the `SetupIntent` | | `setup_intent_client_secret` | The [client secret](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-client_secret) of the `SetupIntent` object | #### React ​​To process SEPA Direct Debit payments, you must collect a mandate agreement from your customer. Display the following standard authorization text for your customer to implicitly sign the mandate. Replace *Rocket Rides* with your company name. #### de Durch Angabe Ihrer Zahlungsinformationen und der Bestätigung der vorliegenden Zahlung ermächtigen Sie (A) und Stripe, unseren Zahlungsdienstleister, Ihrem Kreditinstitut Anweisungen zur Belastung Ihres Kontos zu erteilen, und (B) Ihr Kreditinstitut, Ihr Konto gemäß diesen Anweisungen zu belasten. Im Rahmen Ihrer Rechte haben Sie, entsprechend den Vertragsbedingungen mit Ihrem Kreditinstitut, Anspruch auf eine Rückerstattung von Ihrem Kreditinstitut. Eine Rückerstattung muss innerhalb von 8 Wochen ab dem Tag, an dem Ihr Konto belastet wurde, geltend gemacht werden. Eine Erläuterung Ihrer Rechte können Sie von Ihrem Kreditinstitut anfordern. Sie erklären sich einverstanden, Benachrichtigungen über künftige Belastungen bis spätestens 2 Tage vor dem Buchungsdatum zu erhalten. #### id By providing your payment information and confirming this payment, you authorise (A) and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. As part of your rights, you’re entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited. Your rights are explained in a statement that you can obtain from your bank. You agree to receive notifications for future debits up to 2 days before they occur. #### es Al proporcionar sus datos de pago y confirmar este pago, usted autoriza a (A) y Stripe, nuestro proveedor de servicios de pago, a enviar instrucciones a su banco para realizar un débito en su cuenta y (B) a su banco a realizar un cargo en su cuenta de conformidad con dichas instrucciones. Como parte de sus derechos, usted tiene derecho a un reembolso de su banco conforme a los términos y condiciones del contrato con su banco. El reembolso debe reclamarse en un plazo de 8 semanas a partir de la fecha en la que se haya efectuado el cargo en su cuenta. Sus derechos se explican en un extracto que puede obtener en su banco. Usted acepta recibir notificaciones de futuros débitos hasta 2 días antes de que se produzcan. #### fi Antamalla maksutiedot ja vahvistamalla tämän maksun, valtuutat (A) ja Stripen, maksupalveluntarjoajamme, lähettämään ohjeet pankille tilisi veloittamiseksi ja (B) pankkisi veloittamaan tiliäsi kyseisten ohjeiden mukaisesti. Oikeuksiesi mukaisesti olet oikeutettu maksun palautukseen pankilta, kuten heidän kanssaan tekemässäsi sopimuksessa ja sen ehdoissa on kuvattu. Maksun palautus on lunastettava 8 viikon aikana alkaen päivästä, jolloin tiliäsi veloitettiin. Oikeutesi on selitetty pankilta saatavissa olevassa lausunnossa. Hyväksyt vastaanottamaan ilmoituksia tulevista veloituksista jopa kaksi päivää ennen niiden tapahtumista. #### fr En fournissant vos informations de paiement et en confirmant ce paiement, vous autorisez (A) et Stripe, notre prestataire de services de paiement et/ou PPRO, son prestataire de services local, à envoyer des instructions à votre banque pour débiter votre compte et (B) votre banque à débiter votre compte conformément à ces instructions. Vous avez, entre autres, le droit de vous faire rembourser par votre banque selon les modalités et conditions du contrat conclu avec votre banque. La demande de remboursement doit être soumise dans un délai de 8 semaines à compter de la date à laquelle votre compte a été débité. Vos droits sont expliqués dans une déclaration disponible auprès de votre banque. Vous acceptez de recevoir des notifications des débits à venir dans les 2 jours précédant leur réalisation. #### it Fornendo i dati di pagamento e confermando il pagamento, l’utente autorizza (A) e Stripe, il fornitore del servizio di pagamento locale, a inviare alla sua banca le istruzioni per eseguire addebiti sul suo conto e (B) la sua banca a effettuare addebiti conformemente a tali istruzioni. L’utente, fra le altre cose, ha diritto a un rimborso dalla banca, in base a termini e condizioni dell’accordo sottoscritto con l’istituto. Il rimborso va richiesto entro otto settimane dalla data dell’addebito sul conto. I diritti dell’utente sono illustrati in una comunicazione riepilogativa che è possibile richiedere alla banca. L’utente accetta di ricevere notifiche per i futuri addebiti fino a due giorni prima che vengano effettuati. #### nl Door je betaalgegevens door te geven en deze betaling te bevestigen, geef je (A) en Stripe, onze betaaldienst, toestemming om instructies naar je bank te verzenden om het bedrag van je rekening af te schrijven, en (B) geef je je bank toestemming om het bedrag van je rekening af te schrijven conform deze aanwijzingen. Als onderdeel van je rechten kom je in aanmerking voor een terugbetaling van je bank conform de voorwaarden van je overeenkomst met de bank. Je moet terugbetalingen binnen acht weken claimen vanaf de datum waarop het bedrag is afgeschreven van je rekening. Je rechten worden toegelicht in een overzicht dat je bij de bank kunt opvragen. Je gaat ermee akkoord meldingen te ontvangen voor toekomstige afschrijvingen tot twee dagen voordat deze plaatsvinden. ​​Setting up a payment method or confirming a PaymentIntent creates the accepted mandate. As the customer has implicitly signed the mandate, you must communicate these terms in your form or through email. Use [stripe.confirmBancontactSetup](https://docs.stripe.com/js/setup_intents/confirm_bancontact_setup) to handle the redirect away from your page and to complete the setup. Add a [return_url](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-return_url) to this function to indicate where Stripe should redirect the user after they complete the setup on their bank’s website or mobile application. To call `stripe.confirmBancontactSetup` from your setup form component, use the [useStripe](https://docs.stripe.com/sdks/stripejs-react.md#usestripe-hook) and [useElements](https://docs.stripe.com/sdks/stripejs-react.md#useelements-hook) hooks. If you prefer traditional class components over hooks, you can instead use an [ElementsConsumer](https://docs.stripe.com/sdks/stripejs-react.md#elements-consumer). #### Hook ```jsx import React from 'react'; import {useStripe, useElements} from '@stripe/react-stripe-js'; export default function CheckoutForm() { const stripe = useStripe(); const elements = useElements(); const handleSubmit = async (event) => { // We don't want to let default form submission happen here, // which would refresh the page. event.preventDefault(); if (!stripe || !elements) { // Stripe.js hasn't yet loaded. // Make sure to disable form submission until Stripe.js has loaded. return; } // For brevity, this example is using uncontrolled components for // the accountholder's name. In a real world app you will // probably want to use controlled components. // https://reactjs.org/docs/uncontrolled-components.html // https://reactjs.org/docs/forms.html#controlled-components const accountholderName = event.target['accountholder-name']; const accountholderEmail = event.target['accountholder-email']; const {error} = await stripe.confirmBancontactSetup('{CLIENT_SECRET}', { payment_method: { billing_details: { name: accountholderName.value, email: accountholderEmail.value, }, }, return_url: 'https://example.com/checkout/complete', }); if (error) { // Show error to your customer. console.log(error.message); } // Otherwise the customer will be redirected away from your // page to complete the setup with their bank. }; return (
{/* Display mandate acceptance text. */}
By providing your payment information and confirming this payment, you authorise (A) Rocket Rides and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited. Your rights are explained in a statement that you can obtain from your bank. You agree to receive notifications for future debits up to 2 days before they occur.
); } ``` #### Komponen Kelas ```jsx import React from 'react'; import {ElementsConsumer} from '@stripe/react-stripe-js'; class CheckoutForm extends React.Component { handleSubmit = async (event) => { // We don't want to let default form submission happen here, // which would refresh the page. event.preventDefault(); const {stripe, elements} = this.props if (!stripe || !elements) { // Stripe.js hasn't yet loaded. // Make sure to disable form submission until Stripe.js has loaded. return; } // For brevity, this example is using uncontrolled components for // the accountholder's name. In a real world app you will // probably want to use controlled components. // https://reactjs.org/docs/uncontrolled-components.html // https://reactjs.org/docs/forms.html#controlled-components const accountholderName = event.target['accountholder-name']; const accountholderEmail = event.target['accountholder-email']; const {error} = await stripe.confirmBancontactSetup('{CLIENT_SECRET}', { payment_method: { billing_details: { name: accountholderName.value, email: accountholderEmail.value, }, }, return_url: 'https://example.com/checkout/complete', }); if (error) { // Show error to your customer. console.log(error.message); } // Otherwise the customer will be redirected away from your // page to complete the setup with their bank. }; render() { const {stripe} = this.props; return (
{/* Display mandate acceptance text. */}
By providing your payment information and confirming this payment, you authorise (A) Rocketship Inc and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. As part of your rights, you are entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited. Your rights are explained in a statement that you can obtain from your bank. You agree to receive notifications for future debits up to 2 days before they occur.
); } } export default function InjectedCheckoutForm() { return ( {({stripe, elements}) => ( )} ); } ``` ## Charge the SEPA Direct Debit PaymentMethod later [Sisi server] When you need to charge your customer again, create a new PaymentIntent. Find the ID of the SEPA Direct Debit payment method by [retrieving](https://docs.stripe.com/api/setup_intents/retrieve.md) the SetupIntent and [expanding](https://docs.stripe.com/api/expanding_objects.md) the `latest_attempt` field where you’ll find the `generated_sepa_debit` ID inside of `payment_method_details`. ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUP_INTENT_ID}} \ -u "<>:" \ -d "expand[]=latest_attempt" ``` Create a `PaymentIntent` with the SEPA Direct Debit ID and the customer’s ID. #### Accounts v2 ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "payment_method_types[]=sepa_debit" \ -d amount=1099 \ -d currency=eur \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d payment_method={{SEPA_DEBIT_PAYMENT_METHOD_ID}} \ -d confirm=true ``` #### Customers v1 ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "payment_method_types[]=sepa_debit" \ -d amount=1099 \ -d currency=eur \ -d "customer={{CUSTOMER_ID}}" \ -d payment_method={{SEPA_DEBIT_PAYMENT_METHOD_ID}} \ -d confirm=true ``` ## Coba integrasi Anda #### Email Atur `payment_method.billing_details.email` ke salah satu nilai berikut untuk menguji transisi status `PaymentIntent`. Anda dapat menyertakan teks kustom Anda sendiri di awal alamat email yang diikuti dengan garis bawah. Misalnya, `test_1_generatedSepaDebitIntentsFail@example.com` menghasilkan PaymentMethod Debit Langsung SEPA yang selalu gagal saat digunakan dengan `PaymentIntent`. | Alamat Email | Keterangan | | ------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- | | `generatedSepaDebitIntentsSucceed@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded`. | | `generatedSepaDebitIntentsSucceedDelayed@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded` setelah setidaknya tiga menit. | | `generatedSepaDebitIntentsFail@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method`. | | `generatedSepaDebitIntentsFailDelayed@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method` setelah setidaknya tiga menit. | | `generatedSepaDebitIntentsSucceedDisputed@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded`, tetapi sengketa dibuat segera. | | `generatedSepaDebitIntentsFailsDueToInsufficientFunds@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method` dengan kode kegagalan `insufficient_funds`. | #### PaymentMethod Gunakan PaymentMethods ini untuk menguji transisi status `PaymentIntent`. Token ini berguna untuk pengujian otomatis guna segera melampirkan PaymentMethod ke SetupIntent di server. | Metode Pembayaran | Keterangan | | -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | | `pm_bancontact_generatedSepaDebitIntentsSucceed` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded`. | | `pm_bancontact_generatedSepaDebitIntentsSucceedDelayed` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded` setelah setidaknya tiga menit. | | `pm_bancontact_generatedSepaDebitIntentsFail` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method`. | | `pm_bancontact_generatedSepaDebitIntentsFailDelayed` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method` setelah setidaknya tiga menit. | | `pm_bancontact_generatedSepaDebitIntentsSucceedDisputed` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded`, tetapi sengketa dibuat segera. | | `pm_bancontact_generatedSepaDebitIntentsFailsDueToInsufficientFunds` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method` dengan kode kegagalan `insufficient_funds`. | ## Optional: Handle post-setup events Stripe sends a [setup_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.succeeded) event when the SetupIntent completes. Use the Dashboard, a custom *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests), or a partner solution to receive these events and run actions, like saving the generated SEPA Direct Debit *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) to your database or charging your customer after a trial period. Listen for these events rather than waiting on a callback from the client. On the client, the customer could close the browser window or quit the app before the callback executes, and malicious clients could manipulate the response. Setting up your integration to listen for asynchronous events also helps you accept more payment methods in the future. Learn about the [differences between all supported payment methods](https://stripe.com/payments/payment-methods-guide). ### Terima kejadian dan jalankan tindakan bisnis #### Secara manual Gunakan Dashboard Stripe untuk melihat semua pembayaran Stripe Anda, mengirim resi email, menangani payout, atau mencoba ulang pembayaran yang gagal. - [Lihat pembayaran percobaan Anda di Dashboard](https://dashboard.stripe.com/test/payments) #### Kode custom Bangun handler webhook untuk mendengarkan kejadian dan bangun alur pembayaran asinkron custom. Coba dan debug integrasi webhook Anda secara lokal dengan Stripe CLI. - [Build a custom webhook](https://docs.stripe.com/webhooks/handling-payment-events.md#build-your-own-webhook) #### Aplikasi siap-rakit Handle common business events, like [automation](https://stripe.partners/?f_category=automation) or [marketing and sales](https://stripe.partners/?f_category=marketing-and-sales), by integrating a partner application. # iOS > This is a iOS for when payment-ui is mobile and platform is ios. View the full page at https://docs.stripe.com/payments/bancontact/set-up-payment?payment-ui=mobile&platform=ios. Setting up future SEPA Direct Debit payments using Bancontact in your app consists of creating a [SetupIntent](https://docs.stripe.com/api/setup_intents.md) to track the process, collecting mandate acknowledgement, and redirecting your customer to Bancontact. Stripe uses the SetupIntent to track and handle all the states of the setup until the setup completes. ## Siapkan Stripe [Sisi server] [Sisi client] Pertama, Anda membutuhkan akun Stripe. [Daftar sekarang](https://dashboard.stripe.com/register). ### Sisi server Integrasi ini memerlukan endpoint di server Anda yang berbicara dengan Stripe API. Gunakan pustaka resmi untuk akses ke Stripe API dari server Anda: #### Ruby ```bash # Available as a gem sudo gem install stripe ``` ```ruby # If you use bundler, you can add this line to your Gemfile gem 'stripe' ``` ### Sisi client [Stripe iOS SDK](https://github.com/stripe/stripe-ios) adalah sumber terbuka, yang [didokumentasikan lengkap](https://stripe.dev/stripe-ios/index.html), dan kompatibel dengan aplikasi yang mendukung iOS 13 ke atas. #### Swift Package Manager Untuk menginstal SDK, ikuti langkah-langkah ini: 1. Di Xcode, pilih **File** > **Tambahkan Dependensi Paket…** dan masukkan `https://github.com/stripe/stripe-ios-spm` sebagai URL repositori. 1. Pilih nomor versi terbaru dari [halaman rilis](https://github.com/stripe/stripe-ios/releases) kami. 1. Tambahkan produk **StripePaymentsUI** ke [target aplikasi Anda](https://developer.apple.com/documentation/swift_packages/adding_package_dependencies_to_your_app). #### CocoaPods 1. Jika Anda belum melakukannya, instal versi terbaru [CocoaPods](https://guides.cocoapods.org/using/getting-started.html). 1. Jika Anda tidak memiliki [Podfile](https://guides.cocoapods.org/syntax/podfile.html), jalankan perintah berikut untuk membuatnya: ```bash pod init ``` 1. Tambahkan baris ini ke `Podfile` Anda: ```podfile pod 'StripePaymentsUI' ``` 1. Jalankan perintah berikut: ```bash pod install ``` 1. Jangan lupa menggunakan file `.xcworkspace` untuk membuka proyek Anda di Xcode, sebagai ganti file `.xcodeproj`, mulai sekarang. 1. Di masa mendatang, untuk memperbarui ke versi terbaru SDK, jalankan: ```bash pod update StripePaymentsUI ``` #### Carthage 1. Jika Anda belum melakukannya, instal versi terbaru [Carthage](https://github.com/Carthage/Carthage#installing-carthage). 1. Tambahkan baris ini ke `Cartfile` Anda: ```cartfile github "stripe/stripe-ios" ``` 1. Ikuti [instruksi instalasi Carthage](https://github.com/Carthage/Carthage#if-youre-building-for-ios-tvos-or-watchos). Pastikan untuk menyematkan semua framework yang diwajibkan yang tercantum [di sini](https://github.com/stripe/stripe-ios/tree/master/StripePaymentsUI/README.md#manual-linking). 1. Di masa mendatang, untuk memperbarui ke versi terbaru SDK, jalankan perintah berikut: ```bash carthage update stripe-ios --platform ios ``` #### Kerangka Kerja Manual 1. Masuklah ke [halaman rilis GitHub](https://github.com/stripe/stripe-ios/releases/latest) kami lalu unduh dan unzip **Stripe.xcframework.zip**. 1. Seret **StripePaymentsUI.xcframework** ke bagian **Embedded Binaries** pengaturan **General** di proyek Xcode Anda. Pastikan memilih **Copy items if needed**. 1. Ulangi langkah 2 untuk semua framework yang diwajibkan yang tercantum [di sini](https://github.com/stripe/stripe-ios/tree/master/StripePaymentsUI/README.md#manual-linking). 1. Di masa mendatang, untuk memperbarui ke versi terbaru SDK kami, ulangi langkah 1–3. > Untuk detail mengenai rilis SDK terbaru dan versi sebelumnya, lihat halaman [Rilis](https://github.com/stripe/stripe-ios/releases) di GitHub. Untuk menerima notifikasi bila rilis baru diterbitkan, [lihat rilis](https://help.github.com/en/articles/watching-and-unwatching-releases-for-a-repository#watching-releases-for-a-repository) untuk repositori. Konfigurasikan SDK dengan [kunci yang dapat dipublikasikan](https://dashboard.stripe.com/test/apikeys) saat aplikasi dimulai. Hal ini memungkinkan aplikasi Anda membuat permintaan ke Stripe API. #### Swift ```swift import UIKitimportStripePaymentsUI @main class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {StripeAPI.defaultPublishableKey = "<>" // do any other necessary launch configuration return true } } ``` > Gunakan [kunci percobaan](https://docs.stripe.com/keys.md#obtain-api-keys) Anda saat mencoba serta mengembangkan, dan kunci [mode live](https://docs.stripe.com/keys.md#test-live-modes) bila Anda memublikasikan aplikasi. ## Create or retrieve a customer [Sisi server] To set up future SEPA Direct Debit payments using Bancontact, you must attach the SEPA Direct Debit payment method to an object that represents your customer. > #### Menggunakan API Akun v2 untuk mewakili pelanggan > > API Akun v2 umumnya tersedia untuk pengguna Connect, dan dalam pratinjau publik untuk pengguna Stripe lainnya. Jika Anda adalah bagian dari pratinjau Akun v2, Anda perlu menentukan [Tentukan versi pratinjau](https://docs.stripe.com/api-v2-overview.md#sdk-and-api-versioning) dalam kode Anda. > > Untuk meminta akses ke pratinjau Akun v2, > > Untuk sebagian besar contoh penggunaan, sebaiknya Anda [memodelkan pelanggan Anda sebagai objek Akun yang dikonfigurasi pelanggan](https://docs.stripe.com/accounts-v2/use-accounts-as-customers.md) alih-alih menggunakan objek [Pelanggan](https://docs.stripe.com/api/customers.md). Buat [Akun](https://docs.stripe.com/api/v2/core/accounts/create.md#v2_create_accounts-configuration-customer) atau [Pelanggan](https://docs.stripe.com/api/customers/create.md) yang dikonfigurasi pelanggan saat pelanggan Anda membuat akun dengan bisnis Anda, atau saat menyimpan metode pembayaran. Kaitkan ID objek dengan representasi internal pelanggan Anda sendiri. Buat pelanggan baru atau ambil pelanggan yang sudah ada untuk dikaitkan dengan pembayaran ini. #### Akun v2 ```curl curl -X POST https://api.stripe.com/v2/core/accounts \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-04-22.preview" \ --json '{ "contact_email": "jenny.rosen@example.com", "display_name": "Jenny Rosen", "configuration": { "customer": {} }, "include": [ "configuration.customer" ] }' ``` #### Pelanggan v1 ```curl curl https://api.stripe.com/v1/customers \ -u "<>:" \ -d "name=Jenny Rosen" \ --data-urlencode "email=jenny.rosen@example.com" ``` ## Buat SetupIntent [Sisi server] A [SetupIntent](https://docs.stripe.com/api/setup_intents.md) is an object that represents your intent to set up a customer’s payment method for future payments and tracks the steps of this setup process. For Bancontact, this includes collecting a [SEPA Direct Debit mandate](https://www.europeanpaymentscouncil.eu/what-we-do/sepa-direct-debit/sdd-mandate) from the customer and tracking its validity. Create a `SetupIntent` with the customer’s ID and add `bancontact` to the [payment_method_types](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_types) array. #### Accounts v2 ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "payment_method_types[]=bancontact" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" ``` #### Customers v1 ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "payment_method_types[]=bancontact" \ -d customer={{CUSTOMER_ID}} ``` The `SetupIntent` includes a *client secret* (The client secret is a unique key returned from Stripe as part of a SetupIntent. This key lets the client access important fields from the SetupIntent (for example, status)), which is used on the client side to securely complete the setup process without needing the `SetupIntent` object. ## Collect payment method details and mandate acknowledgement [Sisi klien] In your app, collect your customer’s full name and email address. Create an [STPPaymentMethodParams](https://stripe.dev/stripe-ios/stripe-payments/Classes/STPPaymentMethodParams.html) object with these details. #### Swift ```swift let bancontactParams = STPPaymentMethodBancontactParams() let billingDetails = STPPaymentMethodBillingDetails() billingDetails.name = "Jane Doe" billingDetails.email = "jane.doe@example.com" let paymentMethodParams = STPPaymentMethodParams(bancontact: bancontactParams, billingDetails: billingDetails, metadata: nil) ``` ​​To process SEPA Direct Debit payments, you must collect a mandate agreement from your customer. Display the following standard authorization text for your customer to implicitly sign the mandate. Replace *Rocket Rides* with your company name. #### de Durch Angabe Ihrer Zahlungsinformationen und der Bestätigung der vorliegenden Zahlung ermächtigen Sie (A) und Stripe, unseren Zahlungsdienstleister, Ihrem Kreditinstitut Anweisungen zur Belastung Ihres Kontos zu erteilen, und (B) Ihr Kreditinstitut, Ihr Konto gemäß diesen Anweisungen zu belasten. Im Rahmen Ihrer Rechte haben Sie, entsprechend den Vertragsbedingungen mit Ihrem Kreditinstitut, Anspruch auf eine Rückerstattung von Ihrem Kreditinstitut. Eine Rückerstattung muss innerhalb von 8 Wochen ab dem Tag, an dem Ihr Konto belastet wurde, geltend gemacht werden. Eine Erläuterung Ihrer Rechte können Sie von Ihrem Kreditinstitut anfordern. Sie erklären sich einverstanden, Benachrichtigungen über künftige Belastungen bis spätestens 2 Tage vor dem Buchungsdatum zu erhalten. #### id By providing your payment information and confirming this payment, you authorise (A) and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. As part of your rights, you’re entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited. Your rights are explained in a statement that you can obtain from your bank. You agree to receive notifications for future debits up to 2 days before they occur. #### es Al proporcionar sus datos de pago y confirmar este pago, usted autoriza a (A) y Stripe, nuestro proveedor de servicios de pago, a enviar instrucciones a su banco para realizar un débito en su cuenta y (B) a su banco a realizar un cargo en su cuenta de conformidad con dichas instrucciones. Como parte de sus derechos, usted tiene derecho a un reembolso de su banco conforme a los términos y condiciones del contrato con su banco. El reembolso debe reclamarse en un plazo de 8 semanas a partir de la fecha en la que se haya efectuado el cargo en su cuenta. Sus derechos se explican en un extracto que puede obtener en su banco. Usted acepta recibir notificaciones de futuros débitos hasta 2 días antes de que se produzcan. #### fi Antamalla maksutiedot ja vahvistamalla tämän maksun, valtuutat (A) ja Stripen, maksupalveluntarjoajamme, lähettämään ohjeet pankille tilisi veloittamiseksi ja (B) pankkisi veloittamaan tiliäsi kyseisten ohjeiden mukaisesti. Oikeuksiesi mukaisesti olet oikeutettu maksun palautukseen pankilta, kuten heidän kanssaan tekemässäsi sopimuksessa ja sen ehdoissa on kuvattu. Maksun palautus on lunastettava 8 viikon aikana alkaen päivästä, jolloin tiliäsi veloitettiin. Oikeutesi on selitetty pankilta saatavissa olevassa lausunnossa. Hyväksyt vastaanottamaan ilmoituksia tulevista veloituksista jopa kaksi päivää ennen niiden tapahtumista. #### fr En fournissant vos informations de paiement et en confirmant ce paiement, vous autorisez (A) et Stripe, notre prestataire de services de paiement et/ou PPRO, son prestataire de services local, à envoyer des instructions à votre banque pour débiter votre compte et (B) votre banque à débiter votre compte conformément à ces instructions. Vous avez, entre autres, le droit de vous faire rembourser par votre banque selon les modalités et conditions du contrat conclu avec votre banque. La demande de remboursement doit être soumise dans un délai de 8 semaines à compter de la date à laquelle votre compte a été débité. Vos droits sont expliqués dans une déclaration disponible auprès de votre banque. Vous acceptez de recevoir des notifications des débits à venir dans les 2 jours précédant leur réalisation. #### it Fornendo i dati di pagamento e confermando il pagamento, l’utente autorizza (A) e Stripe, il fornitore del servizio di pagamento locale, a inviare alla sua banca le istruzioni per eseguire addebiti sul suo conto e (B) la sua banca a effettuare addebiti conformemente a tali istruzioni. L’utente, fra le altre cose, ha diritto a un rimborso dalla banca, in base a termini e condizioni dell’accordo sottoscritto con l’istituto. Il rimborso va richiesto entro otto settimane dalla data dell’addebito sul conto. I diritti dell’utente sono illustrati in una comunicazione riepilogativa che è possibile richiedere alla banca. L’utente accetta di ricevere notifiche per i futuri addebiti fino a due giorni prima che vengano effettuati. #### nl Door je betaalgegevens door te geven en deze betaling te bevestigen, geef je (A) en Stripe, onze betaaldienst, toestemming om instructies naar je bank te verzenden om het bedrag van je rekening af te schrijven, en (B) geef je je bank toestemming om het bedrag van je rekening af te schrijven conform deze aanwijzingen. Als onderdeel van je rechten kom je in aanmerking voor een terugbetaling van je bank conform de voorwaarden van je overeenkomst met de bank. Je moet terugbetalingen binnen acht weken claimen vanaf de datum waarop het bedrag is afgeschreven van je rekening. Je rechten worden toegelicht in een overzicht dat je bij de bank kunt opvragen. Je gaat ermee akkoord meldingen te ontvangen voor toekomstige afschrijvingen tot twee dagen voordat deze plaatsvinden. ​​Setting up a payment method creates the accepted mandate. As the customer has implicitly signed the mandate when accepting these terms, you must communicate these terms in your form or through email. ## Submit the payment method details to Stripe [Sisi klien] Retrieve the client secret from the SetupIntent you created and call [STPPaymentHandler confirmSetupIntent](https://stripe.dev/stripe-ios/stripe-payments/Classes/STPPaymentHandler.html#/c:objc\(cs\)STPPaymentHandler\(im\)confirmSetupIntent:withAuthenticationContext:completion:) to present a webview where the customer can complete the payment on their bank’s website or app. Handle the payment result in the completion block. #### Swift ```swift let setupIntentParams = STPSetupIntentConfirmParams(clientSecret: paymentIntentClientSecret) setupIntentParams.paymentMethodParams = paymentMethodParams STPPaymentHandler.shared().confirmSetupIntent(withParams: setupIntentParams, authenticationContext: self) { (handlerStatus, setupIntent, error) in switch handlerStatus { case .succeeded: // Setup succeeded case .canceled: // Setup was canceled case .failed: // Setup failed @unknown default: fatalError() } } ``` ## Charge the SEPA Direct Debit PaymentMethod later When you need to charge your customer again, create a new PaymentIntent. Find the ID of the SEPA Direct Debit payment method by [retrieving](https://docs.stripe.com/api/setup_intents/retrieve.md) the SetupIntent and [expanding](https://docs.stripe.com/api/expanding_objects.md) the `latest_attempt` field where you’ll find the `generated_sepa_debit` ID inside of `payment_method_details`. ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUP_INTENT_ID}} \ -u "<>:" \ -d "expand[]=latest_attempt" ``` Create a `PaymentIntent` with the SEPA Direct Debit ID and the customer’s ID. #### Accounts v2 ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "payment_method_types[]=sepa_debit" \ -d amount=1099 \ -d currency=eur \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d payment_method={{SEPA_DEBIT_PAYMENT_METHOD_ID}} \ -d confirm=true ``` #### Customers v1 ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "payment_method_types[]=sepa_debit" \ -d amount=1099 \ -d currency=eur \ -d "customer={{CUSTOMER_ID}}" \ -d payment_method={{SEPA_DEBIT_PAYMENT_METHOD_ID}} \ -d confirm=true ``` ## Coba integrasi Anda #### Email Atur `payment_method.billing_details.email` ke salah satu nilai berikut untuk menguji transisi status `PaymentIntent`. Anda dapat menyertakan teks kustom Anda sendiri di awal alamat email yang diikuti dengan garis bawah. Misalnya, `test_1_generatedSepaDebitIntentsFail@example.com` menghasilkan PaymentMethod Debit Langsung SEPA yang selalu gagal saat digunakan dengan `PaymentIntent`. | Alamat Email | Keterangan | | ------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- | | `generatedSepaDebitIntentsSucceed@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded`. | | `generatedSepaDebitIntentsSucceedDelayed@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded` setelah setidaknya tiga menit. | | `generatedSepaDebitIntentsFail@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method`. | | `generatedSepaDebitIntentsFailDelayed@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method` setelah setidaknya tiga menit. | | `generatedSepaDebitIntentsSucceedDisputed@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded`, tetapi sengketa dibuat segera. | | `generatedSepaDebitIntentsFailsDueToInsufficientFunds@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method` dengan kode kegagalan `insufficient_funds`. | #### PaymentMethod Gunakan PaymentMethods ini untuk menguji transisi status `PaymentIntent`. Token ini berguna untuk pengujian otomatis guna segera melampirkan PaymentMethod ke SetupIntent di server. | Metode Pembayaran | Keterangan | | -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | | `pm_bancontact_generatedSepaDebitIntentsSucceed` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded`. | | `pm_bancontact_generatedSepaDebitIntentsSucceedDelayed` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded` setelah setidaknya tiga menit. | | `pm_bancontact_generatedSepaDebitIntentsFail` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method`. | | `pm_bancontact_generatedSepaDebitIntentsFailDelayed` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method` setelah setidaknya tiga menit. | | `pm_bancontact_generatedSepaDebitIntentsSucceedDisputed` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded`, tetapi sengketa dibuat segera. | | `pm_bancontact_generatedSepaDebitIntentsFailsDueToInsufficientFunds` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method` dengan kode kegagalan `insufficient_funds`. | ## Optional: Tangani kejadian pascapembayaran Stripe mengirim kejadian [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded) ketika selesai pembayaran. Gunakan Dashboard, *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) custom, atau solusi mitra untuk menerima kejadian ini dan menjalankan tindakan, seperti mengirim email konfirmasi pesanan kepada pelanggan Anda, mencatat penjualan di database, atau memulai alur kerja pengiriman. Mendengarkan kejadian ini daripada menunggu callback dari client. Di client, pelanggan dapat menutup jendela browser atau keluar dari aplikasi sebelum callback mengeksekusi, dan client jahat dapat memanipulasi respons. Penyiapan integrasi untuk mendengarkan kejadian asinkron juga membantu Anda menerima lebih banyak metode pembayaran di masa mendatang. Pelajari tentang [perbedaan antara semua metode pembayaran yang didukung](https://stripe.com/payments/payment-methods-guide). ### Terima kejadian dan jalankan tindakan bisnis Ada beberapa opsi untuk menerima dan menjalankan tindakan bisnis. #### Secara manual Gunakan Dashboard Stripe untuk melihat semua pembayaran Stripe Anda, mengirim resi email, menangani payout, atau mencoba kembali pembayaran yang gagal. - [Lihat pembayaran percobaan Anda di Dashboard](https://dashboard.stripe.com/test/payments) #### Kode custom Bangun handler webhook untuk mendengarkan kejadian dan buat alur pembayaran asinkron custom. Coba dan debug integrasi webhook Anda secara lokal dengan Stripe CLI. - [Buat webhook kustom](https://docs.stripe.com/webhooks/handling-payment-events.md#build-your-own-webhook) #### Aplikasi siap-rakit Tangani kejadian bisnis umum, seperti [otomatisasi](https://stripe.partners/?f_category=automation) atau [pemasaran dan penjualan](https://stripe.partners/?f_category=marketing-and-sales), dengan mengintegrasikan aplikasi mitra. # Android > This is a Android for when payment-ui is mobile and platform is android. View the full page at https://docs.stripe.com/payments/bancontact/set-up-payment?payment-ui=mobile&platform=android. Setting up future SEPA Direct Debit payments using Bancontact in your app consists of creating a [SetupIntent](https://docs.stripe.com/api/setup_intents.md) to track the process, collecting mandate acknowledgement, and redirecting your customer to Bancontact. Stripe uses the SetupIntent to track and handle all the states of the setup until the setup completes. ## Siapkan Stripe [Sisi server] [Sisi client] Pertama, Anda membutuhkan akun Stripe. [Daftar sekarang](https://dashboard.stripe.com/register). ### Sisi server Integrasi ini memerlukan endpoint di server Anda yang berbicara dengan Stripe API. Gunakan pustaka resmi untuk akses ke Stripe API dari server Anda: #### Ruby ```bash # Available as a gem sudo gem install stripe ``` ```ruby # If you use bundler, you can add this line to your Gemfile gem 'stripe' ``` ### Sisi client [Stripe Android SDK](https://github.com/stripe/stripe-android) adalah sumber terbuka dan [didokumentasikan lengkap](https://stripe.dev/stripe-android/). Untuk menginstal SDK, tambahkan `stripe-android``ke blok`dependencies` file [app/build.gradle](https://developer.android.com/studio/build/dependencies) Anda: #### Kotlin ```kotlin plugins { id("com.android.application") } android { ... } dependencies { // ... // Stripe Android SDK implementation("com.stripe:stripe-android:23.9.0") // Include the financial connections SDK to support US bank account as a payment method implementation("com.stripe:financial-connections:23.9.0") } ``` > Untuk detail mengenai rilis SDK terbaru dan versi sebelumnya, lihat halaman [Rilis](https://github.com/stripe/stripe-android/releases) di GitHub. Untuk menerima notifikasi bila rilis baru diterbitkan, [lihat rilis untuk repositori](https://docs.github.com/en/github/managing-subscriptions-and-notifications-on-github/configuring-notifications#configuring-your-watch-settings-for-an-individual-repository). Konfigurasikan SDK dengan [kunci yang dapat dipublikasikan](https://dashboard.stripe.com/apikeys) Stripe agar dapat membuat permintaan ke API Stripe, seperti di subkelas `Application` Anda: #### Kotlin ```kotlin import com.stripe.android.PaymentConfiguration class MyApp : Application() { override fun onCreate() { super.onCreate() PaymentConfiguration.init( applicationContext, "<>" ) } } ``` > Gunakan [kunci percobaan](https://docs.stripe.com/keys.md#obtain-api-keys) Anda saat mencoba serta mengembangkan, dan kunci [mode live](https://docs.stripe.com/keys.md#test-live-modes) bila Anda memublikasikan aplikasi. Sampel Stripe juga menggunakan [OkHttp](https://github.com/square/okhttp) dan [GSON](https://github.com/google/gson) untuk membuat permintaan HTTP ke server. ## Create or retrieve a customer [Sisi server] To set up future SEPA Direct Debit payments using Bancontact, you must attach the SEPA Direct Debit payment method to an object that represents your customer. > #### Menggunakan API Akun v2 untuk mewakili pelanggan > > API Akun v2 umumnya tersedia untuk pengguna Connect, dan dalam pratinjau publik untuk pengguna Stripe lainnya. Jika Anda adalah bagian dari pratinjau Akun v2, Anda perlu menentukan [Tentukan versi pratinjau](https://docs.stripe.com/api-v2-overview.md#sdk-and-api-versioning) dalam kode Anda. > > Untuk meminta akses ke pratinjau Akun v2, > > Untuk sebagian besar contoh penggunaan, sebaiknya Anda [memodelkan pelanggan Anda sebagai objek Akun yang dikonfigurasi pelanggan](https://docs.stripe.com/accounts-v2/use-accounts-as-customers.md) alih-alih menggunakan objek [Pelanggan](https://docs.stripe.com/api/customers.md). Buat [Akun](https://docs.stripe.com/api/v2/core/accounts/create.md#v2_create_accounts-configuration-customer) atau [Pelanggan](https://docs.stripe.com/api/customers/create.md) yang dikonfigurasi pelanggan saat pelanggan Anda membuat akun dengan bisnis Anda, atau saat menyimpan metode pembayaran. Kaitkan ID objek dengan representasi internal pelanggan Anda sendiri. Buat pelanggan baru atau ambil pelanggan yang sudah ada untuk dikaitkan dengan pembayaran ini. #### Akun v2 ```curl curl -X POST https://api.stripe.com/v2/core/accounts \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-04-22.preview" \ --json '{ "contact_email": "jenny.rosen@example.com", "display_name": "Jenny Rosen", "configuration": { "customer": {} }, "include": [ "configuration.customer" ] }' ``` #### Pelanggan v1 ```curl curl https://api.stripe.com/v1/customers \ -u "<>:" \ -d "name=Jenny Rosen" \ --data-urlencode "email=jenny.rosen@example.com" ``` ## Buat SetupIntent [Sisi server] A [SetupIntent](https://docs.stripe.com/api/setup_intents.md) is an object that represents your intent to set up a customer’s payment method for future payments and tracks the steps of this setup process. For Bancontact, this includes collecting a [SEPA Direct Debit mandate](https://www.europeanpaymentscouncil.eu/what-we-do/sepa-direct-debit/sdd-mandate) from the customer and tracking its validity. Create a `SetupIntent` with the customer’s ID and add `bancontact` to the [payment_method_types](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_types) array. #### Accounts v2 ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "payment_method_types[]=bancontact" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" ``` #### Customers v1 ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "payment_method_types[]=bancontact" \ -d customer={{CUSTOMER_ID}} ``` The `SetupIntent` includes a *client secret* (The client secret is a unique key returned from Stripe as part of a SetupIntent. This key lets the client access important fields from the SetupIntent (for example, status)), which is used on the client side to securely complete the setup process without needing the `SetupIntent` object. ## Collect payment method details and mandate acknowledgement [Sisi klien] In your app, collect your customer’s full name and email address. Create a [PaymentMethodCreateParams](https://stripe.dev/stripe-android/payments-core/com.stripe.android.model/-payment-method-create-params/index.html) object with these details. #### Kotlin ```kotlin val billingDetails = PaymentMethod.BillingDetails(name = "Jenny Rosen", email = "jenny.rosen@example.com") val paymentMethodCreateParams = PaymentMethodCreateParams.createBancontact(billingDetails) ``` ​​To process SEPA Direct Debit payments, you must collect a mandate agreement from your customer. Display the following standard authorization text for your customer to implicitly sign the mandate. Replace *Rocket Rides* with your company name. #### de Durch Angabe Ihrer Zahlungsinformationen und der Bestätigung der vorliegenden Zahlung ermächtigen Sie (A) und Stripe, unseren Zahlungsdienstleister, Ihrem Kreditinstitut Anweisungen zur Belastung Ihres Kontos zu erteilen, und (B) Ihr Kreditinstitut, Ihr Konto gemäß diesen Anweisungen zu belasten. Im Rahmen Ihrer Rechte haben Sie, entsprechend den Vertragsbedingungen mit Ihrem Kreditinstitut, Anspruch auf eine Rückerstattung von Ihrem Kreditinstitut. Eine Rückerstattung muss innerhalb von 8 Wochen ab dem Tag, an dem Ihr Konto belastet wurde, geltend gemacht werden. Eine Erläuterung Ihrer Rechte können Sie von Ihrem Kreditinstitut anfordern. Sie erklären sich einverstanden, Benachrichtigungen über künftige Belastungen bis spätestens 2 Tage vor dem Buchungsdatum zu erhalten. #### id By providing your payment information and confirming this payment, you authorise (A) and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. As part of your rights, you’re entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited. Your rights are explained in a statement that you can obtain from your bank. You agree to receive notifications for future debits up to 2 days before they occur. #### es Al proporcionar sus datos de pago y confirmar este pago, usted autoriza a (A) y Stripe, nuestro proveedor de servicios de pago, a enviar instrucciones a su banco para realizar un débito en su cuenta y (B) a su banco a realizar un cargo en su cuenta de conformidad con dichas instrucciones. Como parte de sus derechos, usted tiene derecho a un reembolso de su banco conforme a los términos y condiciones del contrato con su banco. El reembolso debe reclamarse en un plazo de 8 semanas a partir de la fecha en la que se haya efectuado el cargo en su cuenta. Sus derechos se explican en un extracto que puede obtener en su banco. Usted acepta recibir notificaciones de futuros débitos hasta 2 días antes de que se produzcan. #### fi Antamalla maksutiedot ja vahvistamalla tämän maksun, valtuutat (A) ja Stripen, maksupalveluntarjoajamme, lähettämään ohjeet pankille tilisi veloittamiseksi ja (B) pankkisi veloittamaan tiliäsi kyseisten ohjeiden mukaisesti. Oikeuksiesi mukaisesti olet oikeutettu maksun palautukseen pankilta, kuten heidän kanssaan tekemässäsi sopimuksessa ja sen ehdoissa on kuvattu. Maksun palautus on lunastettava 8 viikon aikana alkaen päivästä, jolloin tiliäsi veloitettiin. Oikeutesi on selitetty pankilta saatavissa olevassa lausunnossa. Hyväksyt vastaanottamaan ilmoituksia tulevista veloituksista jopa kaksi päivää ennen niiden tapahtumista. #### fr En fournissant vos informations de paiement et en confirmant ce paiement, vous autorisez (A) et Stripe, notre prestataire de services de paiement et/ou PPRO, son prestataire de services local, à envoyer des instructions à votre banque pour débiter votre compte et (B) votre banque à débiter votre compte conformément à ces instructions. Vous avez, entre autres, le droit de vous faire rembourser par votre banque selon les modalités et conditions du contrat conclu avec votre banque. La demande de remboursement doit être soumise dans un délai de 8 semaines à compter de la date à laquelle votre compte a été débité. Vos droits sont expliqués dans une déclaration disponible auprès de votre banque. Vous acceptez de recevoir des notifications des débits à venir dans les 2 jours précédant leur réalisation. #### it Fornendo i dati di pagamento e confermando il pagamento, l’utente autorizza (A) e Stripe, il fornitore del servizio di pagamento locale, a inviare alla sua banca le istruzioni per eseguire addebiti sul suo conto e (B) la sua banca a effettuare addebiti conformemente a tali istruzioni. L’utente, fra le altre cose, ha diritto a un rimborso dalla banca, in base a termini e condizioni dell’accordo sottoscritto con l’istituto. Il rimborso va richiesto entro otto settimane dalla data dell’addebito sul conto. I diritti dell’utente sono illustrati in una comunicazione riepilogativa che è possibile richiedere alla banca. L’utente accetta di ricevere notifiche per i futuri addebiti fino a due giorni prima che vengano effettuati. #### nl Door je betaalgegevens door te geven en deze betaling te bevestigen, geef je (A) en Stripe, onze betaaldienst, toestemming om instructies naar je bank te verzenden om het bedrag van je rekening af te schrijven, en (B) geef je je bank toestemming om het bedrag van je rekening af te schrijven conform deze aanwijzingen. Als onderdeel van je rechten kom je in aanmerking voor een terugbetaling van je bank conform de voorwaarden van je overeenkomst met de bank. Je moet terugbetalingen binnen acht weken claimen vanaf de datum waarop het bedrag is afgeschreven van je rekening. Je rechten worden toegelicht in een overzicht dat je bij de bank kunt opvragen. Je gaat ermee akkoord meldingen te ontvangen voor toekomstige afschrijvingen tot twee dagen voordat deze plaatsvinden. ​​Setting up a payment method creates the accepted mandate. As the customer has implicitly signed the mandate when accepting these terms, you must communicate these terms in your form or through email. ## Submit the payment method details to Stripe [Sisi klien] Retrieve the client secret from the SetupIntent you created and call [PaymentLauncher confirm](https://stripe.dev/stripe-android/payments-core/com.stripe.android.payments.paymentlauncher/-payment-launcher/index.html#74063765%2FFunctions%2F-1622557690) to present a webview where the customer can complete the setup on their bank’s website or app. Handle the payment result in `onActivityResult`. #### Kotlin ```kotlin class BancontactSetupActivity : AppCompatActivity() { // ... private lateinit var setupIntentClientSecret: String private val paymentLauncher: PaymentLauncher by lazy { PaymentLauncher.Companion.create( this, PaymentConfiguration.getInstance(applicationContext).publishableKey, PaymentConfiguration.getInstance(applicationContext).stripeAccountId, ::onPaymentResult ) } private fun startCheckout() { // ... val confirmParams = ConfirmSetupIntentParams .create( paymentMethodCreateParams = paymentMethodCreateParams, clientSecret = setupIntentClientSecret ) paymentLauncher.confirm(confirmParams) } private fun onPaymentResult(paymentResult: PaymentResult) { val message = when (paymentResult) { is PaymentResult.Completed -> { "Completed!" } is PaymentResult.Canceled -> { "Canceled!" } is PaymentResult.Failed -> { // This string comes from the PaymentIntent's error message. // See here: https://stripe.com/docs/api/payment_intents/object#payment_intent_object-last_payment_error-message "Failed: " + paymentResult.throwable.message } } } } ``` ## Charge the SEPA Direct Debit PaymentMethod later When you need to charge your customer again, create a new PaymentIntent. Find the ID of the SEPA Direct Debit payment method by [retrieving](https://docs.stripe.com/api/setup_intents/retrieve.md) the SetupIntent and [expanding](https://docs.stripe.com/api/expanding_objects.md) the `latest_attempt` field where you’ll find the `generated_sepa_debit` ID inside of `payment_method_details`. ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUP_INTENT_ID}} \ -u "<>:" \ -d "expand[]=latest_attempt" ``` Create a `PaymentIntent` with the SEPA Direct Debit ID and the customer’s ID. #### Accounts v2 ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "payment_method_types[]=sepa_debit" \ -d amount=1099 \ -d currency=eur \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d payment_method={{SEPA_DEBIT_PAYMENT_METHOD_ID}} \ -d confirm=true ``` #### Customers v1 ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "payment_method_types[]=sepa_debit" \ -d amount=1099 \ -d currency=eur \ -d "customer={{CUSTOMER_ID}}" \ -d payment_method={{SEPA_DEBIT_PAYMENT_METHOD_ID}} \ -d confirm=true ``` ## Coba integrasi Anda #### Email Atur `payment_method.billing_details.email` ke salah satu nilai berikut untuk menguji transisi status `PaymentIntent`. Anda dapat menyertakan teks kustom Anda sendiri di awal alamat email yang diikuti dengan garis bawah. Misalnya, `test_1_generatedSepaDebitIntentsFail@example.com` menghasilkan PaymentMethod Debit Langsung SEPA yang selalu gagal saat digunakan dengan `PaymentIntent`. | Alamat Email | Keterangan | | ------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- | | `generatedSepaDebitIntentsSucceed@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded`. | | `generatedSepaDebitIntentsSucceedDelayed@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded` setelah setidaknya tiga menit. | | `generatedSepaDebitIntentsFail@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method`. | | `generatedSepaDebitIntentsFailDelayed@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method` setelah setidaknya tiga menit. | | `generatedSepaDebitIntentsSucceedDisputed@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded`, tetapi sengketa dibuat segera. | | `generatedSepaDebitIntentsFailsDueToInsufficientFunds@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method` dengan kode kegagalan `insufficient_funds`. | #### PaymentMethod Gunakan PaymentMethods ini untuk menguji transisi status `PaymentIntent`. Token ini berguna untuk pengujian otomatis guna segera melampirkan PaymentMethod ke SetupIntent di server. | Metode Pembayaran | Keterangan | | -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | | `pm_bancontact_generatedSepaDebitIntentsSucceed` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded`. | | `pm_bancontact_generatedSepaDebitIntentsSucceedDelayed` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded` setelah setidaknya tiga menit. | | `pm_bancontact_generatedSepaDebitIntentsFail` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method`. | | `pm_bancontact_generatedSepaDebitIntentsFailDelayed` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method` setelah setidaknya tiga menit. | | `pm_bancontact_generatedSepaDebitIntentsSucceedDisputed` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded`, tetapi sengketa dibuat segera. | | `pm_bancontact_generatedSepaDebitIntentsFailsDueToInsufficientFunds` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method` dengan kode kegagalan `insufficient_funds`. | ## Optional: Tangani kejadian pascapembayaran Stripe sends a [setup_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.succeeded) event when the SetupIntent completes. Use the Dashboard, a custom *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests), or a partner solution to receive these events and run actions, like saving the generated SEPA Direct Debit *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) to your database or charging your customer after a trial period. Listen for these events rather than waiting on a callback from the client. On the client, the customer could close the browser window or quit the app before the callback executes, and malicious clients could manipulate the response. Setting up your integration to listen for asynchronous events also helps you accept more payment methods in the future. Learn about the [differences between all supported payment methods](https://stripe.com/payments/payment-methods-guide). ### Terima kejadian dan jalankan tindakan bisnis #### Secara manual Gunakan Dashboard Stripe untuk melihat semua pembayaran Stripe Anda, mengirim resi email, menangani payout, atau mencoba ulang pembayaran yang gagal. - [Lihat pembayaran percobaan Anda di Dashboard](https://dashboard.stripe.com/test/payments) #### Kode custom Bangun handler webhook untuk mendengarkan kejadian dan bangun alur pembayaran asinkron custom. Coba dan debug integrasi webhook Anda secara lokal dengan Stripe CLI. - [Build a custom webhook](https://docs.stripe.com/webhooks/handling-payment-events.md#build-your-own-webhook) #### Aplikasi siap-rakit Handle common business events, like [automation](https://stripe.partners/?f_category=automation) or [marketing and sales](https://stripe.partners/?f_category=marketing-and-sales), by integrating a partner application. # React Native > This is a React Native for when payment-ui is mobile and platform is react-native. View the full page at https://docs.stripe.com/payments/bancontact/set-up-payment?payment-ui=mobile&platform=react-native. Setting up future SEPA Direct Debit payments using Bancontact in your app consists of creating a [SetupIntent](https://docs.stripe.com/api/setup_intents.md) to track the process, collecting mandate acknowledgement, and redirecting your customer to Bancontact. Stripe uses the SetupIntent to track and handle all the states of the setup until the setup completes. ## Siapkan Stripe [Sisi server] [Sisi client] ### Sisi server Integrasi ini memerlukan endpoint di server Anda yang berbicara dengan API Stripe. Gunakan pustaka resmi kami untuk akses ke API Stripe dari server Anda: #### Ruby ```bash # Available as a gem sudo gem install stripe ``` ```ruby # If you use bundler, you can add this line to your Gemfile gem 'stripe' ``` ### Sisi client [React Native SDK](https://github.com/stripe/stripe-react-native) adalah sumber terbuka dan didokumentasikan lengkap. Secara internal, SDK [iOS asli](https://github.com/stripe/stripe-ios) dan SDK [Android](https://github.com/stripe/stripe-android) digunakan. Untuk menginstal React Native SDK Stripe, jalankan salah satu perintah berikut di direktori proyek (bergantung pada manajer paket yang Anda gunakan): #### yarn ```bash yarn add @stripe/stripe-react-native ``` #### npm ```bash npm install @stripe/stripe-react-native ``` Selanjutnya, instal beberapa dependensi lain yang diperlukan: - Untuk iOS, buka direktori **ios** dan jalankan `pod install` untuk memastikan bahwa Anda juga menginstal dependensi asli yang diperlukan. - Untuk Android, tidak ada lagi ketergantungan yang harus diinstal. > Sebaiknya ikuti [panduan TypeScript resmi](https://reactnative.dev/docs/typescript#adding-typescript-to-an-existing-project) untuk menambahkan dukungan TypeScript. ### Inisialisasi Stripe Untuk menginisialisasi Stripe di aplikasi React Native, bungkus layar pembayaran dengan komponen `StripeProvider`, atau gunakan metode inisialisasi `initStripe`. Hanya [kunci yang dapat dipublikasikan](https://docs.stripe.com/keys.md#obtain-api-keys) API di `publishableKey` yang diperlukan. Contoh berikut menunjukkan cara menginisialisasi Stripe menggunakan komponen `StripeProvider`. ```jsx import { useState, useEffect } from 'react'; import { StripeProvider } from '@stripe/stripe-react-native'; function App() { const [publishableKey, setPublishableKey] = useState(''); const fetchPublishableKey = async () => { const key = await fetchKey(); // fetch key from your server here setPublishableKey(key); }; useEffect(() => { fetchPublishableKey(); }, []); return ( {/* Your app code here */} ); } ``` > Gunakan [kunci percobaan](https://docs.stripe.com/keys.md#obtain-api-keys) API Anda saat mencoba serta mengembangkan, dan kunci [mode live](https://docs.stripe.com/keys.md#test-live-modes) bila Anda memublikasikan aplikasi. ## Create or retrieve a customer [Sisi server] To set up future SEPA Direct Debit payments using Bancontact, you must attach the SEPA Direct Debit payment method to an object that represents your customer. > #### Menggunakan API Akun v2 untuk mewakili pelanggan > > API Akun v2 umumnya tersedia untuk pengguna Connect, dan dalam pratinjau publik untuk pengguna Stripe lainnya. Jika Anda adalah bagian dari pratinjau Akun v2, Anda perlu menentukan [Tentukan versi pratinjau](https://docs.stripe.com/api-v2-overview.md#sdk-and-api-versioning) dalam kode Anda. > > Untuk meminta akses ke pratinjau Akun v2, > > Untuk sebagian besar contoh penggunaan, sebaiknya Anda [memodelkan pelanggan Anda sebagai objek Akun yang dikonfigurasi pelanggan](https://docs.stripe.com/accounts-v2/use-accounts-as-customers.md) alih-alih menggunakan objek [Pelanggan](https://docs.stripe.com/api/customers.md). Buat [Akun](https://docs.stripe.com/api/v2/core/accounts/create.md#v2_create_accounts-configuration-customer) atau [Pelanggan](https://docs.stripe.com/api/customers/create.md) yang dikonfigurasi pelanggan saat pelanggan Anda membuat akun dengan bisnis Anda, atau saat menyimpan metode pembayaran. Kaitkan ID objek dengan representasi internal pelanggan Anda sendiri. Buat pelanggan baru atau ambil pelanggan yang sudah ada untuk dikaitkan dengan pembayaran ini. #### Akun v2 ```curl curl -X POST https://api.stripe.com/v2/core/accounts \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-04-22.preview" \ --json '{ "contact_email": "jenny.rosen@example.com", "display_name": "Jenny Rosen", "configuration": { "customer": {} }, "include": [ "configuration.customer" ] }' ``` #### Pelanggan v1 ```curl curl https://api.stripe.com/v1/customers \ -u "<>:" \ -d "name=Jenny Rosen" \ --data-urlencode "email=jenny.rosen@example.com" ``` ## Buat SetupIntent [Sisi server] A [SetupIntent](https://docs.stripe.com/api/setup_intents.md) is an object that represents your intent to set up a customer’s payment method for future payments and tracks the steps of this setup process. For Bancontact, this includes collecting a [SEPA Direct Debit mandate](https://www.europeanpaymentscouncil.eu/what-we-do/sepa-direct-debit/sdd-mandate) from the customer and tracking its validity. Create a `SetupIntent` with the customer’s ID and add `bancontact` to the [payment_method_types](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_types) array. #### Accounts v2 ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "payment_method_types[]=bancontact" \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" ``` #### Customers v1 ```curl curl https://api.stripe.com/v1/setup_intents \ -u "<>:" \ -d "payment_method_types[]=bancontact" \ -d customer={{CUSTOMER_ID}} ``` The `SetupIntent` includes a *client secret* (The client secret is a unique key returned from Stripe as part of a SetupIntent. This key lets the client access important fields from the SetupIntent (for example, status)), which is used on the client side to securely complete the setup process without needing the `SetupIntent` object. ## Collect payment method details and mandate acknowledgement [Sisi klien] In your app, collect your customer’s full name and email address. ```javascript export default function BancontactPaymentScreen() { const [name, setName] = useState(); const [email, setEmai] = useState(); const handlePayPress = async () => { // ... }; return ( setEmail(value.nativeEvent.text)} /> setName(value.nativeEvent.text)} /> ); } ``` ​​To process SEPA Direct Debit payments, you must collect a mandate agreement from your customer. Display the following standard authorization text for your customer to implicitly sign the mandate. Replace *Rocket Rides* with your company name. #### de Durch Angabe Ihrer Zahlungsinformationen und der Bestätigung der vorliegenden Zahlung ermächtigen Sie (A) und Stripe, unseren Zahlungsdienstleister, Ihrem Kreditinstitut Anweisungen zur Belastung Ihres Kontos zu erteilen, und (B) Ihr Kreditinstitut, Ihr Konto gemäß diesen Anweisungen zu belasten. Im Rahmen Ihrer Rechte haben Sie, entsprechend den Vertragsbedingungen mit Ihrem Kreditinstitut, Anspruch auf eine Rückerstattung von Ihrem Kreditinstitut. Eine Rückerstattung muss innerhalb von 8 Wochen ab dem Tag, an dem Ihr Konto belastet wurde, geltend gemacht werden. Eine Erläuterung Ihrer Rechte können Sie von Ihrem Kreditinstitut anfordern. Sie erklären sich einverstanden, Benachrichtigungen über künftige Belastungen bis spätestens 2 Tage vor dem Buchungsdatum zu erhalten. #### id By providing your payment information and confirming this payment, you authorise (A) and Stripe, our payment service provider, to send instructions to your bank to debit your account and (B) your bank to debit your account in accordance with those instructions. As part of your rights, you’re entitled to a refund from your bank under the terms and conditions of your agreement with your bank. A refund must be claimed within 8 weeks starting from the date on which your account was debited. Your rights are explained in a statement that you can obtain from your bank. You agree to receive notifications for future debits up to 2 days before they occur. #### es Al proporcionar sus datos de pago y confirmar este pago, usted autoriza a (A) y Stripe, nuestro proveedor de servicios de pago, a enviar instrucciones a su banco para realizar un débito en su cuenta y (B) a su banco a realizar un cargo en su cuenta de conformidad con dichas instrucciones. Como parte de sus derechos, usted tiene derecho a un reembolso de su banco conforme a los términos y condiciones del contrato con su banco. El reembolso debe reclamarse en un plazo de 8 semanas a partir de la fecha en la que se haya efectuado el cargo en su cuenta. Sus derechos se explican en un extracto que puede obtener en su banco. Usted acepta recibir notificaciones de futuros débitos hasta 2 días antes de que se produzcan. #### fi Antamalla maksutiedot ja vahvistamalla tämän maksun, valtuutat (A) ja Stripen, maksupalveluntarjoajamme, lähettämään ohjeet pankille tilisi veloittamiseksi ja (B) pankkisi veloittamaan tiliäsi kyseisten ohjeiden mukaisesti. Oikeuksiesi mukaisesti olet oikeutettu maksun palautukseen pankilta, kuten heidän kanssaan tekemässäsi sopimuksessa ja sen ehdoissa on kuvattu. Maksun palautus on lunastettava 8 viikon aikana alkaen päivästä, jolloin tiliäsi veloitettiin. Oikeutesi on selitetty pankilta saatavissa olevassa lausunnossa. Hyväksyt vastaanottamaan ilmoituksia tulevista veloituksista jopa kaksi päivää ennen niiden tapahtumista. #### fr En fournissant vos informations de paiement et en confirmant ce paiement, vous autorisez (A) et Stripe, notre prestataire de services de paiement et/ou PPRO, son prestataire de services local, à envoyer des instructions à votre banque pour débiter votre compte et (B) votre banque à débiter votre compte conformément à ces instructions. Vous avez, entre autres, le droit de vous faire rembourser par votre banque selon les modalités et conditions du contrat conclu avec votre banque. La demande de remboursement doit être soumise dans un délai de 8 semaines à compter de la date à laquelle votre compte a été débité. Vos droits sont expliqués dans une déclaration disponible auprès de votre banque. Vous acceptez de recevoir des notifications des débits à venir dans les 2 jours précédant leur réalisation. #### it Fornendo i dati di pagamento e confermando il pagamento, l’utente autorizza (A) e Stripe, il fornitore del servizio di pagamento locale, a inviare alla sua banca le istruzioni per eseguire addebiti sul suo conto e (B) la sua banca a effettuare addebiti conformemente a tali istruzioni. L’utente, fra le altre cose, ha diritto a un rimborso dalla banca, in base a termini e condizioni dell’accordo sottoscritto con l’istituto. Il rimborso va richiesto entro otto settimane dalla data dell’addebito sul conto. I diritti dell’utente sono illustrati in una comunicazione riepilogativa che è possibile richiedere alla banca. L’utente accetta di ricevere notifiche per i futuri addebiti fino a due giorni prima che vengano effettuati. #### nl Door je betaalgegevens door te geven en deze betaling te bevestigen, geef je (A) en Stripe, onze betaaldienst, toestemming om instructies naar je bank te verzenden om het bedrag van je rekening af te schrijven, en (B) geef je je bank toestemming om het bedrag van je rekening af te schrijven conform deze aanwijzingen. Als onderdeel van je rechten kom je in aanmerking voor een terugbetaling van je bank conform de voorwaarden van je overeenkomst met de bank. Je moet terugbetalingen binnen acht weken claimen vanaf de datum waarop het bedrag is afgeschreven van je rekening. Je rechten worden toegelicht in een overzicht dat je bij de bank kunt opvragen. Je gaat ermee akkoord meldingen te ontvangen voor toekomstige afschrijvingen tot twee dagen voordat deze plaatsvinden. ​​Setting up a payment method creates the accepted mandate. As the customer has implicitly signed the mandate when accepting these terms, you must communicate these terms in your form or through email. ## Submit the payment method details to Stripe [Sisi klien] Retrieve the client secret from the SetupIntent you created and call `confirmSetupIntent`. This presents a webview where the customer can complete the setup on their bank’s website or app. Afterwards, the promise resolves with the result of the SetupIntent. ```javascript export default function BancontactPaymentScreen() { const [name, setName] = useState(); const [email, setEmai] = useState(); const handlePayPress = async () => { const billingDetails: PaymentMethodCreateParams.BillingDetails = { name, email, }; }; const { error, setupIntent } = await confirmSetupIntent(clientSecret, { paymentMethodType: 'Bancontact', paymentMethodData: { billingDetails, } }); if (error) { Alert.alert(`Error code: ${error.code}`, error.message); } else if (setupIntent) { Alert.alert( 'Success', `Setup intent created. Intent status: ${setupIntent.status}` ); } return ( setEmail(value.nativeEvent.text)} /> setName(value.nativeEvent.text)} /> ); } ``` ## Charge the SEPA Direct Debit PaymentMethod later When you need to charge your customer again, create a new PaymentIntent. Find the ID of the SEPA Direct Debit payment method by [retrieving](https://docs.stripe.com/api/setup_intents/retrieve.md) the SetupIntent and [expanding](https://docs.stripe.com/api/expanding_objects.md) the `latest_attempt` field where you’ll find the `generated_sepa_debit` ID inside of `payment_method_details`. ```curl curl -G https://api.stripe.com/v1/setup_intents/{{SETUP_INTENT_ID}} \ -u "<>:" \ -d "expand[]=latest_attempt" ``` Create a `PaymentIntent` with the SEPA Direct Debit ID and the customer’s ID. #### Accounts v2 ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "payment_method_types[]=sepa_debit" \ -d amount=1099 \ -d currency=eur \ -d "customer_account={{CUSTOMERACCOUNT_ID}}" \ -d payment_method={{SEPA_DEBIT_PAYMENT_METHOD_ID}} \ -d confirm=true ``` #### Customers v1 ```curl curl https://api.stripe.com/v1/payment_intents \ -u "<>:" \ -d "payment_method_types[]=sepa_debit" \ -d amount=1099 \ -d currency=eur \ -d "customer={{CUSTOMER_ID}}" \ -d payment_method={{SEPA_DEBIT_PAYMENT_METHOD_ID}} \ -d confirm=true ``` ## Coba integrasi Anda #### Email Atur `payment_method.billing_details.email` ke salah satu nilai berikut untuk menguji transisi status `PaymentIntent`. Anda dapat menyertakan teks kustom Anda sendiri di awal alamat email yang diikuti dengan garis bawah. Misalnya, `test_1_generatedSepaDebitIntentsFail@example.com` menghasilkan PaymentMethod Debit Langsung SEPA yang selalu gagal saat digunakan dengan `PaymentIntent`. | Alamat Email | Keterangan | | ------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- | | `generatedSepaDebitIntentsSucceed@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded`. | | `generatedSepaDebitIntentsSucceedDelayed@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded` setelah setidaknya tiga menit. | | `generatedSepaDebitIntentsFail@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method`. | | `generatedSepaDebitIntentsFailDelayed@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method` setelah setidaknya tiga menit. | | `generatedSepaDebitIntentsSucceedDisputed@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded`, tetapi sengketa dibuat segera. | | `generatedSepaDebitIntentsFailsDueToInsufficientFunds@example.com` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method` dengan kode kegagalan `insufficient_funds`. | #### PaymentMethod Gunakan PaymentMethods ini untuk menguji transisi status `PaymentIntent`. Token ini berguna untuk pengujian otomatis guna segera melampirkan PaymentMethod ke SetupIntent di server. | Metode Pembayaran | Keterangan | | -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | | `pm_bancontact_generatedSepaDebitIntentsSucceed` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded`. | | `pm_bancontact_generatedSepaDebitIntentsSucceedDelayed` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded` setelah setidaknya tiga menit. | | `pm_bancontact_generatedSepaDebitIntentsFail` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method`. | | `pm_bancontact_generatedSepaDebitIntentsFailDelayed` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method` setelah setidaknya tiga menit. | | `pm_bancontact_generatedSepaDebitIntentsSucceedDisputed` | Status `PaymentIntent` bertransisi dari `processing` ke `succeeded`, tetapi sengketa dibuat segera. | | `pm_bancontact_generatedSepaDebitIntentsFailsDueToInsufficientFunds` | Status `PaymentIntent` bertransisi dari `processing` ke `requires_payment_method` dengan kode kegagalan `insufficient_funds`. | ## Optional: Handle post-setup events Stripe sends a [setup_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-setup_intent.succeeded) event when the SetupIntent completes. Use the Dashboard, a custom *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests), or a partner solution to receive these events and run actions, like saving the generated SEPA Direct Debit *PaymentMethod* (PaymentMethods represent your customer's payment instruments, used with the Payment Intents or Setup Intents APIs) to your database or charging your customer after a trial period. Listen for these events rather than waiting on a callback from the client. On the client, the customer could close the browser window or quit the app before the callback executes, and malicious clients could manipulate the response. Setting up your integration to listen for asynchronous events also helps you accept more payment methods in the future. Learn about the [differences between all supported payment methods](https://stripe.com/payments/payment-methods-guide). ### Terima kejadian dan jalankan tindakan bisnis #### Secara manual Gunakan Dashboard Stripe untuk melihat semua pembayaran Stripe Anda, mengirim resi email, menangani payout, atau mencoba ulang pembayaran yang gagal. - [Lihat pembayaran percobaan Anda di Dashboard](https://dashboard.stripe.com/test/payments) #### Kode custom Bangun handler webhook untuk mendengarkan kejadian dan bangun alur pembayaran asinkron custom. Coba dan debug integrasi webhook Anda secara lokal dengan Stripe CLI. - [Build a custom webhook](https://docs.stripe.com/webhooks/handling-payment-events.md#build-your-own-webhook) #### Aplikasi siap-rakit Handle common business events, like [automation](https://stripe.partners/?f_category=automation) or [marketing and sales](https://stripe.partners/?f_category=marketing-and-sales), by integrating a partner application. ## Optional: Handle deep linking Bila pelanggan keluar dari aplikasi Anda (misalnya untuk melakukan autentikasi di Safari atau aplikasi perbankan), sediakan cara agar pelanggan dapat kembali ke aplikasi Anda secara otomatis. Banyak tipe metode pembayaran *memerlukan* URL kembali. Jika Anda tidak memberikannya, kami tidak dapat menyajikan metode pembayaran yang mengharuskan URL kembali kepada pengguna, sekalipun Anda telah mengaktifkannya. Untuk memberikan URL kembali: 1. [Daftarkan](https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app#Register-your-URL-scheme) URL custom. Tautan universal tidak didukung. 1. [Konfigurasikan](https://reactnative.dev/docs/linking) URL custom Anda. 1. Siapkan komponen root Anda untuk meneruskan URL ke SDK Stripe seperti yang ditunjukkan di bawah ini. > Jika Anda menggunakan Expo, [atur skema](https://docs.expo.io/guides/linking/#in-a-standalone-app) di file `app.json`. ```jsx import { useEffect, useCallback } from 'react'; import { Linking, View } from 'react-native'; import { useStripe } from '@stripe/stripe-react-native'; export default function MyApp() { const { handleURLCallback } = useStripe(); const handleDeepLink = useCallback( async (url: string | null) => { if (url) { const stripeHandled = await handleURLCallback(url); if (stripeHandled) { // This was a Stripe URL - you can return or add extra handling here as you see fit } else { // This was NOT a Stripe URL – handle as you normally would } } }, [handleURLCallback] ); useEffect(() => { const getUrlAsync = async () => { const initialUrl = await Linking.getInitialURL(); handleDeepLink(initialUrl); }; getUrlAsync(); const deepLinkListener = Linking.addEventListener( 'url', (event: { url: string }) => { handleDeepLink(event.url); } ); return () => deepLinkListener.remove(); }, [handleDeepLink]); return ( ); } ``` Untuk informasi selengkapnya tentang skema URL asli, baca dokumen [Android](https://developer.android.com/training/app-links/deep-linking) dan [iOS](https://developer.apple.com/documentation/xcode/allowing_apps_and_websites_to_link_to_your_content/defining_a_custom_url_scheme_for_your_app). ## See also - [Accept a SEPA Direct Debit payment](https://docs.stripe.com/payments/sepa-debit/accept-a-payment.md) - [Set up a subscription with SEPA Direct Debit in the EU](https://docs.stripe.com/billing/subscriptions/sepa-debit.md)