Payment service providers

Solidus is not built to process payments by itself, and it does not include any integrations for popular payment service providers (PSPs) . You must install a Solidus extension or create your own integration.

Solidus extensions for payment processing

The Solidus extensions listed below give you access to some popular payment service providers:

Sending payments to PSPs

In order for you to successfully process payments, your payment methods need to send information to a payment service provider. You can use the Spree::PaymentMethod and Spree::PaymentMethod::CreditCard classes as a reference for building out your own PSP integrations.

The Spree::PaymentMethod base class

Typically, PSP integrations use the Spree::PaymentMethod base class to build out to the PSP's specifications and API. When you model out payment methods using Spree::PaymentMethod as a base class, you can get Solidus admin panel functionality with very little effort.

Note that the Spree::PaymentMethod base class also has a similar interface to the active_merchant gem.

For an example, see how the solidus_paypal_braintree gem builds its SolidusPaypalBraintree::Gateway class class: it sets its own preferences and overrides many of the methods originally defined in Spree::PaymentMethod.


Solidus also provides a Spree::PaymentMethod::CreditCard class. While it is not a functional credit card-based payment method, it is a good candidate as a base class for building your own credit card-based payment methods.

You would need to extend or rewrite this class with your preferred PSP integration.

Switching payment service provider

After switching payment service provider, there may be Spree::PaymentMethod records referencing a type class that does not exist anymore. Trying to retrieve these records through an ActiveRecord query raises a Spree::PaymentMethod::UnsupportedPaymentMethod error.

If you cannot delete these records, you can deactivate them running rake payment_method:deactivate_unsupported_payment_methods. This way, their type will be set to Spree::PaymentMethod, allowing for records retrieval without errors. Also, their real type value will be stored in the type_before_removal attribute.


Solidus is an open source platform supported by the community. We encourage everyone using Solidus to contribute back to the documentation and the code.

If you’re interested in contributing to the docs, get started with the contributing guidelines. If you see something that needs fixing and can’t do it yourself, please send us an email.