โ† Back to guides

How to Accept Credit Card Payments Through Odoo (Stripe, PayPal)

Accepting credit card payments through Odoo lets your customers pay invoices online, check out on your eCommerce store, and settle balances through the customer portal โ€” all without leaving your Odoo ecosystem. Odoo supports multiple payment providers out of the box, but Stripe and PayPal are the two most commonly used in Australia. This guide covers both.

Stripe vs PayPal โ€” which should you use?

Both work well with Odoo, but they serve slightly different needs:

  • Stripe โ€” Best for most Australian businesses. Clean checkout experience, supports Apple Pay and Google Pay, lower fees for domestic cards (1.75% + $0.30 per transaction), automatic reconciliation in Odoo, and strong API integration. Stripe is the recommended default.
  • PayPal โ€” Useful when customers specifically expect PayPal as an option, or if you sell internationally and want buyer protection branding. Fees are slightly higher (2.6% + $0.30 domestic, more for international). PayPal redirects customers to PayPal's site to complete payment.
  • Both together โ€” You can enable Stripe and PayPal simultaneously. Customers choose their preferred method at checkout.
๐Ÿ’ก

For most Australian B2B businesses, Stripe alone is sufficient. Add PayPal only if your customers ask for it or you sell B2C internationally.

Part 1: Setting up Stripe in Odoo

Step 1: Create a Stripe account

  • Go to stripe.com and create an account if you don't have one
  • Complete Stripe's business verification โ€” you'll need your ABN, business address, and bank account details for payouts
  • Stripe will review your account. Most Australian businesses are approved within 1โ€“2 business days
  • Make note of whether you're in Test mode or Live mode โ€” start with Test mode for configuration

Step 2: Enable Stripe in Odoo

  • Go to Accounting โ†’ Configuration โ†’ Payment Providers (or Website โ†’ Configuration โ†’ Payment Providers if using eCommerce)
  • Find Stripe in the list and click on it
  • Set the State to "Enabled"
  • Click "Connect Stripe" โ€” this uses Stripe Connect and is the easiest method. Odoo will redirect you to Stripe to authorise the connection
  • Alternatively, you can enter API keys manually: go to your Stripe Dashboard โ†’ Developers โ†’ API Keys, and copy the Publishable Key and Secret Key into Odoo
โ„น๏ธ

Use Stripe Connect (the "Connect Stripe" button) whenever possible. It handles API key rotation and webhook setup automatically. Manual API key entry is only needed for specific hosting setups.

Step 3: Configure Stripe settings

  • Payment Journal โ€” Select or create a bank journal for Stripe payments (e.g., "Stripe" with type "Bank"). This is where payments are recorded before you transfer them to your main bank account.
  • Allowed Currencies โ€” Add AUD. You can also add other currencies if you sell internationally.
  • Payment Form โ€” Choose between "Redirect to Stripe" (Stripe Checkout) or "Payment from Odoo" (Stripe.js embedded form). The embedded form keeps customers on your site.
  • Capture Amount โ€” "Capture Immediately" is standard. Use "Authorize & Capture Later" only if you need to verify orders before charging (e.g., high-value goods).
  • Enable tokenisation โ€” Check "Allow Saving Payment Methods" if you want customers to save their card for future payments.

Step 4: Set up webhooks

Webhooks allow Stripe to notify Odoo about payment events (successful charges, refunds, disputes):

  • If you used Stripe Connect, webhooks are configured automatically โ€” skip this step
  • If you entered API keys manually: go to Stripe Dashboard โ†’ Developers โ†’ Webhooks
  • Add an endpoint: https://yourdomain.com/payment/stripe/webhook
  • Select events: payment_intent.succeeded, payment_intent.payment_failed, charge.refunded, checkout.session.completed
  • Copy the Webhook Signing Secret and paste it into Odoo's Stripe configuration

Step 5: Test a Stripe payment

  • Make sure Stripe is in Test mode (toggle in Stripe Dashboard)
  • Create a test invoice in Odoo and send it to a customer (or yourself)
  • Click the payment link in the invoice email
  • Use Stripe's test card: 4242 4242 4242 4242, any future expiry, any CVC
  • Verify the payment appears in Odoo with status "Paid" and a journal entry is created
  • Once confirmed, switch Stripe to Live mode and reconnect or update API keys

Part 2: Setting up PayPal in Odoo

Step 1: Create a PayPal Business account

  • Go to paypal.com/au and sign up for a Business account (not Personal)
  • Complete PayPal's business verification with your ABN and bank details
  • Go to PayPal Developer Dashboard and create a REST API app
  • Copy the Client ID and Client Secret for both Sandbox and Live environments

Step 2: Enable PayPal in Odoo

  • Go to Accounting โ†’ Configuration โ†’ Payment Providers
  • Find PayPal in the list and click on it
  • Set the State to "Enabled"
  • Enter your PayPal Email Address (the one linked to your PayPal Business account)
  • Enter the Client ID and Client Secret from the PayPal Developer Dashboard
  • Set the Payment Journal to a dedicated PayPal bank journal

Step 3: Configure PayPal settings

  • PDT Identity Token โ€” In PayPal, go to Account Settings โ†’ Website Payments โ†’ Website Preferences. Enable Payment Data Transfer and copy the Identity Token into Odoo.
  • Allowed Currencies โ€” Add AUD and any other currencies you accept
  • Fees โ€” PayPal can optionally add fees on top of the invoice amount. Most businesses absorb the fee (do not pass it to the customer)
โš ๏ธ

Under Australian Consumer Law, you can pass on credit card surcharges to customers, but they must not exceed the actual cost of processing the payment. If you enable surcharging, ensure it's compliant.

Step 4: Test a PayPal payment

  • Set PayPal to Sandbox mode in Odoo (or use Sandbox API credentials)
  • Create a test invoice and open the payment link
  • Log in with a PayPal Sandbox buyer account to complete the payment
  • Verify the invoice is marked as "Paid" in Odoo
  • Switch to Live credentials when ready to accept real payments

Enabling payments on customer invoices

Once your payment provider is configured, invoices automatically include a "Pay Now" button:

  • When you send an invoice by email, the email includes a link to the customer portal
  • In the portal, the customer sees the invoice with a "Pay Now" button
  • They select their payment method (Stripe, PayPal, or both if you've enabled both)
  • After payment, the invoice is automatically reconciled in Odoo โ€” no manual matching needed
  • To ensure this works, go to Accounting โ†’ Configuration โ†’ Settings and confirm "Customer Portal" is enabled

Enabling payments on eCommerce (Website)

  • If you use Odoo Website / eCommerce, payment providers are automatically available at checkout
  • Go to Website โ†’ Configuration โ†’ Payment Providers to verify your providers are enabled for the website
  • Check the "Website Published" checkbox on each provider you want visible at checkout
  • Test a full checkout flow: add a product to cart, proceed to checkout, pay with Stripe or PayPal

Handling refunds

  • Stripe refunds โ€” Create a credit note in Odoo. If the original payment was via Stripe, you can initiate the refund directly from Odoo (Odoo sends the refund request to Stripe via API). The refund appears in both Odoo and Stripe.
  • PayPal refunds โ€” PayPal refunds are typically processed from the PayPal dashboard. You'll need to create a matching credit note in Odoo manually to keep your books aligned.
  • Always reconcile refunds against the original payment to keep your accounting clean

Reconciling payment provider balances

Stripe and PayPal hold funds before paying them out to your bank account. This creates a reconciliation step:

  • Payments initially post to your Stripe/PayPal journal in Odoo (an intermediary bank account)
  • When Stripe/PayPal sends the payout to your actual bank account, you'll see the deposit on your bank statement
  • Reconcile the bank statement deposit against the outstanding balance in the Stripe/PayPal journal
  • Stripe payouts are typically daily (T+2 in Australia). PayPal can be set to auto-withdraw daily or manually.
  • Keep the Stripe/PayPal journal balance close to zero โ€” a growing balance means payouts aren't being reconciled
๐Ÿ’ก

Set up bank feeds for your main bank account (via Basiq or your bank's direct feed) so payout deposits are imported automatically. This makes reconciliation much faster.

Accounting for payment processing fees

  • Stripe and PayPal deduct their fees before paying out to your bank. For example, a $110 invoice payment with a 1.75% + $0.30 Stripe fee results in a $107.78 payout.
  • Create an expense account for payment processing fees (e.g., "Payment Processing Fees" under Cost of Sales or Administrative Expenses)
  • When reconciling the payout, record the fee difference as an expense against this account
  • Odoo can be configured to handle this automatically via the payment provider's fees settings โ€” check the provider configuration for a "Fees" section
  • GST note: Payment processing fees from Stripe (Australian entity) include GST. You can claim the GST credit. PayPal fees may or may not include GST depending on the entity โ€” check your PayPal statements.

Common issues

  • "Pay Now" button not appearing โ€” Check that the payment provider is enabled, the state is not "Test", the journal is set, and the customer portal is enabled in Settings.
  • Payment succeeds in Stripe but Odoo doesn't update โ€” Webhook issue. Check that the webhook URL is correct and reachable. Look at Stripe Dashboard โ†’ Developers โ†’ Webhooks for failed delivery attempts.
  • Currency mismatch โ€” The invoice currency must be in the payment provider's allowed currencies list. Add AUD to the provider's allowed currencies.
  • Duplicate payments โ€” If a customer clicks "Pay" multiple times, Stripe's idempotency keys prevent duplicate charges. PayPal may not. Advise customers to wait for confirmation.
  • 3D Secure / SCA โ€” Stripe handles Strong Customer Authentication automatically for cards that require it. No extra configuration needed in Odoo.

Need help setting up payments?

We configure Stripe, PayPal, and other payment providers in Odoo regularly. Let us get your online payments running so you get paid faster.

Get in touch โ†’