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);
    }
}
Beispiel #2
0
 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;
     }
 }
Beispiel #3
0
 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;
         }
     }
 }