Moodle paid enrolment with PayPal and Stripe

A practical guide to selling Moodle courses with enrolment on payment, choosing between the core PayPal gateway and the community Stripe plugin, and what to check before go-live.

On this page

How Moodle paid enrolment with PayPal and Stripe works

Moodle takes payment through a payment gateway at the point of enrolment, and the two supported options are the core PayPal gateway and the community Stripe gateway, paygw_stripe. An organization that sells courses from its own Moodle configures a gateway account, sets a price and currency on each paid course, and lets the learner pay before a student role is assigned. The integration therefore covers four things: the enrolment method that offers the course for sale, the gateway account that receives the money, the price and currency settings for each course, and the enrolment that Moodle writes after a successful payment. Confirm the exact core setting names and menu paths against the Moodle version you run, because they can change between releases.

The enrolment method is the part of the setup that most affects how courses behave. A paid course needs its own enrolment instance on the course, with a cost and a currency, and that instance is separate from any self-enrolment or manual enrolment already in place. Decide early which courses are paid, which stay free, and whether free courses need a different route to sign-up. Also check that the currency on each course matches the currency your gateway account settles in. A mismatch is easy to miss during setup and difficult to explain to learners later. Keep a written list of courses, prices and currencies, since it becomes the reference for finance and for later audits of enrolments.

The gateway account is a decision in its own right. The Stripe gateway plugin, maintained by Alex Morris, connects Moodle to Stripe to collect payments through providers such as credit cards, Alipay and Sofort, and its plugin directory listing states support for Moodle 4.1 to 5.3. Which payment methods a learner can actually see depends on your Stripe account, your country and the currency, so check the provider list in your own account before you promise payment options in course descriptions. Because paygw_stripe is community maintained, confirm its compatibility with your exact Moodle release before any upgrade. For the core PayPal gateway, confirm which account types and regions your version supports.

The enrolment written after payment is the control that finance and course administrators will check first. The learner pays at the gateway, returns to Moodle, and the enrolment should appear only when the gateway confirms the payment. Test this with the gateway's sandbox or test mode before any real learner is involved. For each paid course, run one successful purchase, one cancelled payment and one declined payment. Confirm that the successful purchase creates the enrolment with the expected role and end date, and that the other two leave no enrolment behind. Record the results. Tax treatment and refund handling are separate decisions and need their own review before the first sale.

What you need in place before configuring payments

Paid enrolment depends on decisions made before anyone opens the payment settings. The Moodle release, its server stack, the public address that gateways call back to, and the merchant accounts each constrain the others. Work through these five items in order and record the answers, because the gateway configuration in later steps assumes them.

Moodle release and upgrade path

Choose the Moodle release before choosing the payment plugin, because each release sets its own PHP, database and web server requirements. Moodle 4.5 is a long-term support release with security support until 4 October 2027, and Moodle 5.3 is the next long-term support release with security support until 1 October 2029. If you are upgrading an existing site, confirm the starting version: sites must be on Moodle 4.2.3 or later to upgrade to 5.1, and on 4.4 or later to upgrade to 5.3.

PHP and database versions

These follow the release you choose, so take them from the notes for that release and check them against the stack you already run. Moodle 5.1 requires 64-bit PHP 8.2 or later, with 8.3 and 8.4 supported, and PostgreSQL 15, MySQL 8.4, MariaDB 10.11 or SQL Server 2017 or later. Moodle 5.3 requires 64-bit PHP 8.3 or later, with 8.4 supported, and PostgreSQL 17, MySQL 8.4, MariaDB 11.4 or SQL Server 2019 or later. Confirm that your hosting platform offers these versions.

Web server document root for Moodle 5.1 and later

From Moodle 5.1, the web server document root must point to the new /public directory inside the Moodle code folder. If it does not, the site may show directory listings or errors. Set this in the web server configuration for the virtual host, and include it in the deployment steps for staging and production so payment tests run against the same layout as the live site.

HTTPS and a public callback address

PayPal and Stripe send payment notifications to Moodle over the internet, so the site needs a public HTTPS address that the gateways can reach. Confirm that the certificate is valid, that the hostname resolves publicly, and that firewalls, reverse proxies and web application filters allow gateway requests to reach the Moodle endpoints. Test the callback path in the sandbox or test environment each gateway provides before going live, and record who can change the address if it moves.

PayPal business account

The core PayPal gateway needs a PayPal business account to receive course fees. Before configuring it, confirm with your finance team which legal entity owns the account, the currency it will settle in, and the country it is registered in. These details must match the entity that issues invoices and receives the money. Also confirm who holds the account login, so that access to the payment settings is controlled.

Stripe account and plugin range

The community Stripe gateway (paygw_stripe, maintained by Alex Morris) supports Moodle 4.1 to 5.3, so confirm that your release falls within that range before installing it. Create or confirm the Stripe account under the entity, currency and country that finance has approved, and check which payment methods your account and currency allow. Plugin support depends on the Moodle version, so recheck the plugin directory before each upgrade.

How a payment turns into a course enrolment

The enrolment only happens after the gateway confirms payment, so the order of steps matters when you test and support a paid course. A learner selects a paid course and sees the fee set on the course's enrolment on payment method. When they continue, Moodle creates a payment record and hands the order to the gateway the course is configured to use. The learner completes payment on the provider's side. The gateway reports the outcome back to Moodle, and Moodle records the payment and enrols the user with the role and duration set on that enrolment instance. For each gateway, run one test order and check all three results: the payment record, the enrolment and the assigned role.

The core PayPal gateway ships with Moodle, so it needs no extra plugin and is the simplest baseline to test first. The community Stripe gateway is a separate plugin, paygw_stripe, maintained by Alex Morris. You install it, configure it and keep it current with each Moodle upgrade. Its plugin directory listing says it supports Moodle 4.1 to 5.3 and describes collecting payments through providers such as credit cards, Alipay and Sofort. Those are options the Stripe connection can offer, so the plugin's compatibility with your Moodle version is a check you make before you choose it, not a detail to resolve after go-live. Confirm both gateways' current status with your Moodle version before you commit to either.

Before you promise any payment method on a course page, confirm that your gateway account actually accepts it. Check the provider's documentation, then check your own Stripe or PayPal account for the country you operate in and the currency you charge. A plugin listing describes what the connector can offer, not what your account will accept at checkout. Test every method you plan to advertise, using the provider's sandbox or a low-value live order where that is allowed, and record which methods appeared. Ask the team writing learner-facing copy to name only the methods you have confirmed. Also record who holds the gateway credentials in Moodle and who can change them.

Plan two failure paths before go-live. The first is a payment that completes at the provider but does not return the learner to Moodle, because the browser closes or the connection drops. Confirm with your chosen gateway and Moodle version how a confirmed payment is matched to an enrolment in that case, and test it with a deliberately interrupted order. The second is an upgrade that changes Moodle's version while the community plugin lags behind. Schedule a check of plugin compatibility before each Moodle upgrade, and keep a test order in your release checklist so that a broken payment path is found in staging, not by a learner.

Configuring the payment accounts and enrolment in sequence

This sequence takes a paid enrolment setup from a test environment to a verified test purchase. Each step closes with a check, so faults are found before any live gateway account or learner is involved. Menu paths and field names change between Moodle versions, so confirm each one in the release documentation for your version.

  1. Enable the payment subsystem and gateway

    Work in a test copy of your Moodle site, not production. Enable the payment subsystem in site administration, then enable the gateway you have chosen, either the core PayPal gateway or Stripe. Set the account currency and any payment settings the subsystem asks for, and confirm where these settings sit in the release documentation for your Moodle version. Check: the gateway shows as enabled in the payment gateways list, and it is offered as an option when a test course is set up for payment.

  2. Create and verify the gateway account

    Create a PayPal or Stripe account for testing and use the test environment each provider offers. Complete the identity and bank steps the provider requires for the account to be active, and record which person or team owns the test credentials. Check: the provider dashboard shows the account as active in test mode, and you can sign in with the account that will receive test payments. Keep live credentials out of Moodle until the test purchase in the final step has passed.

  3. Install and configure paygw_stripe

    Skip this step if you use the core PayPal gateway. For Stripe, install the paygw_stripe plugin, maintained by Alex Morris, which supports Moodle 4.1 to 5.3. Confirm that the download matches your Moodle release, and install it on the test site first. Then open its settings and confirm that the payment methods you intend to offer, such as credit cards, Alipay or Sofort, are available in your Stripe account and region. Check: the plugin appears in the installed plugins list with no version warnings, and its settings page loads without errors.

  4. Set credentials and notification endpoints

    Copy the test API credentials from the provider dashboard into the gateway settings in Moodle, and leave the live credential fields empty. Register the webhook or notification endpoint that the provider uses to report payment results to Moodle, using the address shown on the gateway settings page. Confirm the endpoint requirements, including whether HTTPS is mandatory and which events to subscribe to, in the release documentation and the provider's own documentation. Check: the provider dashboard shows the endpoint as registered, and a test event is delivered and accepted by Moodle.

  5. Configure the fee enrolment method on a test course

    In a test course, add the fee enrolment method from the course's enrolment methods page. Set the price, the currency and the enrolment duration, and choose which gateways learners will see. Keep the currency identical to the currency on the gateway account, because a mismatch can cause failed or confusing checkouts. Check: the enrolment methods page lists the fee method as enabled, and a logged-out preview of the course shows the price and the payment option on the enrolment page.

  6. Run a test purchase and confirm enrolment

    Create a test learner account, enrol in the paid course and complete checkout using the test payment details the provider publishes for its test mode. Then check both systems. The test payment should appear in the provider dashboard with the amount and currency you set. In Moodle, the learner should be enrolled for the duration you configured, and the payment record should appear in Moodle. If either side is missing, recheck the notification endpoint from the previous step before repeating the purchase. Only after this test passes should live credentials be entered, as a separate change that is reviewed on its own.

Which Moodle and gateway records must match

This table lists the Moodle and gateway records a finance or support team will search when reconciling a paid enrolment, and the field that ties each payment to a user and course. Read each row as a pair: the Moodle value on the left side of the record and the gateway value that should agree with it. Where a field differs, the row explains what to check before anyone changes an enrolment.

RecordMoodle sideGateway side (PayPal or Stripe)
Course identityCourse ID (shortname and numeric ID) and the enrolment instance that holds the priceItem or product description, and any metadata the plugin sends with the payment
Payment link to user and courseUser ID and course ID stored with the pending payment recordCustom reference or metadata field carrying the same user and course IDs, which must be returned in the payment notification
Transaction referencePayment record ID in Moodle, linked to the enrolmentGateway transaction or payment intent ID, which should be stored against the Moodle payment record
Customer emailEmail on the Moodle user account used at checkoutPayer or customer email; a mismatch is common when learners pay from a shared or work address
AmountPrice configured on the enrolment method, with any discount or tax appliedCaptured amount, including tax and fees shown separately if the gateway reports them
CurrencyCurrency set for the course and the payment accountSettlement and charge currency; confirm the gateway account accepts the course currency
StatusPayment record status (pending, completed or failed) and enrolment statusGateway status (succeeded, pending, failed, refunded or disputed) for the same transaction ID
Enrolment roleRole assigned on enrolment (usually student) and the enrolment start and end datesNot stored in the gateway; confirm the role is set by the enrolment plugin, not by the payment record

What to check on tax, invoicing and refunds before go-live

Moodle and the payment gateway collect the money, but neither decides how a sale is taxed. Before go-live, settle the tax questions with your organization's tax adviser and write the answers down. The first question is whether the prices you enter in the course enrolment settings include tax or exclude it, because that changes what the learner pays and what you must report. The second is which rate applies by learner location. A learner's country, and sometimes their status as a business or consumer, may change the rate or whether you must register in that jurisdiction at all. Ask the adviser to confirm the currency you charge in and how amounts are converted, since the gateway and Moodle may each record a different figure.

Next, decide who issues invoices and receipts. The options are Moodle, the gateway's own receipt, or a document produced by your accounting system. A gateway receipt is usually a proof of payment, not necessarily a tax invoice, so confirm what the adviser requires on the document, including tax shown separately and sequential numbering. Then agree how the sale is recorded in accounting: which ledger accounts receive the revenue and tax, how gateway fees and payouts are reconciled against Moodle enrolments, and how refunds and disputes appear in the books. Ask your accountant to trace one test purchase from the learner's checkout through to the ledger entry.

Refunds need the most careful planning. A refund issued in PayPal or Stripe does not automatically remove the Moodle enrolment, so a learner may keep course access after the money has gone back. Write down the revocation process before launch: who approves a refund, who removes or suspends the enrolment, whether that happens by hand or through an automated step, and what happens to grades, completion records and certificates. Also define how chargebacks and disputes are handled, since they reverse a payment without a refund request from the learner. Name an owner for each step so no one assumes another team has done it.

Test the whole path in a non-production environment before taking real payments. Run a purchase, a full refund and a simulated dispute, then check the enrolment status, the payment record in Moodle, the gateway record and the accounting entry for each. Confirm the refund and cancellation behavior of the chosen gateway and enrolment method in the exact Moodle version you run, because gateway plugins and provider APIs change over time. For example, the community Stripe gateway plugin lists support for Moodle 4.1 to 5.3 in the Moodle plugins directory, so check that range against your version and record the result as part of your go-live sign-off.

Securing the payment settings and gateway credentials

Paid enrolment is only as trustworthy as the keys, accounts and settings behind it. The controls below cover how gateway credentials are kept, who can change payment configuration, and how the site stays patched, encrypted and logged. Together they define what your Moodle site is responsible for and what stays with the gateway.

Protecting gateway API keys

The PayPal and Stripe credentials that Moodle stores allow it to take payments, so treat them as secrets. Create keys with the narrowest permissions the gateway offers, keep them out of course content and shared documents, and check whether they appear in site backups, support bundles or debug output. Rotate them when a staff member with access leaves, and confirm with each gateway how revocation works before you need it.

Limiting who edits payment settings

Two kinds of setting need separate control: the payment accounts that connect Moodle to PayPal or Stripe, and the enrolment fee settings that course staff can apply to individual courses. Assign the capabilities that manage payment accounts to a small group of site administrators, and decide whether course managers may set fees at all. Confirm the exact capability names in your Moodle version before you write the role policy, then review those assignments on a schedule and after staff changes.

Keeping Moodle and the plugin patched

Moodle and the Stripe plugin must both stay on versions that still receive security fixes. Moodle 5.1 receives security support until 19 April 2027, Moodle 5.2 until 4 October 2027, and Moodle 4.5 LTS until 4 October 2027. The Stripe plugin lists support for Moodle 4.1 to 5.3, so confirm your release sits inside that range before each upgrade and test the payment flow on staging afterwards.

Enforcing HTTPS on payment paths

Enrolment pages, gateway return URLs and payment notification callbacks should all run over HTTPS. Set the site address to https, confirm that the callback address registered in the PayPal or Stripe dashboard matches the Moodle address exactly, and check that no page loads payment scripts or images over plain HTTP. Ask your network team to confirm that certificates renew automatically and that HTTP requests redirect to HTTPS.

Logging administrative changes

Changes to gateway settings, payment accounts, fee amounts and user roles should leave a record that someone can review. Confirm which payment configuration changes Moodle's logs capture in your version, and whether retention is long enough for your review cycle. Forward logs to your central logging platform where policy requires it, then test the setup by changing a fee and finding that change in the log.

Keeping card data at the gateway

Card numbers should be entered on PayPal or Stripe hosted payment pages, so Moodle receives only a payment status and a transaction reference. Any proposal to store card data on Moodle servers, capture card details in a custom form, or otherwise change this boundary must be reviewed with your compliance lead before work begins. Document the current payment flow first so that the review starts from accurate facts.

How to test a paid enrolment from purchase to access revocation

Test the full payment path before any learner sees the course for sale. A paid enrolment touches three records that can disagree: the payment record in the gateway, the payment record in Moodle, and the user's course access. Each test case below should check all three, because a purchase that succeeds at the gateway but never creates an enrolment is as much a defect as a free enrolment granted after a failed charge. Start by confirming which mode each gateway offers for testing. PayPal and Stripe both document sandbox or test environments, but the test card numbers, test account behavior, webhook or IPN delivery in test mode, and refund simulation differ, so take them from each gateway's own documentation and confirm them against your account before the first run. Run a successful purchase first, using a test account with no existing enrolment. Confirm the gateway shows a completed payment with the expected amount and currency, that Moodle's payment record is marked as paid and linked to the right course and user, and that the enrolment appears with the start and end dates configured for the paid course. Then run a failed payment and a cancelled checkout. Each should leave no active enrolment and no paid record, and the learner should see the course as still available for purchase. Run a duplicate attempt by submitting a second purchase for the same course while the first is pending, then again after it completes. Check that a learner is not charged twice for access they already hold and that Moodle does not create a second enrolment. Next, test a currency or price change. Change the course price or the currency in Moodle after one purchase has been made, then confirm that the earlier payment keeps its original amount and currency in both systems and that a new purchase uses the new values. Then issue a refund from the gateway dashboard and check whether the refund reaches Moodle. This depends on how the gateway plugin handles refund notifications, so confirm that behavior in the plugin documentation before you rely on it. If Moodle does not update automatically, record the manual step your operations team must take to revoke access. Finally, test the enrolment end date. Set a short test duration on a paid enrolment, let it expire or advance the test clock where your environment allows, and confirm that course access is removed at the configured end date and that the payment record remains intact for reporting. Keep a written test log that records the gateway transaction ID, Moodle payment ID, enrolment ID, and the observed access state for each case. Ask your gateway partner or internal reviewer to sign off that finance and support can trace any learner's payment through all three records.

Common payment and enrolment failures and how to fix them

This table lists the payment and enrolment failures support teams see most often on Moodle sites that sell courses through PayPal or Stripe. Each row gives the likely cause, the first check to run and the fix. Start with the callback and certificate rows when a payment succeeds but no enrolment appears, because most of these failures trace back to how the gateway reaches the site.

FailureLikely causeFirst checkFix
Payment succeeds but learner is not enrolledThe gateway confirmed payment, but Moodle did not receive or process the notification for that transactionFind the transaction ID in both the gateway and the Moodle payment records, and confirm whether a payment record existsConfirm scheduled tasks run and the enrolment method is enabled, then complete the enrolment from the stored payment record
Callbacks blocked by HTTPSThe gateway cannot reach the notification address because of an HTTP redirect, a firewall rule or a certificate it rejectsRequest the callback URL from outside your network and check the response code and any redirectsServe the site over valid HTTPS, allow the gateway's notification traffic at the firewall and remove redirects on the callback path
Certificate or proxy problemsA missing intermediate certificate, an expired certificate, or a reverse proxy that alters the host or protocol Moodle uses to build URLsTest the certificate chain with an external tool and compare the proxy headers with the site's configured web addressInstall the full certificate chain, renew expired certificates and set proxy headers and the site address to match the public address
Price mismatch between course and gatewayThe course price, the gateway product or price object, and any rounding rule are maintained in different placesCompare the course price in Moodle with the amount recorded on the gateway's payment for a test purchaseChoose one source for the price, correct the mismatched record and repeat a test purchase before reopening sales
Mixed currenciesA course is priced in a currency the gateway account does not settle in, or one account is shared across courses in different currenciesList the currency on each course and on each gateway account, including any test accountsAssign each course a currency that its gateway account supports and separate accounts where courses need different currencies
Plugin version mismatch after a Moodle upgradeThe payment gateway plugin was not updated for the new Moodle release, or it was left on a version outside its supported rangeCheck the plugin's supported Moodle range in the plugin directory, for example 4.1 to 5.3 for paygw_stripe, against your target versionUpgrade the gateway plugin to a release that lists your target Moodle version, and test a purchase on staging before go-live
Refunds leave active enrolmentsThe refund was issued at the gateway, but no step in Moodle suspended or removed the enrolmentLocate the enrolment and the matching payment record, and check whether a refund event reached MoodleSet a written refund process that suspends or unenrols the learner after the gateway refund is confirmed, and log the action

What paid enrolment costs and what it asks from your team

What drives the cost of paid enrolment in Moodle?

The cost follows the number of decisions the site must support. The main drivers are:

  • The number of payment gateways (PayPal, Stripe, or both)
  • The number of courses, price tiers, coupons and enrolment rules
  • The tax setup, including whether prices include tax and which jurisdictions apply
  • Integration with existing finance systems such as the ledger, invoicing or reconciliation tools
  • The testing scope, including refunds, failed payments and enrolment edge cases
  • Upgrades that touch the payment plugins

Each added gateway or price rule adds configuration and test cases. Ask the quote to price these items separately so you can see which decisions move the total.

Which parts of paid enrolment are one-time and which recur?

Configuration, testing and documentation are one-time work. Gateway fees and plugin maintenance recur. One-time work includes:

  • Gateway account setup and Moodle payment configuration
  • Course pricing and enrolment rules
  • Testing of purchases, refunds and failed payments
  • Written procedures for support staff and finance

Recurring costs include:

  • Transaction fees charged by PayPal or Stripe, paid to the provider and not to DeployOpen. Confirm current rates directly with the provider.
  • Maintenance of the payment plugin as Moodle releases change
  • Moodle upgrades, which need retesting of payment flows

Ask the quote to state whether a support retainer covers the recurring maintenance.

How long does scoping and configuring paid enrolment take?

The duration depends mostly on decisions made before configuration starts. Teams that settle gateways, currencies, price structure, tax treatment and refund policy in advance move through scoping quickly. Teams that decide these during the build add rework. Decisions that set the timeline:

  • Which gateways you will accept and which accounts they run under
  • Which courses are paid, and whether bundles or subscriptions are needed
  • The tax position confirmed by your accountant
  • The refund policy approved by legal and finance
  • Whether payments must post to an existing finance system

DeployOpen engagements are fixed-scope, so the timeline is agreed in writing before work starts. Ask for the timeline to list the decisions it assumes.

What does paid enrolment need from finance, legal and the LMS team?

Each group owns decisions that the configuration cannot make for them. Finance confirms the accounts that receive payouts, the chart of accounts for course revenue, how refunds are booked and how payments are reconciled each month. Legal approves terms of sale, the refund and cancellation policy, and any consumer-facing rules that apply in your markets, along with the data terms with each payment provider. The LMS team owns course structure, enrolment methods, cohorts, test accounts, the support process and the upgrade calendar.

If any of these owners is unavailable during scoping, the build will wait for their answers. Name a decision owner for each area before the quote is signed.

Can our own team set up paid enrolment without outside help?

A team can do it alone if it has working Moodle administration skills, access to the payment accounts, a test environment and a plan for maintaining the plugins after each upgrade. The configuration steps themselves are not the hardest part. The harder parts are:

  • Tax settings that match your legal position
  • Refund handling that also revokes or keeps enrolments correctly
  • Reconciliation between Moodle orders and provider payouts
  • Keeping a community plugin compatible across Moodle versions

If your team has none of these, a written scope with test cases and documentation gives you a repeatable result. If your team has them, the gap is usually time for testing and documentation.

Does the community Stripe plugin support my Moodle version?

Check the version range in the plugin directory before you choose a Moodle target. The Stripe payment gateway plugin (paygw_stripe), maintained by Alex Morris, lists support for Moodle 4.1 to 5.3 and connects Moodle to Stripe for payment methods such as credit cards, Alipay and Sofort. Points to confirm:

  • Whether your target release is inside the listed range
  • The PHP and database versions that release requires. Moodle 5.3 requires 64-bit PHP 8.3 or later and PostgreSQL 17, for example.
  • The minimum Moodle version you must be on before upgrading to the target
  • Whether the plugin is updated for the release you plan to run next

Re-test the payment flow after every Moodle upgrade, even when the plugin reports compatibility.

What should we check for tax and refunds before paid enrolment goes live?

Confirm the tax treatment with your accountant before testing starts, because the site can only apply rules you have decided. Tax checks include:

  • Whether course prices include tax, and how the gateway and Moodle each record it
  • Which jurisdictions and tax rates apply to each course
  • How tax appears on receipts and invoices

Refund checks include:

  • Whether a refund in the provider dashboard also removes the Moodle enrolment
  • Who may issue refunds, and whether that happens in Moodle or the provider
  • How partial refunds and chargebacks are recorded
  • Test cases for each path, run in a sandbox account before go-live

Document the answers so that support staff and finance use the same process.

What should a written quote for paid enrolment include?

A useful quote lists the scope in terms the buyer can check. Ask for the following in writing:

  • The gateways in scope and the Moodle version they target
  • The number of courses, price rules and enrolment paths covered
  • The tax and refund rules the build will implement, and who approved them
  • The finance integration in scope, or a statement that it is excluded
  • The test cases, test environment and sign-off steps
  • The documentation handed over for administrators and support staff
  • The upgrade support and any retainer for recurring maintenance
  • Items the provider does not cover, such as transaction fees and accountant advice

DeployOpen fixed-scope work is agreed in writing before it starts, so this list is the basis for comparing offers.

How DeployOpen scopes and delivers paid enrolment in your Moodle

DeployOpen plans, implements, configures and supports Moodle paid enrolment with PayPal and Stripe inside your own infrastructure. Each engagement starts from a written, fixed scope that names the payment accounts, Moodle version and courses involved. Tax treatment and refund rules stay with your finance and legal teams, and we configure the Moodle side to match the rules they set.

How we scope

  • The written scope states which gateways you need, PayPal core, the community Stripe plugin, or both.
  • Scope lists the Moodle version, PHP and database versions, and the hosting environment payments will run in.
  • Scope records which courses, price points and enrolment rules are included, and who approves each one.

How we build

  • Configure gateway credentials, callback settings and a sandbox test account in your Moodle environment.
  • Set enrolment fees, currencies and payment accounts per course, then test enrolment on payment end to end.
  • Check the community paygw_stripe plugin against your Moodle version, since it supports Moodle 4.1 to 5.3.

How we hand over

  • Documentation covers gateway setup, the courses and fees configured, and steps to rotate credentials.
  • A tax and refund checklist lists questions for your finance team to confirm with your payment provider and advisers.
  • Test records cover successful purchases, declined payments, cancellations and refunds, with results kept for your records.

How we support

  • Ongoing support is available as a retainer, which can cover gateway updates and Moodle upgrades.
  • Plugin updates are reviewed before each Moodle upgrade, because community gateways depend on core version support.
  • Ask any quote to name the support hours, response process and who holds the gateway account keys.

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.