WP Manifestindependent plugin directory
manifest / email / e20r-payment-warning-pmpro

Custom Payment Reminders for Paid Memberships Pro

Pluggable Payment Gateway email warnings (Upcoming payments, expiring payment methods, expiring memberships)

by Eighty / 20 Results by Wicked Strong Chicks, LLC <thomas@eighty20results.com> · github.com/eighty20results/e20r-payment-warning-pmpro · website

1stars
30release downloads
1forks

Install

The author publishes release zips, so WP-CLI can install straight from GitHub:

wp plugin install https://github.com/eighty20results/e20r-payment-warning-pmpro/releases/download/v5.0/e20r-payment-warning-pmpro-5.0.zip

Readme

=== Custom Payment Reminders for PMPro === Contributors: eighty20results Tags: eighty/20 results, pmpro, membership, recurring payment warning, paid memberships pro, membership management, payment warning, Requires at least: 4.8 Tested up to: 5.4 Stable tag: 5.1 PHP Version: 7.1 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html

Version: 5.1

Generates and sends notices to active Paid Memberships Pro members about their upcoming recurring payment, their expiring memberships, and required updates to their credit card information. The plugin receives its data directly from the supported payment gateway which makes it more reliable and consistent in sending email warnings/notices to your members.

== Description ==

Being a more reliable and up-to-date notification system than the standard Recurring Payment Email Reminder add-on for Paid Memberships Pro, the E20R Custom Payment Reminders for PMPro plugin will utilize the most recent information generated by the payment gateway itself, rather than rely on disconnected data stored on your local WordPress site. Note that this plugin, to the best of our knowledge, is PCI-DSS compliant. It does not store payment data locally on your web server (The information used to process Credit Card transactions is only stored on the payment gateway itself, not on your site).

== Installation ==

  1. Upload the e20r-payment-warning-pmpro directory to the /wp-content/plugins/ directory of your site.
  2. Activate the plugin through the 'Plugins' menu in WordPress.
  3. That's it. Settings are managed through the "Settings" -> "Payment Reminders" options/settings page.
  4. Licenses for the gateway modules(s) can be purchased on the Eighty/20 Results website (https://eighty20results.com/licenses)

== Frequently Asked Questions ==

=== Can I configure the plugin? ===

Yes, you can specify your company's billing address, the company name and select the message types to process for as well as the payment gateways to enable data collection for (assuming you have a valid license for it).

Go to the Payment Warnings settings page. The page can be found by navigating to /wp-admin/ -> "Settings" -> "Payment Reminders". The key settings should be listed there.

There are also a number of filter hooks for a programmer to use that will modify certain details of the plugin configuration.

=== What types of warning messages can this plugin send? ===

There are 3 default warning message types you can configure the plugin to process and send on the Payment Reminders Settings page. These 3 warning message types are:

  • Expiration,
  • Recurring Payment Warning and
  • Credit Card Expiration messages.

=== How do I change/update the email message templates? ===

All template handling is, as of v3.0 and later, managed as "Email Notices".

Email Notices are a form of WordPress posts and have their own taxonomy, so the 3 default warning message types can be created by going to the "Email Notices" menu option in the /wp-admin/ backend and selecting "New Email Notice".

The plugin creates the "E20R Payment Warning Notices" Email Type for you when it's activated, but there are no predefined message warning templates created for you.

For the plugin to send warning messages, it needs to be able to find at least one template for the Reminder Type it is processing. As a result, you will have to create that message and configure it to be sent on whatever day before the expiration/payment date. See the "Message Settings" metabox on the Edit Email Notice page after you have supplied a title and saved the new message template as a "E20R Payment Warning Notices" Email Type.

=== How do I select when (what day) to send the warning ===

After saving a Payment Warning Notice in the Email Notice section, when the message reloads, you'll notice a "Message Settings" metabox on the right-hand side of the Email Notice Editor page.

Here you can add/remove the "Send on day #" value(s). There are no limits to the number of days when that specific message can be sent.

=== Can the system send more than 1 message of a given type per day to the same user? ===

Yes, you can configure multiple different message templates of the same Message Type and for the same day.

Note that all of the configured message types will be sent at around the same time.

Messages are typically sent between 4:30am and 6am for the timezone your WordPress server is configured for - see the "Timezone" setting for WordPress on the "Settings" -> "General" page. By default, WordPress uses the "UTC" or GMT timezone. That is, unless you configure it to use something else. We recommend you select a timezone that reflects the majority of your site's audience.

=== How do I insert user specific information in the template? ===

The Email Notices supports the use of a predetermined number of what we call 'substitution variables'. You'll recognize a 'substitution variable' by the fact that it has a leading and trailing pair of '!!' (double bangs). For example: To display the first name of the user in the email greeting, you can use the !!first_name!! variable. As the plugin processes the message for that user, it will replace the !!first_name!! name with the actual first name of the user (assuming they've provided one).

Each payment warning message type has its own list of variables you can use, and the "Substitution Variables" metabox below the Email Notice editor field will be updated to reflect the supported variables once you select the "Reminder Type" and Save/Update the template (as a draft, for instance).

=== Is this plugin PCI-DSS compliant? ===

In short; It depends...

This plugin does not save the credit card number for any of your members. In accordance with the documentation from the Payment Card Industry association requirements, we're storing the brand of the card plus its last 4 digits (so members can tell which card it is). We also save the expiration month and expiration year so we can identify when to send a Credit Card Expiration Warning when needed.

Whether something is genuinely "compliant" with a requirement depends on whether it's solely in control of the environment. In this case, we're running as a plug-in for a WordPress based website. We do what we can to not violate the PCI-DSS requirements, but ultimately this plugin isn't in control of whether or not your site is PCI-DSS compliant.

=== Is this plugin GDPR compliant ===

First of all, see the PCI-DSS compliance question about when it comes to the caveat of whether or not this plugin can claim GDPR compliance.

That said, we're not able to provide your users with a list of data that is stored by this plugin, nor can we currently delete the information if they ask you to. So, if you are in a location where GDPR is a hard requirement for your customers, you may want to wait for version 5.0 of this plugin before you install it.

=== What data does the plugin save (from the payment gateway)? ===

We only fetch data for active members of the site (i.e. their PMPro membership status is "active"). Once a member becomes inactive, we delete their data from the local cache.

For members with recurring billing plans we save;

  • an identifier for the recurring billing/subscription plan,
  • the date when the next payment will be charged,
  • the payment status for their most recent payment,
  • a status text if the last payment failed,
  • the amount charged as the last payment,
  • the amount that will be attempted charged for the next payment and
  • whether their subscription/recurring billing plan is still active.

For members who's membership was paid with a one-time payment, we save;

  • an identifier for the charge/transaction that paid for the membership,
  • the amount they paid,
  • when they paid it (date) and
  • when their membership is scheduled to end (if applicable).

=== How often does the plugin download data from the gateway? ===

It depends on the membership level definitions, and to some extent the discount codes defined for the Membership plugin.

By default, the plugin attempts to calculate the "half-life" of the shortest membership period defined (either as a membership level or in a discount code) and set the schedule for data collection to be once every 1/2 the shortest membership period. For example, if you have a membership level that is defined as a week - 7 day - long membership, the data collection would be scheduled for once every 3 days.

In the cases where the "half-life" of the shortest membership level period is more than 1 week, the plugin will schedule data collection to happen at least once per week.

== Limitations / Known Issues ==

The plugin currently supports the Stripe.com gateway integration.

The PayPal gateway support does not include real-time IPN message handling for updated credit cards and subscription/billing plans.

Adding more gateways is on the road map, but will require sponsorships. You can sponsor support for a new gateway by going to the Eighty / 20 Results Purchase page and purchase a sponsorship.

If you sponsor the development of gateway support you will receive forum support for the lifespan of this plugin, plus a lifetime license key for one website of yours for all available and future plugin features.

= Changelog =

== v5.1 ==

  • ENHANCEMENT: Added new stripe API version (2020-03-02)
  • BUG FIX: Updated licensing module to better manage remote requests (improved performance)

== v5.0 ==

  • ENHANCEMENT: Upgraded the licensing code for the Stripe module
  • ENHANCEMENT: Decouple Stripe API version support updates from plugin releases
  • ENHANCEMENT: Build json file containing list of supported API versions
  • ENHANCEMENT: Generate and load supported Stripe API versions to upstream server
  • ENHANCEMENT: Can load the api version info for supported gateways from upstream server (once per day)
  • ENHANCEMENT: Add support for sending test message(s) to logged in user for Email Notices
  • ENHANCEMENT: Adding test data (for logged in user) if it doesn't exist
  • ENHANCEMENT: Add support for v3.0 of the E20R License utility module
  • ENHANCEMENT: Added PHPDoc blocks for class
  • ENHANCEMENT: Add 'e20r-email-notice-send-test-message' hook handler to trigger email notice test messages
  • ENHANCEMENT: Added support for new Stripe.com API versions
  • ENHANCEMENT: Making the base Gateway add-on class derive from the licensing client
  • ENHANCEMENT: composer autoloader updates
  • ENHANCEMENT: Moved plugin-update-checker to Utilities module
  • ENHANCEMENT: Added author info, etc to composer.json
  • ENHANCEMENT: Moving payment gateway add-on modules into own plugin directories
  • ENHANCEMENT: Renamed plugin
  • ENHANCEMENT: Disable updates for unlicensed add-on modules
  • ENHANCEMENT: Add support for v3 of the Licensing module
  • ENHANCEMENT: Add filter to list active add-ons
  • ENHANCEMENT: Adding support for sending test email notices from admin interface
  • ENHANCEMENT: Use updated Utilities module and plugin updater
  • BUG FIX: Would sometimes load the readme file for the add-on modules
  • BUG FIX: Didn't always load the 3rd-party payment gateway add-ons
  • BUG FIX: Don't load if License utility module isn't configured properly
  • BUG FIX: Try to avoid loop when plugin is installed on the licensing server itself
  • BUG FIX: Missing Try/Catch block for spl_autoload_register() function
  • BUG FIX: Size for the message schedule box was bad
  • BUG FIX: Clarify language for deleting data when deactivating the plugin
  • BUG FIX: PHP Warning, the timezone value wasn't always configured in the Stripe::Account object
  • BUG FIX: PHP Notice, plugin_settings wasn't consistently an array value
  • BUG FIX: Fixed PHP Notice when looking for template body text
  • BUG FIX: Debug logging caused PHP Notice
  • BUG FIX: Debug logging caused PHP Notice from User_Data class
  • BUG FIX: Typo when attempting to use is_wp_error() in gateway base class
  • BUG FIX: Refreshed the email-notice module

== v4.5 ==

  • BUG FIX: Data updates could loop for a long time (infinite)

== v4.4.2 ==

  • BUG FIX: Updated Utilities module

== v4.4.1 ==

  • ENHANCEMENT: Added more Stripe API versions. Currently included 2018-11-08

== v4.4 ==

  • ENHANCEMENT: Updated text in ccexpiring.html template
  • ENHANCEMENT: Add Credit Cart Expiration Message test hook
  • BUG FIX: No need to send out credit card expiration warning for non-recurring users
  • BUG FIX: Incorrect default message type to process when processing reminders
  • BUG FIX: Force values for $target_template and $template_type
  • BUG FIX: Didn't trigger error when $target_template or $template_type were empty
  • BUG FIX: Searching for email notice type returned too many results
  • BUG FIX: Running Reminder message handler incorrectly included too many templates
  • BUG FIX: Didn't load test hooks when configured

== v4.3 ==

  • ENHANCEMENT: Simplify the add-on specific option names and upgrade the database
  • ENHANCEMENT: Use new option names for add-ons and simplify add-on configuration
  • ENHANCEMENT: Trigger change of add-on option names when loading settings (if applicable)
  • ENHANCEMENT: Renamed render_addon_entry() method to render_addon_checkbox()
  • ENHANCEMENT: Add label to indicate payment gateway module licensing status when activated
  • ENHANCEMENT: No need to double-check when the decision had already been made to send the message
  • ENHANCEMENT: Send admin email every 7 days when there are license warnings (expiring or expired license(s))
  • ENHANCEMENT: Added PHPDoc blocks for all class variables in Payment_Reminder()
  • ENHANCEMENT: Added PHPDoc blocks for load_hooks() method in Payment_Reminder()
  • ENHANCEMENT: More debug logging for User_Data::save_to_db() function
  • BUG FIX: Load the payment reminder message filters on init (decides whether to send the message, etc)
  • BUG FIX: Don't return user_data before p

Read the full README on GitHub →

Releases

TagPublishedAssetDownloads
v5.0 Nov 21, 2019 e20r-payment-warning-pmpro-5.0.zip 0
v4.4.1 Nov 18, 2018
v4.4 Nov 18, 2018
v4.3 Nov 14, 2018
v4.0 Aug 5, 2018 e20r-payment-warning-pmpro-4.0.zip 3
v3.3 Jan 24, 2018 e20r-payment-warning-pmpro-3.3.zip 9
v1.9.16 Oct 15, 2017 e20r-payment-warning-pmpro-1.9.16.zip 7
v1.9.7 Sep 19, 2017 e20r-payment-warning-pmpro-1.9.7.zip 3
v1.1 Jul 23, 2017 e20r-payment-warning-pmpro-1.1.zip 8