Customer = new Customer(); $this->Renderview = new EmailRenderer(); $this->APITools = new ApplicationAPI(); // Create mailer when needed } // Return POST variable list in a structured array, DRY private function getStructuredVariableList(Request $request) { $PDATA = $request->getParsedBody(); $dArr = []; foreach($PDATA as $key => $param) { $dArr[$key => $param]; // Turn parsed body into an array. } return $dArr; } public function EventSubscriptionCreated(Request $request, Response $response) { // Create customer with data from Paddle // Send email with customer information } public function EventSubscriptionUpdated(Request $request, Response $response) { // Update user information if necessary } public function EventSubscriptionCancelled(Request $request, Response $response) { // Suspend user's domain name as stated on DB // Delete after 30 days } public function EventSubscriptionPaymentSuccess(Request $request, Response $response) { // Renew user's subscription within billing system // Install hosting account if this is the user's first time and send out instructions email } // TODO: Lenient business logic public function EventSubscriptionPaymentFailed(Request $request, Response $response) { // Add payment strike to user account // After three strikes, warn user that the system has waived further attempts. Suspend their account // Give user an ultimatum: Pay or remain suspended // If user fails to pay during the next 7 days, permanently suspend their account (Reject further payments. Remove user from paddle first) // If payment is successful afterwards, remove all payment strikes (Success logic should execute automatically) } public function EventSubscriptionPaymentRefunded(Request $request, Response $response) { // Ban customer from billing system // Delete all customer data } }