function subscriptionReactivate() { header('Content-Type: application/json'); try { $subscriptionId = getSubscriptionId(); $result = ChargeBee_Subscription::reactivate($subscriptionId); $jsonResponse = array("forward" => "/ssp-php/subscription"); print json_encode($jsonResponse, true); } catch (ChargeBee_PaymentException $e) { handleChargeAttemptFailureErrors($e); } catch (ChargeBee_InvalidRequestException $e) { handleInvalidErrors($e); } catch (Exception $e) { handleGeneralErrors($e); } }
private function processChargeBeeData($inData) { //echo "Processing $inData"; $inData = json_decode($inData, 1); $sqlData = array(); $varData = array(); if ($inData === null) { echo "Invalid Data provided.\n"; return "Invalid data!"; } echo "Processing : "; print_r($inData); foreach ($inData['content'] as $key => $value) { /* "subscription": { "id": "HwqE2xeNnwOeYF44", "plan_id": "enterprise", "plan_quantity": 1, "status": "in_trial", "trial_start": 1352158863, "trial_end": 1353454863, "created_at": 1352158863, "due_invoices_count": 0, "object": "subscription" }, "customer": { "id": "HwqE2xeNnwOeYF44", "first_name": "Leon", "last_name": "Test", "email": "*****@*****.**", "created_at": 1352158863, "object": "customer", "card_status": "valid" }, "card": { "customer_id": "HwqE2xeNnwOeYF44", "status": "valid", "gateway": "chargebee", "first_name": "Leon", "last_name": "Testington", "iin": "411111", "last4": "1111", "card_type": "visa", "expiry_month": 2, "expiry_year": 2020, "billing_addr1": "123 Fake Street", "billing_city": "Fake suburb", "billing_state": "QLD", "billing_country": "AU", "billing_zip": "1234", "object": "card", "masked_number": "411111******1111" }, */ switch ($key) { case "customer": $allowed = array("customer_first_name", "customer_last_name", "customer_email", "customer_created_at"); foreach ($value as $customerKey => $customerData) { if (in_array("customer_" . $customerKey, $allowed)) { $sqlData[] = "customer_" . $customerKey . " = ?"; $varData[] = $customerData; } } //Flag the curl request as processed/deleted. $query = "UPDATE user_subscriptions \n\t\t\t\t\t\t\t\t SET " . implode(",", $sqlData) . "\t\n\t\t\t\t\t\t\t\t WHERE chargebee_id = ?"; $stmt = $this->sql->link->prepare($query); for ($c = 0; $c < sizeof($varData); $c++) { $stmt->mbind_param('s', $varData[$c]); } //Bind the document id, document page num and user id. $stmt->mbind_param('s', $value['id']); $stmt->execute(); break; case "card": $allowed = array("card_status", "card_first_name", "card_last_name", "card_card_type", "card_expiry_month", "card_expiry_year", "card_billing_addr1", "card_billing_addr2", "card_billing_city", "card_billing_state", "card_billing_country", "card_billing_zip", "card_masked_number"); foreach ($value as $customerKey => $customerData) { if (in_array("card_" . $customerKey, $allowed)) { $sqlData[] = "card_" . $customerKey . " = ?"; $varData[] = $customerData; } } //Flag the curl request as processed/deleted. $query = "UPDATE user_subscriptions \n\t\t\t\t\t\t\t\t SET " . implode(",", $sqlData) . "\t\n\t\t\t\t\t\t\t\t WHERE chargebee_id = ?"; $stmt = $this->sql->link->prepare($query); for ($c = 0; $c < sizeof($varData); $c++) { $stmt->mbind_param('s', $varData[$c]); } //Bind the document id, document page num and user id. $stmt->mbind_param('s', $value['customer_id']); $stmt->execute(); break; case "subscription": $allowed = array("subscription_plan_id", "subscription_plan_quantity", "subscription_status", "subscription_trial_start", "subscription_trial_end", "subscription_created_at", "subscription_due_invoices_count", "subscription_activated_at", "subscription_current_term_start", "subscription_current_term_end"); foreach ($value as $customerKey => $customerData) { if (in_array("subscription_" . $customerKey, $allowed)) { $sqlData[] = "subscription_" . $customerKey . " = ?"; $varData[] = $customerData; } } //Flag the curl request as processed/deleted. $query = "UPDATE user_subscriptions \n\t\t\t\t\t\t\t\t SET " . implode(",", $sqlData) . "\t\n\t\t\t\t\t\t\t\t WHERE chargebee_id = ?"; $stmt = $this->sql->link->prepare($query); for ($c = 0; $c < sizeof($varData); $c++) { $stmt->mbind_param('s', $varData[$c]); } //Bind the document id, document page num and user id. $stmt->mbind_param('s', $value['id']); $stmt->execute(); break; default: break; } } require '../php/chargebee/ChargeBee.php'; ChargeBee_Environment::configure("rocketmailmerge", "1opwNtcdAXu19XWee9cdCFe6E3FfYcCvUF"); switch ($inData['event_type']) { //Reactivate free trial accounts when the free trial runs out and is killed by chargebee case "subscription_canceled_no_card": $returnResults = array(); $subscriptionID = $inData['content']['subscription']['id']; $subscriptionPlanID = $inData['content']['subscription']['plan_id']; $cardStatus = $inData['content']['customer']['card_status']; $trialEnd = $inData['content']['subscription']['trial_end']; $currentTermStart = $inData['content']['subscription']['current_term_start']; //The free trial has expired. Reactivate their account. if ($subscriptionPlanID == "free" && $cardStatus == "no_card") { $result = ChargeBee_Subscription::reactivate($subscriptionID); //Locate the user's page usage. $query = "SELECT user_subscriptions.chargebee_id, user_subscriptions.user_id, user_statistics.billing_cycle_pages, subscription_plans.included_pages\n\t\t\t\t\t\t\t\tFROM user_subscriptions\n\t\t\t\t\t\t\t\tLEFT JOIN user_statistics ON user_subscriptions.user_id = user_statistics.user_id\n\t\t\t\t\t\t\t\tLEFT JOIN subscription_plans ON user_subscriptions.subscription_plan_id = subscription_plans.plan_name\n\t\t\t\t\t\t\t\tWHERE user_subscriptions.chargebee_id = ?"; $stmt = $this->sql->link->prepare($query); if (!$stmt) { die('Invalid query: ' . $this->sql->link->error); } else { $stmt->bind_param('s', $subscriptionID); $resultFromExec = $stmt->execute(); $stmt->store_result(); stmt_bind_assoc($stmt, $returnResults); // loop through all result rows while ($stmt->fetch()) { foreach ($returnResults as $key => $value) { $row_tmb[$key] = $value; } $data = $row_tmb; } } $userID = $data['user_id']; //Reset the user statistics back to 0. $query = "UPDATE user_statistics SET billing_cycle_logins = 0, billing_cycle_documents = 0, billing_cycle_pages = 0\n\t\t\t\t\t\t\t WHERE user_id = ?"; $stmt = $this->sql->link->prepare($query); if (!$stmt) { die('Invalid query: ' . $this->sql->link->error); } else { $stmt->bind_param('i', $userID); $resultFromExec = $stmt->execute(); } } break; case "invoice_created": echo "Invoice Created!"; $returnResults = array(); $invoiceID = $inData['content']['invoice']['id']; $subscriptionID = $inData['content']['invoice']['subscription_id']; $result = ChargeBee_Subscription::retrieve($subscriptionID); $subscription = $result->subscription(); $addonName = $subscription->__get('planId') . "_extra_pages"; //build out of the name of their plan + '_extra_pages' //Locate the user's page usage. $query = "SELECT user_subscriptions.chargebee_id, user_subscriptions.user_id, user_statistics.billing_cycle_pages, subscription_plans.included_pages\n\t\t\t\t\t\t\tFROM user_subscriptions\n\t\t\t\t\t\t\tLEFT JOIN user_statistics ON user_subscriptions.user_id = user_statistics.user_id\n\t\t\t\t\t\t\tLEFT JOIN subscription_plans ON user_subscriptions.subscription_plan_id = subscription_plans.plan_name\n\t\t\t\t\t\t\tWHERE user_subscriptions.chargebee_id = ?"; $stmt = $this->sql->link->prepare($query); if (!$stmt) { die('Invalid query: ' . $this->sql->link->error); } else { $stmt->bind_param('s', $subscriptionID); $resultFromExec = $stmt->execute(); $stmt->store_result(); stmt_bind_assoc($stmt, $returnResults); // loop through all result rows while ($stmt->fetch()) { foreach ($returnResults as $key => $value) { $row_tmb[$key] = $value; } $data = $row_tmb; } } $userID = $data['user_id']; //Calculate how many pages over their included subscription pages they've used. $billingCyclePages = $data['billing_cycle_pages']; if (!is_numeric($data['billing_cycle_pages'])) { $billingCyclePages = 0; } $billingCyclePages = $billingCyclePages - $data['included_pages']; //Add the extra pages used by the user to the invoice, if > 0 if ($billingCyclePages > 0) { $result = ChargeBee_Invoice::addAddonCharge($invoiceID, array("addon_id" => $addonName, "addon_quantity" => $billingCyclePages)); } //Reset the user statistics back to 0. $query = "UPDATE user_statistics SET billing_cycle_logins = 0, billing_cycle_documents = 0, billing_cycle_pages = 0\n\t\t\t\t\t\t WHERE user_id = ?"; $stmt = $this->sql->link->prepare($query); if (!$stmt) { die('Invalid query: ' . $this->sql->link->error); } else { $stmt->bind_param('i', $userID); $resultFromExec = $stmt->execute(); } //Close the invoice and charge the customer. $result = ChargeBee_Invoice::collect($invoiceID); //$invoice = $result->invoice(); break; case "subscription_renewed": break; //Fired when a user reactivates their subscription. Clear the counters for paid accounts. //Fired when a user reactivates their subscription. Clear the counters for paid accounts. case "subscription_reactivated": $returnResults = array(); $subscriptionID = $inData['content']['subscription']['id']; $subscriptionPlanID = $inData['content']['subscription']['plan_id']; //Locate the user's page usage. $query = "SELECT user_subscriptions.chargebee_id, user_subscriptions.user_id, user_statistics.billing_cycle_pages, subscription_plans.included_pages\n\t\t\t\t\t\t\tFROM user_subscriptions\n\t\t\t\t\t\t\tLEFT JOIN user_statistics ON user_subscriptions.user_id = user_statistics.user_id\n\t\t\t\t\t\t\tLEFT JOIN subscription_plans ON user_subscriptions.subscription_plan_id = subscription_plans.plan_name\n\t\t\t\t\t\t\tWHERE user_subscriptions.chargebee_id = ?"; $stmt = $this->sql->link->prepare($query); if (!$stmt) { die('Invalid query: ' . $this->sql->link->error); } else { $stmt->bind_param('s', $subscriptionID); $resultFromExec = $stmt->execute(); $stmt->store_result(); stmt_bind_assoc($stmt, $returnResults); // loop through all result rows while ($stmt->fetch()) { foreach ($returnResults as $key => $value) { $row_tmb[$key] = $value; } $data = $row_tmb; } } $userID = $data['user_id']; //Reset the usage for free accounts. if ($subscriptionPlanID != "free") { //Reset the user statistics back to 0. $query = "UPDATE user_statistics SET billing_cycle_logins = 0, billing_cycle_documents = 0, billing_cycle_pages = 0\n\t\t\t\t\t\t\t WHERE user_id = ?"; $stmt = $this->sql->link->prepare($query); if (!$stmt) { die('Invalid query: ' . $this->sql->link->error); } else { $stmt->bind_param('i', $userID); $resultFromExec = $stmt->execute(); } } break; //Terminate free trial accounts when the free trial runs out. //Terminate free trial accounts when the free trial runs out. case "subscription_activated": $returnResults = array(); $subscriptionID = $inData['content']['subscription']['id']; $subscriptionPlanID = $inData['content']['subscription']['plan_id']; $cardStatus = $inData['content']['customer']['card_status']; $trialEnd = $inData['content']['subscription']['trial_end']; $currentTermStart = $inData['content']['subscription']['current_term_start']; //The free trial has expired. Cancel their account. //if($subscriptionPlanID == "free" && $cardStatus == "no_card" && ($trialEnd == $currentTermStart)) { // $result = ChargeBee_Subscription::cancel($subscriptionID); //} break; default: break; } }
public function requestPlanChange($inData) { $userID = $this->session->get_user_var('id'); $plans = array('free', 'contractor', 'professional', 'small_business', 'office', 'enterprise', 'cancel', 'reactivate', 'card_update'); if (in_array($inData['plan'], $plans)) { /************** * Locate user'S SUBSCRIPTION ID *****************************/ $row_tmb = array(); $data = array(); $query = "SELECT chargebee_id\n\t\t\t\t\t FROM user_subscriptions\n\t\t\t\t\t WHERE user_id = ?"; $stmt = $this->sql->link->prepare($query); if (!$stmt) { die('Invalid query: ' . $this->sql->link->error); } else { $stmt->bind_param('i', $userID); $resultFromExec = $stmt->execute(); $stmt->store_result(); stmt_bind_assoc($stmt, $returnResults); // loop through all result rows while ($stmt->fetch()) { foreach ($returnResults as $key => $value) { $row_tmb[$key] = $value; } $data = $row_tmb; } } try { ChargeBee_Environment::configure("rocketmailmerge", "1opwNtcdAXu19XWee9cdCFe6E3FfYcCvUF"); switch ($inData['plan']) { case "card_update": $result = ChargeBee_HostedPage::updateCard(array("customer" => array("id" => $data['chargebee_id']))); $hostedPage = $result->hostedPage(); $output['success'] = 1; $output['text'] = "Successfully fetched the card update page."; $output['url'] = $hostedPage->__get('url'); $output['return'] = 1; break; case "cancel": $result = ChargeBee_Subscription::cancel($data['chargebee_id'], array("end_of_term" => 'true')); $subscription_status = $result->subscription()->__get('status'); $query = "UPDATE user_subscriptions set subscription_status = ?\n\t\t\t\t\t\t\t\t WHERE user_id = ?"; $stmt = $this->sql->link->prepare($query); if (!$stmt) { die('Invalid query: ' . $this->sql->link->error); } else { $stmt->bind_param('si', $subscription_status, $userID); $resultFromExec = $stmt->execute(); } $output['success'] = 1; $output['text'] = "Successfully cancelled your subscription."; $output['return'] = 4; break; case "reactivate": $result = ChargeBee_Subscription::reactivate($data['chargebee_id']); $subscription_status = $result->subscription()->__get('status'); $query = "UPDATE user_subscriptions set subscription_status = ?\n\t\t\t\t\t\t\t\t WHERE user_id = ?"; $stmt = $this->sql->link->prepare($query); if (!$stmt) { die('Invalid query: ' . $this->sql->link->error); } else { $stmt->bind_param('si', $subscription_status, $userID); $resultFromExec = $stmt->execute(); } $output['success'] = 1; $output['text'] = "Successfully reactivated your subscription."; $output['return'] = 5; break; case "free": $this->fetchDashboardData(); if ($this->outData['totals']['document_count'] <= 3 && $this->outData['totals']['document_count'] <= 3 && $this->outData['totals']['document_count'] <= 3) { $result = ChargeBee_Subscription::update($data['chargebee_id'], array("planId" => "free")); $output['success'] = 1; $output['text'] = "Successfully updated your account to free."; $output['return'] = 2; } else { $output['success'] = 1; $output['text'] = "Your account does not meet the criteria for the free subscription."; $output['return'] = 6; } break; default: $result = ChargeBee_HostedPage::checkoutExisting(array("subscription" => array("id" => $data['chargebee_id'], "planId" => $inData['plan']))); $hostedPage = $result->hostedPage(); $output['success'] = 1; $output['text'] = "Successfully fetched the plan change page."; $output['url'] = $hostedPage->__get('url'); $output['return'] = 1; break; } $this->outData = $output; return $output; } catch (Exception $e) { $output['success'] = 0; $output['text'] = "Unable to fetch the plan change page."; $output['return'] = 3; $this->outData = $output; return $output; } } }