User:Mark Hershberger/specs
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
- Corporate meberships can only be purchased after an individual membership is purchased.
- Individual memberships should be purchased on a dedicated page by logged in users.
- Non-logged in users will be denied access with UserNotLoggedIn.
- The corporate membership page will only be available to people who have the
member
- WhPeople without an individual mebership,
- The special page to create corporate memberships
- 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
Permissions
The member
permission will be given to the individual-subcription
by default.
Users with the <
Membership tiers
Configuration for membership tiers:
{
"member-individual": {
"cost": "100",
“vote”: 1
},
"member-bronze": {
"cost": "250",
"dependant": "member-individual",
“vote”: 10
},
"member-silver": {
"cost": "1000",
"dependant": "member-bronze",
“vote”: 25
},
"member-gold": {
"cost": 2500,
"dependant": "member-silver",
“vote”: 40
},
"member-platinum": {
"cost": 5000,
"dependant": "member-gold",
“vote”: 50
}
}
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 $wgGroupPermissions
The 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
.