Skip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Add a payment method

The Checkout drop-in component provides extensibility features for integrating third-party payment providers. Use slots to customize the list of payment methods shown during the checkout process.

This tutorial walks you through integrating Braintree as a payment provider with the Commerce boilerplate template. While we use Braintree as an example, you can adapt these same steps for other payment providers.

For this tutorial, you must configure the Braintree extension on your Adobe Commerce backend before integrating it with the Commerce boilerplate template. The Braintree extension is bundled with Adobe Commerce and can be configured in the Admin.

If you choose to integrate with a different payment provider, consider the following:

  • The provider must be supported by Adobe Commerce.
  • The provider likely offers an extension that you must install and configure on your Adobe Commerce backend.

To integrate the Braintree payment provider with the Commerce boilerplate template, you must add the Braintree client SDK to your project.

Use the following script tag to add the Braintree client SDK to an HTML file.

<script src="https://js.braintreegateway.com/web/dropin/1.43.0/js/dropin.min.js"></script>
  1. Create a braintreeInstance variable to manage the Braintree drop-in instance.

    let braintreeInstance;
  2. Update the PaymentMethods container to include a custom handler for the Braintree payment method. Set autoSync to false to prevent automatic calls to the setPaymentMethod function when the payment method changes.

    CheckoutProvider.render(PaymentMethods, {
    slots: {
    Methods: {
    braintree: {
    autoSync: false,
    render: async (ctx) => {
    const container = document.createElement('div');
    window.braintree.dropin.create({
    authorization: 'sandbox_cstz6tw9_sbj9bzvx2ngq77n4',
    container,
    }, (err, dropinInstance) => {
    if (err) {
    console.error(err);
    }
    braintreeInstance = dropinInstance;
    });
    ctx.replaceHTML(container);
    },
    },
    },
    },
    })($paymentMethods),

Implement the Braintree payment logic within the handlePlaceOrder handler of the PlaceOrder container. This involves processing the payment using the Braintree nonce.

CheckoutProvider.render(PlaceOrder, {
handlePlaceOrder: async ({ cartId, code }) => {
await displayOverlaySpinner();
try {
switch (code) {
case 'braintree': {
braintreeInstance.requestPaymentMethod(async (err, payload) => {
if (err) {
removeOverlaySpinner();
console.error(err);
return;
}
await checkoutApi.setPaymentMethod({
code: 'braintree',
braintree: {
is_active_payment_token_enabler: false,
payment_method_nonce: payload.nonce,
},
});
await orderApi.placeOrder(cartId);
});
break;
}
default: {
// Place order
await orderApi.placeOrder(cartId);
}
}
} catch (error) {
console.error(error);
throw error;
} finally {
await removeOverlaySpinner();
}
},
})($placeOrder),

See blocks/commerce-checkout-braintree in the demos branch of the boilerplate repository for complete JS and CSS code for the Braintree payment method checkout flow.