User:Mark Hershberger/specs: Difference between revisions

From MWStake
Jump to navigation Jump to search
(initial pass)
 
No edit summary
Line 14: Line 14:
* Group memberships would be set to [[mw:Help:User_rights_and_groups#User_group_expiry|automatically expire after one year]].
* Group memberships would be set to [[mw:Help:User_rights_and_groups#User_group_expiry|automatically expire after one year]].
* The user should be able to cancel their subscription.  If they do, they should be removed from the group.
* The user should be able to cancel their subscription.  If they do, they should be removed from the group.
* If a monthly or yearly payment is missed, then the user and the administrators should be sent a [[mw:Extension:Echo/Creating_a_new_notification_type|notification]].
* Administrators are users that have the <code>managemembership</code> right.
* Administrators are users that have the <code>managemembership</code> right.
* ''''(soft requirement)'''' If a monthly or yearly payment is missed (''''e.g.'''' because of an automatic transaction error at Authorize.Net), then the user and the administrators should be sent a [[mw:Extension:Echo/Creating_a_new_notification_type|notification]].


== Implementation notes ==
== Implementation notes ==

Revision as of 19:19, 4 July 2020

This document provides the specifications for a credit card processing engine that MWStakeholders is having developed.

Requirements

  • The extension should use Omnipay to handle Authorize.Net transactions and it should set up recurring payments (probably using this package by cimpleo), either yearly or monthly.
  • The yearly amounts are given on our dues page.
  • If a user chooses monthly payments, then it should be the yearly amount divided by 12 and rounded up to the nearest $.
So, at the $100 level, it would be $100 ÷ 12 = 8.3̅ ≆ $9 per month
  • Credit card info should NOT be stored anywhere.
  • Billing address information should be collected.
  • Once a person has signed up for a level, they should be put into a corresponding MW group. Group names should correspond with the level of payment.
At the $100 level, the group would be the individual-subscription, for the $250 level, it would be bronze-subscription, etc.
  • Permissions granted by lower groups should automatically be given to the higher group.
  • Group memberships would be set to automatically expire after one year.
  • The user should be able to cancel their subscription. If they do, they should be removed from the group.
  • Administrators are users that have the managemembership right.
  • '(soft requirement)' If a monthly or yearly payment is missed ('e.g.' because of an automatic transaction error at Authorize.Net), then the user and the administrators should be sent a notification.

Implementation notes

Membership tiers

Configuration for membership tiers:

{
	"member-individual": {
		"cost": "100"
	},
	"member-bronze": {
		"cost": "250",
		"dependant": "member-individual"
	},
	"member-silver": {
		"cost": "1000",
		"dependant": "member-bronze"
	},
	"member-gold": {
		"cost": 2500,
		"dependant": "member-silver"
	},
	"member-platinum": {
		"cost": 5000,
		"dependant": "member-gold"
	}
}

Each object in this associative array represents a membership level. The keys ('e.g.' member-gold) indicate the group name that the user is put in. These group names coorespond with the top-level key of the two-dimensional array that is contained in $wgGroupPermissionsThe usual MediaWiki system for managing labels for these groups are used. See the MW manual for “Creating a new group” for how to handle the display of these groups.

For each object, the cost parameter is required, and any other parameters are optional.

Immediately after a successful payment the user is assigned to a the group specified in the key ('e.g.' member-individual). If a dependant has also been given, the extension will also assign the groups for that dependant recursively. So, for instance, if someone purchases the member-silver level, they would get assigned the groups member-silver, member-bronze and member-individual.