Documentation

Find documentation for our Joomla extensions on this page.

JoomCourses - Payment Setup

JoomCourses takes payments by card through Stripe or PayPal, and also supports invoice requests and cash. You can disable payments entirely for free courses or if you handle payment outside your website.

Payment Options Overview

Payment Method Description
Stripe Card payments, plus Apple Pay, Google Pay and Link (plugin)
PayPal Online payment via PayPal (plugin)
Cash Payment A built-in method for offline/cash payments
Request Invoice Allows customers to request an invoice instead of paying online (plugin)
Disabled No payment required — registration only

Enabling or Disabling Payments

Disable All Payments

If your courses are free or you handle payments outside your website:

  1. Go to Components > JoomCourses > Configuration.
  2. Under General, set Disable Payment to Yes.
  3. The checkout will skip the payment step entirely. Users register and their application is created immediately.

Enable Cash Payment

  1. In Configuration > General, set Cash Payment to Yes.
  2. This adds a "Cash" option in the payment method selection during checkout.
  3. Cash payment applications are created with a "Pending" status until you manually change them to "Paid" in the admin.

Stripe Setup

Stripe is the way to take card payments. Customers pay on Stripe's own payment page and come back to your site, so card details never touch your server. Apple Pay, Google Pay, Link and any local payment methods you switch on in your Stripe Dashboard appear automatically.

You need a Stripe account (stripe.com). Stripe charges a fee per payment; JoomCourses does not.

Enabling the Stripe Plugin

The plugin installs disabled, so nothing changes on your site until you turn it on.

  1. Go to System > Plugins in the Joomla admin.
  2. Search for "stripe" and open JoomCourses - PaymentStripe.
  3. Set Status to Enabled.
  4. Leave Test Mode on Yes while you set everything up.

Adding Your Keys

  1. In Stripe, go to Developers > API keys with test mode switched on.
  2. Copy the secret key (it starts with sk_test_) into Test Secret Key.
  3. Save the plugin.

For the live keys later, use the same screen with test mode switched off.

A safer alternative: create a restricted key (rk_live_…) instead, allowing write access to Checkout Sessions and Refunds and read access to PaymentIntents and Charges. Joomla stores plugin settings as plain text, so a full secret key ends up in every database backup. A restricted key that leaks cannot move your balance or read your customer list.

Adding the Webhook

Stripe confirms payments by calling your site back. Without this step bookings stay unpaid.

  1. In the plugin settings, copy the address shown in Webhook URL.
  2. In Stripe, go to Developers > Webhooks and add it as an endpoint.
  3. Select these events: checkout.session.completed, checkout.session.async_payment_succeeded, checkout.session.async_payment_failed, checkout.session.expired, charge.refunded, payment_intent.payment_failed and charge.dispute.created.
  4. Stripe shows a signing secret starting with whsec_. Copy it into Test Webhook Signing Secret.
  5. Repeat for live mode when you go live, and put that secret in Live Webhook Signing Secret.

Your site must be reachable from the internet for this to work. A site on localhost cannot receive webhooks.

Stripe Settings

Setting Description
Test Mode Uses your test keys; no real money moves. Switch off only after a successful test payment
Test / Live Secret Key Your Stripe key for each mode
Test / Live Webhook Signing Secret The whsec_ secret Stripe shows when you add the endpoint
Webhook URL The address to register in Stripe — copy it, you cannot edit it
Button Text Wording on the payment button. The total is added automatically
Message Above the Button Optional text shown to the customer before they pay
Send Alerts To Where to email you about problems needing attention: duplicate payments, wrong amounts, partial refunds, disputes
Alert on Failed Payments Email you when a card is declined. Off by default — declines are common and the customer can just try again
Enable Logging Records what happens, with keys masked. Leave on: support will ask for it

Advanced settings — a description for the Stripe page, how long a checkout stays valid, checkout language, card statement text, and a guard that ignores events from another copy of your site — have sensible defaults and rarely need changing.

Testing

With Test Mode set to Yes, book a course and pay with Stripe's test cards:

Card number Result
4242 4242 4242 4242 Payment succeeds
4000 0000 0000 0002 Card declined
4000 0025 0000 3155 Asks for 3-D Secure authentication

Use any future expiry date and any 3-digit code. Check that the booking becomes Paid and that the payment appears in your Stripe Dashboard.

How Stripe Payment Works

  1. The customer chooses Stripe at checkout and clicks the payment button.
  2. They are taken to Stripe's payment page and pay there.
  3. Stripe notifies your site, which marks the booking Paid.
  4. The customer returns to their booking page on your site.

If the card is declined or the customer gives up, the booking stays payable so they can try again. Nothing is cancelled automatically.

Going Live

  1. Make a successful test payment first.
  2. Enter your live secret key and add the webhook endpoint in live mode.
  3. Set Test Mode to No.
  4. Make one real booking with a real card and refund it to confirm both directions work.

If something is not set up correctly — a missing key, or test keys with test mode off — the payment button is replaced by an explanation. Only administrators see the reason; customers see a short notice.

If a Payment Does Not Show Up

Symptom Usual cause
Customer paid but the booking is still unpaid The webhook endpoint is missing in Stripe, or its signing secret was not copied into the plugin
No payment button on the booking page Keys missing, or test keys used with Test Mode off. Log in as an administrator to see the reason
Nothing happens in Stripe Your site is not reachable from the internet, or your currency is not supported by Stripe

Switch Enable Logging on and check plg_joomcourses_paymentstripe.php in your Joomla log folder. Stripe also lists every attempt under Developers > Webhooks and Payments.

PayPal Setup

The PayPal payment plugin allows customers to pay online through PayPal.

Enabling the PayPal Plugin

  1. Go to System > Plugins in the Joomla admin.
  2. Search for "JoomCourses - PayPal Payment".
  3. Click on the plugin to open its settings.
  4. Set Status to Enabled.

Configuring PayPal

In the plugin settings, configure:

Setting Description
Business Email Your PayPal merchant email address (required)
Test Environment Enable for PayPal Sandbox testing; disable for live payments
Enable Logging Turn on transaction logging for troubleshooting
Message Custom message shown to users before they are redirected to PayPal

Testing with PayPal Sandbox

Before going live:

  1. Create a PayPal Sandbox account at developer.paypal.com.
  2. In the plugin settings, set Test Environment to Yes.
  3. Enter your Sandbox business email.
  4. Process test bookings to verify the payment flow.
  5. When everything works correctly, set Test Environment to No and enter your live PayPal business email.

How PayPal Payment Works

  1. The user fills out the checkout form and selects PayPal as the payment method.
  2. They are redirected to PayPal to complete payment.
  3. PayPal sends an Instant Payment Notification (IPN) back to your site.
  4. JoomCourses verifies the payment and automatically changes the application status to Paid.
  5. The user is redirected back to a "Thank You" page on your site.

If payment fails or is canceled:

  • The user is redirected to a "Payment Failed" page.
  • The application remains in Pending status.

Payment Logging

When logging is enabled, all PayPal transaction details are recorded. This is helpful for troubleshooting payment issues. Check the Joomla logs directory for payment log files.

Invoice Request Setup

The invoice request plugin allows customers to request an invoice instead of paying immediately. This is common for B2B or corporate bookings.

Enabling the Invoice Plugin

  1. Go to System > Plugins in the Joomla admin.
  2. Search for "JoomCourses - Request Invoice".
  3. Click to open the plugin settings.
  4. Set Status to Enabled.

Configuring Invoice Request

Setting Description
Message Custom message shown to users who select invoice payment

How Invoice Request Works

  1. The user selects "Request Invoice" as their payment method during checkout.
  2. The application is created with a Pending status.
  3. You receive the application in the admin and can generate an invoice through your accounting system.
  4. Once payment is received, manually change the application status to Paid.

Refunds

A booking that was paid through a gateway that supports refunds shows a Refund button when you open it.

  1. Go to Components > JoomCourses > Bookings and open the paid booking.
  2. Check the Payment panel, which shows the total, the payment method and the gateway reference.
  3. Click Refund and confirm.

The money is returned through the gateway and the booking is then marked Refunded, with reversing entries written to your financial figures. This cannot be undone.

Notes:

  • Only bookings with the status Paid can be refunded, and only the full amount.
  • If the gateway cannot be reached, nothing is changed and the booking stays Paid, so you can try again.
  • A refund you make directly in the Stripe Dashboard marks the booking Refunded here automatically.
  • Cash and invoice bookings have no button; change their status by hand once you have returned the money.

Payment Received Email

The booking confirmation goes out at checkout, before any money has arrived. To also email customers when their payment actually succeeds:

  1. Create an email template of the type Booking State Changed (see Email Templates).
  2. Go to Components > JoomCourses > Options.
  3. Choose it under Payment Received Email Template.

Leave it unset and no such email is sent.

Payment Processing Flow

The complete payment flow in JoomCourses:

  1. User browses courses and adds a course date to their cart.
  2. Checkout — User fills in their details and selects a payment method.
  3. Payment processing — Depending on the method:
  • Stripe: Customer pays on Stripe. The booking changes to Paid by itself.
  • Cash: Application created as Pending. Admin manually confirms payment.
  • PayPal: User redirected to PayPal. On success, status auto-changes to Paid.
  • Invoice: Application created as Pending. Admin follows up with invoice.
  • Disabled: Application created immediately with no payment step.
  1. Confirmation — User sees a success page. Confirmation email is sent (if configured).
  2. Admin review — Admin can view, manage, and update application statuses from the Applications list.

Multiple Payment Methods

When multiple payment methods are enabled, users see a selection of available methods during checkout. They choose their preferred method before completing the booking.

The available payment methods are determined by:

  • Which payment plugins are installed and enabled
  • Whether cash payment is enabled in the configuration
  • Whether payments are disabled globally

Tips

  • Always test first: Use Stripe test mode, or the PayPal sandbox, before accepting real payments.
  • Do not skip the webhook: Stripe bookings stay unpaid until the webhook address is registered in Stripe and its signing secret is saved in the plugin.
  • Use a restricted Stripe key: It limits the damage if your database backup ever leaks.
  • Keep logging on: It is the first thing support will ask for when a payment goes wrong.
  • Use invoice requests for corporate clients: Many organizations prefer to receive an invoice and pay by bank transfer.
  • Monitor pending applications: Regularly check for applications stuck in "Pending" status, which may indicate payment issues.

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.

Ok