Enrolment: Stripe Payment with SCA and Coupon

Maintained by Picture of DualCube TeamDualCube Team
Now avail the much-awaited coupon functionality while enrolling students in Moodle courses using a Stripe payment gateway for paid courses with Strong customer authentication (SCA). Stripe Receipt sent to customers for any successful transaction. This plugin will help the admins and webmasters to offer their students a percent-off or amount-off discount for the paid courses. This plugin helps admins and webmasters use Stripe as the payment gateway.
678 sites
40 fans
Current versions available: 2

Stripe Payment: 

Introducing the newest offering from Team Dualcube: Stripe Payment!

Now avail the much-awaited coupon functionality while enrolling students in Moodle courses using Stripe payment gateway for paid courses with Strong customer authentication (SCA).

This plugin will help the admins and webmasters to offer their students a percent-off or amount-off discount for the paid courses.

Stripe Payment:

1. Registered users can login to the Moodle site and happily apply the promo codes for a discount before payment. On successful payment, they can access the course.

2. Admins and Webmasters, now, can create, manage and keep track of all promotional codes directly in their Stripe dashboard.

3. Strong customer authentication (SCA) implemented with 4 layers of complex security to comply with EU Revised Directive on Payment Services (PSD2) on payment service providers within the European Economic Area.

4. The first of it's kind to use Payment intent method for Stripe-coupon. 

5. Works with all stable versions of Moodle till v 3.8.1

6. Latest Stripe SDK

Stripe Payment Documentation:

This plugin has all the settings for development as well as for production usage. Its easy to install, set up and effective.

Creating Merchant Account :

1) Create account at https://stripe.com.

2) Complete your merchant profile details from https://dashboard.stripe.com/account.

3) Now set up secret key and publishers key at https://dashboard.stripe.com/account/apikeys.

4) For test mode use test api keys and for live mode use live api keys.

Now you are done with merchant account set up.

Installation Guidance : 

Login to your moodle site as an “admin user” and follow the steps.

1) Upload the zip package from Site administration > Plugins > Install plugins. Choose Plugin type 'Enrolment method (enrol)'. Upload the ZIP package, check the acknowledgement and install.

2) Go to Enrolments > Manage enrol plugins > Enable 'Stripe' from list

3) Click 'Settings' which will lead to the settings page of the plugin

4) Provide merchant credentials for Stripe. Note that, you will get all the details from your merchant account. Now select the checkbox as per requirement. Save the settings.

5) Select any course from course listing page.

6) Go to Course administration > Users > Enrolment methods > Add method 'Stripe' from the dropdown. Set 'Custom instance name', 'Enrol cost' etc and add the method.

Adding coupons:

Go to your Stripe Dashboard >  Billing > Coupons > Create a coupon.

Type in the coupon’s name: it can be anything and for your reference only.
Type in the Coupon’s ID : This is the Coupon code which your students will need to enter if they want to avail the discount.

Choose Coupon Type: 
1. Percentage discount : offers % off on the course price 
2. Fixed amount discount : Offers a fixed amount off on the course price.

Duration: For duration, when using the value repeating, also specify duration in months as the number of months for which the coupon should repeatedly apply. Otherwise the coupon can be set to apply only to a single invoice or to them all.

Redemption : The max_redemptions and redeem_by values apply to the coupon across every customer you have. For example, you can restrict a coupon to the first 50 customers that use it, or you can make a coupon expire by a certain date. If you do the latter, this only impacts when the coupon can be applied to a customer. If you set a coupon to last forever when used by a customer, but have it expire on January 1st, any customer given that coupon will have that coupon’s discount forever, but no new customers can apply the coupon after January 1st.

If a coupon has a max_redemptions value of 50, it can only be applied among all your customers a total of 50 times, although there’s nothing preventing a single customer from using it multiple times. (You can always use logic on your end to prevent that from occurring.)


This completes all the steps from the administrator end. Now registered users can login to the Moodle site and view the course after a successful payment of the discounted price. 


Screenshot #0
Screenshot #1
Screenshot #2
Screenshot #3
Screenshot #4


Picture of DualCube Team
DualCube Team (Lead maintainer)
Please login to view contributors details and/or to contact them

Comments RSS


  • Picture of mark steem
    Fri, Dec 15, 2017, 1:58 PM
    Hi. Credit card works fine. If I add the code

    into the enrol.html it shows the Bitcoin Tab, but the payment isn't working
  • Picture of DualCube Team
    Fri, Dec 15, 2017, 4:57 PM
    Hi! Mark.
    Thanks for the prompt reply. Can you please let us know which error has occurred during the process of payment with bitcoin?
    Can you please share a screenshot with us?

    You can send it to admin@dualcube.com or suman.d@dualcube.com

    Always happy to help.
    Thank you.

  • Picture of Joxue Calzado
    Thu, Jan 18, 2018, 9:10 PM

    I have installed the plugin and activate for a course. I just wanted to see if the plugin works, without full configuration of the stripe account.
    Now i can see stripe icon in the course but when i click on the course it redirect to the login page instead of the stripe platform.

    My question is: if it is not working because i need to configure the mechant profile or because some error? i set up secret key and publishers key.

  • Picture of DualCube Team
    Fri, Jan 19, 2018, 8:09 PM
    Hi! Joxue
    Thanks for reaching out to us!
    Here is how you should do it:
    >>Please go to Site administration / ► Plugins / ► Enrolments / ► Stripe Payment / ► Fill up the fields Stripe Secret Key and Stripe Publishable Key with your test key then fill up all the fields as per your requirement / ► Click on the "Save changes" button.
    Then go to Dashboard / ► Your course / ► Users / ► Enrolment methods / ► Stripe Payment / ► Please fill up all the fields as per your requirement.

    Then logged in as an Authenticated user who is not enrolled in the course > go to that course page > click on the "Pay with Card" button.
    Thank you.
  • Picture of Joxue Calzado
    Thu, Feb 1, 2018, 4:19 AM
    now is working, thank you!

    i have another question, can i configure recurring payment as payment by month (like a suscription)?

  • Picture of DualCube Team
    Thu, Feb 1, 2018, 2:43 PM
    Hi! Joxue,
    Thanks for reaching out again.
    I am sorry to inform you that this feature is not present in our plugin yet but It can be done by Add-on development.

    Thank you.
  • Picture of Dnyaneshwar Somwanshi
    Wed, Mar 21, 2018, 5:04 PM
    it doesnot support Indian Currency(Rupees).
  • Picture of DualCube Team
    Thu, Mar 22, 2018, 5:15 PM
    Hi! Dnyaneshwar,
    Thanks for reaching out to us. This plugin offers enrolment in Moodle using Stripe payment gateway for paid courses. And, Stripe does not support INR, so it does not offer INR by default.

    Thank you.
  • Picture of Milena avila
    Mon, Apr 30, 2018, 8:53 AM
    ok im new here so how do I download your plugin?
  • Picture of DualCube Team
    Fri, May 4, 2018, 7:32 PM
    Hi!! Milena,
    This plugin is already in the Moodle plugin's directory, so you can just go to Dashboard / ► Site administration / ► Plugins / ► Install plugins ► Plugin installer ►Install plugins from the Moodle plugins' directory.
    On the search page, choose enrolment method from the plugin type drop-down and type stripe on the search bar. You will see the plugin.

    Else, go to https://github.com/dualcube/moodle-enrol_stripepayment
    and download the plugin.

    Thank you.
  • Picture of Noctis Yamazaki-Triendl
    Fri, May 25, 2018, 3:50 AM
    Hi there,

    This is Noctis.

    I am currently using Stripe for my payment system.

    However, when I try to install the plugin for Moodle 3.5 via Bitnami Azure, I am having to following errors.

    XML database file errors found

    More information about this error

    ×Debug info: Errors found in XMLDB file: PATH attribute does not match file directory: enrol/stripepayment/db
    Error code: ddlxmlfileerror
    ×Stack trace:
    line 352 of /lib/ddl/database_manager.php: ddl_exception thrown
    line 368 of /lib/ddl/database_manager.php: call to database_manager->load_xmldb_file()
    line 594 of /lib/upgradelib.php: call to database_manager->install_from_xmldb_file()
    line 1857 of /lib/upgradelib.php: call to upgrade_plugins()
    line 694 of /admin/index.php: call to upgrade_noncore()

    Is there anything I should do prior to installing to plugin?

  • Picture of DualCube Team
    Sat, May 26, 2018, 2:07 PM
    Hi!! Noctis
    Please do not remove install.xml. Then the database won't get updated.

    We have uploaded the latest version in here as well as on Moodle.org.
    Please install the latest version.

    Thank you.
  • Picture of Diane Villemure
    Mon, Jun 11, 2018, 4:11 PM
    In the charge.php file, there is the same $data-> item_name for three different parameters (item_name, item_number_quantity). Also, in the charge object: "description" => get_string('charge_description2', 'enrol_stripepayment'), the result: "Charge for Course Enrolment Cost." is not helpful since it doesn't specifiy what course the new enrolment applies to. I modified it to: "description" => 'Enrolment in: ' . required_param('item_name', PARAM_TEXT),
  • Picture of DualCube Team
    Mon, Jun 11, 2018, 5:27 PM
    Hi!! Diane,
    Thanks for the importance that you have given to our plugin. We will update those in our next update.
    Thank you.
  • Picture of Diane Villemure
    Tue, Jun 12, 2018, 3:04 AM

    In the enrol.html file, input variable "no_shipping" is set to 1 ( . No matter what value I change the 1 to (true, false, 2, 0) it doesn't trigger the shipping address in the Stripe checkout form. I have to add the parameter "data-shipping-address" in the "script" tag of enrol.html. Since I do not want to force user to enter their billing address but do need their shipping address for those courses where materials need to be sent, I coded the shipping parameter to read: data-shipping-address="?php if ($course->id == "16" or $course->id == "18" or ... etc) { echo 'true'; } else { echo 'false'; } ?" My question is, what does the hidden input variable no_shipping do when passed to charge.php?
Please login to post comments