Installation
Subscriptions and Memberships for J2Commerce is a separate add-on available from the J2Commerce Extensions Store. It is not included with the core J2Commerce 6 component.
Step 1: Go to www.j2commerce.com -> Apps.
Step 2: Locate Subscriptions and Memberships, click View Details, then Add to Cart -> Checkout.
Step 3: After purchase, go to My Downloads under your profile menu and find the app. Click Available Versions -> View Files -> Download Now.
Step 4: In the Joomla admin, go to System -> Install -> Extensions and upload the app_subscriptionproduct.zip package file.
Enable the App
Once installed, confirm the app is enabled.
Option A: Click the J2Commerce icon in the top-right corner -> Apps.
Option B: Go to Components in the left sidebar -> J2Commerce -> Apps.
Look for Subscription Products in the list. If the toggle shows a red X, click it to turn it into a green checkmark. Click the app's name to open its configuration.
Configuration Settings
Open J2Commerce -> Apps -> Subscription Products to reach these settings.
Basic
| Field | Description | Default |
|---|---|---|
| Enable Cron Log | Writes a log file every time the subscription cron runs. | Yes |
| Cron URL | A ready-made URL — index.php?option=com_j2commerce&task=cron.execute&command=appsubscriptionproduct&cron_secret=... — for external schedulers to hit on a timer. Click Change key to rotate the secret from J2Commerce's Configuration screen. | — |
| Queue Scan Interval (Minutes) | How often the subscription sweep runs when driven by J2Commerce's Process Queue scheduled task instead of the Cron URL. Requires a Process Queue task in System -> Scheduled Tasks with Queue Type set to subscription_renewal. | 60 |
| Accepted Payment Methods | Which payment methods can be used for subscription products. Only gateways that declare recurring-billing support appear in this list. Leave empty to allow all subscription-capable methods. | Empty (all allowed) |
| Restrict Payment Methods for Subscriptions | When a subscription is in the cart, show only subscription-compatible payment methods at checkout and hide the rest. | Yes |
| Allow Card Update | Always show the card-update option for supported payment gateways, including the guest one-time link. | No |
| Update Card Link Expiration | How long a guest card-update link stays valid before it expires. | 48 hours |
| Debug Logging | Writes verbose debug logs to administrator/logs/app_subscriptionproduct.php. Disable in production. | No |
Email Settings
| Field | Description | Default |
|---|---|---|
| Send New Subscription Email | Sends a welcome email when a new subscription is created. | Yes |
| Notify Before Expiration | Days before expiry to email the customer. Comma-separated, e.g. 3,2 sends emails 3 and 2 days before. | — |
| BCC To | Blind-copy address(es) for all subscription emails. Comma-separated for multiple. | — |
| Trial Ending Notification | Days before a trial ends to send a trial-ending-soon email. Set to 0 to disable. | 3 |
| Send Completed Renewal Email | Sends the standard order-completed email for each successful renewal, same as any regular order. Turn off to suppress it for renewals only — the subscription's own renewal-succeeded email is unaffected either way. | Yes |
| Email Renewal Notifications | Sends a reminder before the auto-renewal date. | No |
| Email Before Renewal | Days before renewal to send the reminder (comma-separated). Only shown when the setting above is on. | — |
| Email Notification Before First Renewal (From Trial) | Sends a reminder before a trial's first paid renewal. | No |
| Before First Renewal From Trial | Days before that first renewal to send it (comma-separated). Only shown when the setting above is on. | — |
| Add Email Templates | Two buttons: Import Joomla Editor Version and Import Visual Editor Version. Adds any missing subscription email templates using the Classic, Minimal, or Modern design and the chosen editor type. Existing content is preserved when re-importing. | — |
Display Settings
| Field | Description | Default |
|---|---|---|
| Template | Frontend rendering template — Bootstrap 5, UIkit, or Auto to inherit from the active menu item. | Auto |
| Show My Subscriptions Tab | Shows a Subscriptions tab on the My Profile page so customers can manage their subscriptions. | Yes |
| Show Duration | Shows the billing duration text next to the product price. | Yes |
| Duration Position | Where the duration text appears relative to the price — Below, Before, or After. | Below price |
| Duration Text | Phrasing style — "Every 2 weeks", "/2 weeks", or "Per 2 weeks". | Every |
| Show Single Value | When the billing cycle is exactly one period, shows the digit ("Every 1 week") instead of dropping it ("Every week"). | No |
| Show Sign-Up Fee | Shows the sign-up fee next to the product price. | Yes |
| Sign-Up Fee Position | Below, Before, or After the price. | Below price |
| Show Recurring Total | Shows the recurring total row in the cart and checkout. | Yes |
| Show Non-Recurring Total | Shows the non-recurring total row in the cart. | Yes |
| Show Recurring Amount | Shows the recurring amount in the cart. | Yes |
| Show Recurring Discount | Shows the recurring discount in the cart. | Yes |
| Show Next Renewal Date | Shows the next renewal date in the cart. | Yes |
| Renewal Date Format | PHP date format for the renewal date shown in the cart. Leave empty to inherit the global Date Format from J2Commerce Configuration. | Y-m-d |
| Show Renew Button | Shows a Renew button on the front-end subscription listing for expired/cancelled subscriptions. | No |
| Show Early Renew Button | Shows a Renew Now button on active subscriptions so the customer can pull the next charge forward. | No |
Renewal Settings
| Field | Description | Default |
|---|---|---|
| Renewal Discount (%) | Global renewal discount percentage applied to all subscription products. | — |
| Max Renewal Retries | Maximum retry attempts before the subscription is marked according to the Action When Retries Are Exhausted setting. | 3 |
| Renewal Retry Interval | Number of units between retry attempts. | 1 |
| Renewal Retry Period | Time unit for the retry interval — Hours, Days, Weeks, or Months. | Day(s) |
| Action When Retries Are Exhausted | What happens once retries run out: Mark Card Expired (default), Pause Subscription, or Cancel Subscription. | Mark Card Expired |
| Enable Manual Invoice Renewals | Lets renewals paid by an offline method (bank transfer, cash, money order) activate as soon as you mark the renewal order with that payment method's confirmed status, instead of following the retry-and-exhaust schedule. | No |
Testing Tools (optional)
An additional Testing Tools fieldset lets you turn on a safe testing harness — pick a payment plugin to test against, select or create a synthetic subscription, and trigger an immediate renewal without waiting for cron and without a live card. It writes its own debug log so you can see exactly what happened at each step. Leave this off on a live production store.
Setting Up a Subscription Product
A Simple Subscription
- Go to J2Commerce -> Catalog -> Products and create or edit a product.
- Set the Product Type to Simple Subscription.
- On the subscription tab, fill in:
- Subscription Price — the recurring charge.
- Sign-Up Fee — optional one-time charge, plus whether it applies on every purchase or only the first.
- Billing Frequency and Billing Period — e.g. "Every" + "Month" for monthly billing.
- Subscription Length — number of billing periods, or
0for a subscription that never expires. - Trial Length and Trial Period — optional free trial before the first real charge.
- Add To User Groups / Remove From User Groups — Joomla groups to add on activation or remove on expiry/cancellation.
- Keep renewal discount — carries a first-purchase coupon discount into every renewal.
- Disable Cancel — prevents the customer from canceling this subscription themselves.
- Click Save & Close.
A Variable Subscription
- Set the Product Type to Variable Subscription instead.
- Add a variant for each plan you want to offer (Monthly, Quarterly, Annual, and so on).
- Each variant gets its own Subscription Price, Subscription Length, Sign-Up Fee, user-group settings, and renewal-discount carryover — set independently per plan.
- Customers choose their plan on the product page before adding it to the cart.
How Customers Manage Their Subscriptions
Once Show My Subscriptions Tab is on, every logged-in customer sees a My Subscriptions section on their account page.
From there, a customer can:
- View details — next renewal date, status, billing schedule, and order history for that subscription.
- Cancel — available on active or in-trial subscriptions, unless the product has Disable Cancel turned on.
- Renew — available on expired or canceled subscriptions when Show Renew Button is enabled.
- Renew Now — pulls an active subscription's next charge forward, when Show Early Renew Button is enabled.
- Update Payment Information — pick a different saved card for gateways that support it, or follow the card-update flow for gateways that require a fresh checkout.
Guests or customers who can't log in can also use a one-time card-update link that you generate and copy or email to them from the admin subscription detail screen.
How Renewals, Retries, and Dunning Work
Subscriptions are processed by a background sweep, driven by either the Cron URL hit from an external scheduler or a Process Queue scheduled task (Queue Type: subscription_renewal) running inside Joomla's own task scheduler. Set up at least one of these so subscriptions actually renew and expire on time — without it, nothing happens automatically.
On each run, the sweep:
- Moves Future subscriptions to Active on their start date, refreshing user-group membership.
- Moves Active subscriptions to Expired once their billing periods are used up.
- Moves Canceled subscriptions to Expired once their paid-through date passes.
- Sends any due notification emails — expiry warnings, renewal reminders, trial-ending, first-renewal-from-trial.
- Charges due renewals against the saved payment method.
If a renewal charge fails, the subscription does not cancel immediately. It retries according to Max Renewal Retries and Renewal Retry Interval/Renewal Retry Period. Once retries are exhausted, the subscription is marked Card Expired, paused, or canceled, based on Action When Retries Are Exhausted.
Renewals paid through an offline payment method (bank transfer, cash, money order) skip the card-retry logic entirely when Enable Manual Invoice Renewals is on — the subscription activates as soon as you mark that renewal order with the method's confirmed status.
Subscription Emails
Fifteen lifecycle emails cover the full subscription journey: welcome, trial ending, trial converting to paid, renewal reminder, renewal succeeded, renewal failed, renewal retry, card expiring, card updated, paused, canceled, expired, and expiring soon.
Click Add Email Templates in the Email Settings tab, then choose:
- Import Joomla Editor Version — loads the templates using the standard Joomla HTML editor.
- Import Visual Editor Version — loads the templates using the drag-and-drop visual editor.
Pick one — importing both sends customers two copies of every subscription email. Each template is available in Classic, Minimal, and Modern designs, and can be edited afterward from J2Commerce's Email Templates screen like any other store email.
Managing Subscriptions in the Admin Area
Go to J2Commerce -> Subscriptions to reach the admin Subscriptions area.
From the list you can:
- Search by customer email, name, or product name.
- Filter by status — New, Active, Future, In Trial, Payment Failed, Card Expired, On Hold, Canceled, Expired.
- Export Subscriptions or Export Subscriptions with Orders to CSV.
Click into any subscription to see its full detail page: billing schedule, related and renewal orders, additional fees, payment information, and a complete history log of every status change, email sent, and note added. From here you can also change status manually, edit the billing schedule or renewal amount, add fees, and generate or email a card-update link.
Tips
- Set up the cron or scheduled task before going live. Without one of them running, subscriptions never move from Future to Active, never expire, and renewal emails never send.
- Turn on Restrict Payment Methods for Subscriptions if your store also sells one-time products through non-recurring gateways — it keeps customers from picking a payment method that can't actually be charged again later.
- Import Visual Editor templates unless you have a reason not to. It's the friendlier editing experience, and content carries over cleanly if you switch later.
- Give retries room to work. A one-attempt retry schedule barely differs from no retry at all — three attempts spread a few days apart catches far more temporary card issues.
Troubleshooting
Subscriptions never renew or expire on their own
Cause: Neither the Cron URL nor a Process Queue scheduled task is running.
Solution:
- Go to J2Commerce -> Apps -> Subscription Products -> Basic and copy the Cron URL.
- Either configure your server's scheduler (cron, Task Scheduler, or your host's cron-job tool) to hit that URL at least once a day, or
- Go to System -> Scheduled Tasks, add a Process Queue task, and set its Queue Type to subscription_renewal.
- Confirm Enable Cron Log is on, then check the log after the next scheduled run.
"No subscription payment plugin available" at checkout
Cause: No enabled payment method has declared support for recurring billing, or Accepted Payment Methods has been restricted to methods that aren't enabled.
Solution: Go to J2Commerce -> Payments -> Payment Methods and confirm at least one subscription-capable gateway is enabled. Then check Accepted Payment Methods in the Subscription Products settings — leave it empty to allow every subscription-capable method automatically.
A customer's card-update link says it's expired or invalid
Cause: Guest card-update links expire after the configured Update Card Link Expiration window, or after first use.
Solution: Generate a new link from the subscription's admin detail page and send it again. If the customer needs a permanent solution, ask them to log in and use Update Payment Information from their My Subscriptions tab instead.
Emails aren't being sent for subscription events
Cause: The subscription email templates were never imported, or the specific notification toggle is turned off.
Solution: Go to Email Settings and click Add Email Templates to import any missing templates. Then confirm the specific toggle for that email (for example, Email Renewal Notifications or Trial Ending Notification) is switched on.