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
- 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 $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
.