
task-4042449 task-2949379 closes odoo/documentation#10945 Signed-off-by: Audrey Vandromme (auva) <auva@odoo.com>
434 lines
17 KiB
ReStructuredText
434 lines
17 KiB
ReStructuredText
:show-content:
|
||
|
||
===============
|
||
Online payments
|
||
===============
|
||
|
||
.. toctree::
|
||
:titlesonly:
|
||
|
||
payment_providers/wire_transfer
|
||
payment_providers/adyen
|
||
payment_providers/alipay
|
||
payment_providers/amazon_payment_services
|
||
payment_providers/asiapay
|
||
payment_providers/authorize
|
||
payment_providers/buckaroo
|
||
payment_providers/demo
|
||
payment_providers/flutterwave
|
||
payment_providers/mercado_pago
|
||
payment_providers/mollie
|
||
payment_providers/ogone
|
||
payment_providers/paypal
|
||
payment_providers/razorpay
|
||
payment_providers/sips
|
||
payment_providers/stripe
|
||
|
||
Odoo embeds several **payment providers** that allow your customers to pay online, on their
|
||
*customer portals*, or on your *eCommerce website*. They can pay sales orders, invoices, or
|
||
subscriptions with recurring payments using their favorite payment methods, such as
|
||
**credit cards**.
|
||
|
||
.. image:: payment_providers/online-payment.png
|
||
:alt: Online payment form
|
||
|
||
.. note::
|
||
Odoo apps delegate the handling of sensitive information to the certified payment provider so
|
||
that you don't ever have to worry about PCI compliance. No sensitive information (such as credit
|
||
card numbers) is stored on Odoo servers or Odoo databases hosted elsewhere. Instead, Odoo apps
|
||
use a unique reference number for the data stored safely in the payment providers' systems.
|
||
|
||
.. _payment_providers/supported_providers:
|
||
|
||
Supported payment providers
|
||
===========================
|
||
|
||
To access the supported payment providers, go to :menuselection:`Accounting --> Configuration -->
|
||
Payment Providers` or :menuselection:`Website --> Configuration --> Payment Providers`.
|
||
|
||
.. _payment_providers/online_providers:
|
||
|
||
Online payment providers
|
||
------------------------
|
||
|
||
.. list-table::
|
||
:header-rows: 1
|
||
:stub-columns: 1
|
||
:widths: auto
|
||
|
||
* -
|
||
- Payment flow from
|
||
- :ref:`Tokenization <payment_providers/tokenization>`
|
||
- :ref:`Manual capture <payment_providers/manual_capture>`
|
||
- :ref:`Refunds <payment_providers/refunds>`
|
||
- :ref:`Express checkout <payment_providers/express_checkout>`
|
||
- :ref:`Extra fees <payment_providers/extra_fees>`
|
||
* - :doc:`Adyen <payment_providers/adyen>`
|
||
- Odoo
|
||
- |V|
|
||
- Full only
|
||
- Full and partial
|
||
-
|
||
-
|
||
* - :doc:`Amazon Payment Services <payment_providers/amazon_payment_services>`
|
||
- The provider's website
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
* - :doc:`AsiaPay <payment_providers/asiapay>`
|
||
- The provider's website
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
* - :doc:`Authorize.Net <payment_providers/authorize>`
|
||
- Odoo
|
||
- |V|
|
||
- Full only
|
||
- Full only
|
||
-
|
||
-
|
||
* - :doc:`Buckaroo <payment_providers/buckaroo>`
|
||
- The provider's website
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
* - :doc:`Flutterwave <payment_providers/flutterwave>`
|
||
- The provider's website
|
||
- |V|
|
||
-
|
||
-
|
||
-
|
||
-
|
||
* - :doc:`Mercado Pago <payment_providers/mercado_pago>`
|
||
- The provider's website
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
* - :doc:`Mollie <payment_providers/mollie>`
|
||
- The provider's website
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
* - :doc:`PayPal <payment_providers/paypal>`
|
||
- The provider's website
|
||
-
|
||
-
|
||
-
|
||
-
|
||
- |V|
|
||
* - :doc:`Razorpay <payment_providers/razorpay>`
|
||
- The provider's website
|
||
-
|
||
- Full only
|
||
- Full and partial
|
||
-
|
||
-
|
||
* - :doc:`SIPS <payment_providers/sips>`
|
||
- The provider's website
|
||
-
|
||
-
|
||
-
|
||
-
|
||
-
|
||
* - :doc:`Stripe <payment_providers/stripe>`
|
||
- The provider's website
|
||
- |V|
|
||
- Full only
|
||
- Full and partial
|
||
- |V|
|
||
-
|
||
|
||
.. |V| replace:: ✔
|
||
|
||
.. note::
|
||
- Each provider has its own specific configuration flow, depending on which feature is
|
||
available.
|
||
- Some of these online payment providers can also be added as :doc:`bank accounts
|
||
<../finance/accounting/bank>`, but this is **not** the same process as adding them as payment
|
||
providers. Payment providers allow customers to pay online, and bank accounts are added and
|
||
configured in the Accounting app to do a :doc:`bank reconciliation
|
||
<accounting/bank/reconciliation>`.
|
||
|
||
.. tip::
|
||
In addition to the regular payment providers that integrate with an API, such as Stripe, PayPal,
|
||
or Adyen, Odoo bundles the :doc:`Demo payment provider <payment_providers/demo>`. This payment
|
||
provider allows you to test business flows involving online payments. No credentials are required
|
||
as the demo payments are dummy payments.
|
||
|
||
.. _payment_providers/bank_payments:
|
||
|
||
Bank payments
|
||
-------------
|
||
|
||
- | :doc:`Wire Transfer <payment_providers/wire_transfer>`
|
||
| When selected, Odoo displays your payment information with a payment reference. You have to
|
||
approve the payment manually once you have received it in your bank account.
|
||
- | :doc:`SEPA Direct Debit <../finance/accounting/payments/batch_sdd>`
|
||
| Your customers can make a bank transfer to register a SEPA Direct Debit mandate and get their
|
||
bank account charged directly.
|
||
|
||
.. _payment_providers/add_new:
|
||
|
||
Enabling a payment provider
|
||
===========================
|
||
|
||
To add a new payment provider and make its related payment methods available to your customers,
|
||
proceed as follows:
|
||
|
||
#. Go to the payment provider's website, create an account, and make sure you have the API
|
||
credentials requested for third-party use. These are necessary for Odoo to communicate with the
|
||
payment provider.
|
||
#. In Odoo, navigate to the :guilabel:`Payment providers` by going to :menuselection:`Accounting -->
|
||
Configuration --> Payment Providers` or :menuselection:`Website --> Configuration --> Payment
|
||
Providers`.
|
||
#. Select the provider and configure the :guilabel:`Credentials` tab.
|
||
#. Set the :guilabel:`State` field to :guilabel:`Enabled`.
|
||
#. Select a :ref:`payment journal <payment_providers/journal>`.
|
||
|
||
.. note::
|
||
- The fields available in the :guilabel:`Credentials` tab depend on the payment provider. Refer
|
||
to the :ref:`related documentation <payment_providers/supported_providers>` for more
|
||
information.
|
||
- Once you have enabled the payment provider, it is automatically published on your website.
|
||
If you wish to unpublish it, click the :guilabel:`Published` button. Customers cannot make
|
||
payments through an unpublished provider, but they can still manage
|
||
:dfn:`(delete and assign to a subscription)` their existing tokens linked to such a provider.
|
||
|
||
.. _payment_providers/test-mode:
|
||
|
||
Test mode
|
||
---------
|
||
|
||
If you wish to try the payment provider as a test, set the :guilabel:`State` field in the payment
|
||
provider form to :guilabel:`Test mode`, then enter your provider's test/sandbox credentials in the
|
||
:guilabel:`Credentials` tab.
|
||
|
||
.. note::
|
||
By default, the payment provider remains **unpublished** in test mode so that it's not visible to
|
||
visitors.
|
||
|
||
.. warning::
|
||
We recommend using the test mode on a duplicate or a test database to avoid potential issues
|
||
with your invoice numbering.
|
||
|
||
.. _payment_providers/payment_methods:
|
||
|
||
Payment form
|
||
============
|
||
|
||
You can change the payment provider’s appearance on your website in the :guilabel:`Configuration`
|
||
tab of the selected payment provider. Modify its name in the :guilabel:`Displayed as` field and
|
||
adapt the :guilabel:`Supported Payment Icons` if necessary.
|
||
|
||
.. _payment_providers/tokenization:
|
||
|
||
Tokenization
|
||
============
|
||
|
||
:ref:`If the payment provider supports this feature <payment_providers/online_providers>`, customers
|
||
can save their payment method details for later. To enable this feature, go to the
|
||
:guilabel:`Configuration` tab of the selected payment provider and enable :guilabel:`Allow Saving
|
||
Payment Methods`.
|
||
|
||
In this case, a **payment token** is created in Odoo to be used as a payment method for subsequent
|
||
payments without the customer having to enter their payment method details again. This is
|
||
particularly useful for the eCommerce conversion rate and subscriptions that use recurring payments.
|
||
|
||
.. tip::
|
||
To add or delete their saved payment method details, customers can click :guilabel:`Manage
|
||
payment methods` in the :ref:`customer portal <users-portal-payment-methods>`.
|
||
|
||
.. admonition:: PCI DSS and Attestation of Compliance
|
||
|
||
Odoo is not `PCI <https://www.pcisecuritystandards.org>`_ DSS-certified because it does not
|
||
store cardholder data or process payments. Instead, it outsources tokenization and payment to
|
||
:ref:`external payment providers <payment_providers/online_providers>`, which means that as an
|
||
Odoo customer, you only need to complete the minimal Self-Assessment Questionnaire (SAQ) with
|
||
the provider to obtain the Attestation of Compliance (AoC) and achieve PCI compliance. Odoo
|
||
should not be mentioned as a payment processor or a third-party service provider in the
|
||
:abbr:`SAQ (Self-Assessment Questionnaire)`.
|
||
|
||
.. _payment_providers/manual_capture:
|
||
|
||
Manual capture
|
||
==============
|
||
|
||
:ref:`If the payment provider supports this feature <payment_providers/online_providers>`, you can
|
||
authorize and capture payments in two steps instead of one. To enable this feature, go to the
|
||
:guilabel:`Configuration` tab of the selected payment provider and enable :guilabel:`Capture Amount
|
||
Manually`.
|
||
|
||
When you authorize a payment, the funds are reserved on the customer's payment method but not
|
||
immediately charged. They are charged when you manually capture the payment later on. You can also
|
||
void the authorization to cancel it and release the reserved funds. Capturing payments manually is
|
||
helpful in many situations:
|
||
|
||
- Receive the payment confirmation and wait until the order is shipped to capture the payment.
|
||
- Review and verify that orders are legitimate before the payment is completed and the fulfillment
|
||
process starts.
|
||
- Avoid potentially high refund fees for refunded payments: payment providers will not charge you
|
||
for voiding an authorization.
|
||
- Hold a security deposit to return later, minus any deductions (e.g., in case of damages).
|
||
|
||
To capture the payment after it was authorized, go to the related sales order or invoice and click
|
||
the :guilabel:`Capture Transaction` button. To release the funds, click the :guilabel:`Void
|
||
Transaction` button.
|
||
|
||
.. note::
|
||
- Some payment providers support capturing only part of the authorized amount. The remaining
|
||
amount can then be either captured or voided. These providers have the value **Full and
|
||
partial** in the :ref:`table above <payment_providers/online_providers>`. The providers that
|
||
only support capturing or voiding the total amount have the value **Full only**.
|
||
- The funds are likely not reserved forever. After a certain time, they may be automatically
|
||
released back to the customer's payment method. Refer to your payment provider's documentation
|
||
for the exact reservation duration.
|
||
- Odoo does not support this feature for all payment providers, but some allow the manual capture
|
||
from their website interface.
|
||
|
||
.. _payment_providers/refunds:
|
||
|
||
Refunds
|
||
=======
|
||
|
||
If your payment provider supports this feature, you can refund payments directly from Odoo. It does
|
||
not need to be enabled first. To refund a customer payment, navigate to it and click the
|
||
:guilabel:`Refund` button.
|
||
|
||
.. note::
|
||
- Some payment providers support refunding only part of the amount. The remaining amount can then
|
||
optionally be refunded, too. These providers have the value **Full and partial** in the
|
||
:ref:`table above <payment_providers/online_providers>`. The providers that only support
|
||
refunding the total amount have the value **Full only**.
|
||
- Odoo does not support this feature for all payment providers, but some allow to refund payments
|
||
from their website interface.
|
||
|
||
.. _payment_providers/express_checkout:
|
||
|
||
Express checkout
|
||
================
|
||
|
||
:ref:`If the payment provider supports this feature <payment_providers/online_providers>`, you can
|
||
allow customers to use the :guilabel:`Google Pay` and :guilabel:`Apple Pay` buttons and pay their
|
||
eCommerce orders in one click. When they use one of these buttons, customers go straight from the
|
||
cart to the confirmation page without filling out the contact form. They just have to validate the
|
||
payment on Google's or Apple's payment form.
|
||
|
||
To enable this feature, go to the :guilabel:`Configuration` tab of the selected payment provider and
|
||
enable :guilabel:`Allow Express Checkout`.
|
||
|
||
.. note::
|
||
All prices shown on the express checkout payment form always include taxes.
|
||
|
||
.. _payment_providers/extra_fees:
|
||
|
||
Extra Fees
|
||
==========
|
||
|
||
:ref:`If the payment provider supports this feature <payment_providers/online_providers>`, you can
|
||
add extra fees to online transactions. Fees can be configured either as **fixed** amounts and
|
||
percentages, **variable** amounts and percentages, or both simultaneously. They can also differ
|
||
based on whether the transaction is **domestic** or **international**.
|
||
|
||
To enable this feature, go to the :guilabel:`Fees` tab of the selected payment provider, enable
|
||
:guilabel:`Add Extra Fees`, and configure the settings to your liking.
|
||
|
||
.. note::
|
||
Fees are calculated on the tax-included price.
|
||
|
||
Availability
|
||
============
|
||
|
||
You can adapt the payment provider's availability by specifying the :guilabel:`Maximum Amount`
|
||
allowed and modifying the :guilabel:`Currencies` and :guilabel:`Countries` in the
|
||
:guilabel:`Configuration` tab.
|
||
|
||
.. _payment_providers/currencies_countries:
|
||
|
||
Currencies and countries
|
||
------------------------
|
||
|
||
All payment providers have a different list of available currencies and countries. They serve as a
|
||
first filter during payment operations, i.e., the payment methods linked to the payment provider are
|
||
not available for selection if the customer's currency or country is not in the supported list. As
|
||
there might be errors, updates, and unknowns in the lists of available currencies and countries,
|
||
adding or removing a payment provider's supported currencies or countries is possible.
|
||
|
||
.. note::
|
||
|
||
- :ref:`Payment methods <payment_providers/payment_methods>` also have their own list of
|
||
available currencies and countries that serves as another filter during payment operations.
|
||
- If the list of supported currencies or countries is empty, it means the list is too long to be
|
||
displayed, or Odoo does not have information on that payment provider. The payment provider
|
||
remains available, even though it is possible the payment will be refused at a later stage
|
||
should the country or currency not be supported.
|
||
|
||
Maximum amount
|
||
--------------
|
||
|
||
You can restrict the :guilabel:`Maximum Amount` that can be paid with the selected provider. Leave
|
||
the field to `0.00` to make the payment provider available regardless of the payment amount.
|
||
|
||
.. important::
|
||
This feature is not intended to work on pages that allow the customer to update the payment
|
||
amount, e.g., the **Donation** snippet and the **Checkout** page when paid :doc:`shipping methods
|
||
<../websites/ecommerce/checkout_payment_shipping/shipping>` are enabled.
|
||
|
||
.. _payment_providers/journal:
|
||
|
||
Payment journal
|
||
===============
|
||
|
||
A :doc:`payment journal <accounting/bank>` must be defined for the payment provider to record the
|
||
payments on an **outstanding account**. To do so, go to the :guilabel:`Configuration` tab of the
|
||
selected payment provider and select a :guilabel:`Payment Journal`.
|
||
|
||
.. note::
|
||
- The payment journal must be a :guilabel:`Bank` journal.
|
||
- The same journal can be used for several payment providers.
|
||
|
||
Accounting perspective
|
||
----------------------
|
||
|
||
From an accounting perspective, there are two types of online payment workflows: the payments that
|
||
are directly deposited into your bank account and follow the usual :doc:`reconciliation
|
||
<accounting/bank/reconciliation>` workflow, and those coming from third-party :ref:`online payment
|
||
providers <payment_providers/online_providers>` and require you to follow another accounting
|
||
workflow. For these payments, you need to consider how you want to record your payments' journal
|
||
entries. We recommend you ask your accountant for advice.
|
||
|
||
By default, the :guilabel:`Bank Account` defined for the :ref:`payment journal
|
||
<payment_providers/journal>` is used, but you can also specify an :ref:`outstanding account
|
||
<bank/outstanding-accounts>` for each payment provider to separate the provider's payments from
|
||
other payments.
|
||
|
||
.. image:: payment_providers/bank_journal.png
|
||
:alt: Define an outstanding account for a payment provider.
|
||
|
||
.. seealso::
|
||
- :doc:`payment_providers/wire_transfer`
|
||
- :doc:`payment_providers/adyen`
|
||
- :doc:`payment_providers/alipay`
|
||
- :doc:`payment_providers/authorize`
|
||
- :doc:`payment_providers/asiapay`
|
||
- :doc:`payment_providers/buckaroo`
|
||
- :doc:`payment_providers/demo`
|
||
- :doc:`payment_providers/mercado_pago`
|
||
- :doc:`payment_providers/mollie`
|
||
- :doc:`payment_providers/ogone`
|
||
- :doc:`payment_providers/paypal`
|
||
- :doc:`payment_providers/razorpay`
|
||
- :doc:`payment_providers/sips`
|
||
- :doc:`payment_providers/stripe`
|
||
- :doc:`../websites/ecommerce/checkout_payment_shipping/payments`
|
||
- :doc:`accounting/bank`
|