25, "status[is]" => "active" )); foreach ($all as $entry) { $plan = $entry->plan(); $plan_id = $plan->id; $plan_name = $plan->name; $credit_days = $plan->cfCreditDays; $include_oddsmaker = $plan->cfIncludeOddsmaker; $is_test_drive = $plan->cfIsTestDrive; $test_drive_start = $plan->cfTestDriveStart; $test_drive_end = $plan->cfTestDriveEnd; $test_drive_days = $plan->cfTestDriveDays; $include_ai_trading = $plan->cfIncludeAiTrading; $include_brokerage_plus = $plan->cfIncludeBrokeragePlus; $include_paper_trading = $plan->cfIncludePaperTrading; $infusionsoft_tags = $plan->cfInfusionsoftTags; $all_plans[$plan_id] = array( "name" => $plan_name, "credit_days" => $credit_days, "include_oddsmaker" => $include_oddsmaker == "True", "include_ai_trading" => $include_ai_trading == "True", "include_brokerage_plus" => $include_brokerage_plus == "True", "include_paper_trading" => $include_paper_trading == "True", "is_test_drive" => $is_test_drive == "True", "test_drive_start" => $test_drive_start, "test_drive_end" => $test_drive_end, "test_drive_days" => $test_drive_days, "infusionsoft_tags" => $infusionsoft_tags, ); } ?>

Got payment

Event type: $event_type

"; $plan_id = $request_content["content"]["subscription"]["plan_id"]; $hasTrialPeriod = false; //(not for test-drive) $isGift = false; $oneHundredPctDiscount = false; if ($event_type == "payment_succeeded" || $event_type == "subscription_changed") { $transaction_id = $request_content["content"]["transaction"]["id"]; $event_id = $request_content["id"]; $already_entered_sql = "SELECT id FROM aggregate_revenue WHERE orderid = '" . mysql_escape_string($event_id) . "' LIMIT 1"; echo "Using $already_entered_sql\n"; $sqlResult = mysql_query($already_entered_sql); $row = mysql_fetch_assoc($sqlResult); $already_entered = is_numeric($row['id']); if ($already_entered) { //UNCOMMENT AFTER DEBUGGING; echo "Already entered, so skipping this.\n"; exit; } $plan_id = $request_content["content"]["subscription"]["plan_id"]; if (!$plan_id && $request_content["content"]["invoice"]["line_items"][0]["entity_type"] == "plan" && $request_content["content"]["invoice"]["line_items"][0]["entity_id"]) { $plan_id = $request_content["content"]["invoice"]["line_items"][0]["entity_id"]; } $payment_username = $request_content["content"]["subscription"]["cf_payment_username"]; $transaction_date = $request_content["occurred_at"]["transaction"]["date"]; if (!$transaction_date) { $transaction_date = $request_content["occurred_at"]; } $email = $request_content["content"]["customer"]["email"]; $first_name = trim($request_content["content"]["customer"]["first_name"]); $last_name = trim($request_content["content"]["customer"]["last_name"]); $chargebee_customer_id = $request_content["content"]["customer"]["id"]; $tradeideas_username = $request_content["content"]["customer"]["cf_tradeideas_username"]; if ($plan_id && array_key_exists($plan_id, $all_plans)) { $credit_days = $all_plans[$plan_id]["credit_days"]; $include_oddsmaker = $all_plans[$plan_id]["include_oddsmaker"] ? 1 : 0; $include_ai_trading = $all_plans[$plan_id]["include_ai_trading"] ? 1 : 0; $include_brokerage_plus = $all_plans[$plan_id]["include_brokerage_plus"] ? 1 : 0; $include_paper_trading = $all_plans[$plan_id]["include_paper_trading"] ? 1 : 0; $infusionsoft_tags = getInfusionsoftTags($all_plans, $plan_id); $is_test_drive = 0; $test_drive_start = ""; $test_drive_end = ""; $test_drive_days = ""; $itemname = $plan_id; $addon_entity_id = $request_content["content"]["invoice"]["line_items"][0]["entity_id"]; if ($plan_id == "test-drive-dummy-subscription" && $addon_entity_id != "trade-ideas-brokerage-plus") { $itemname = "test drive"; echo "Seems like a test drive. " . print_r($request_content["content"]["subscription"]); //echo "Invoice. " . print_r($request_content["content"]["invoice"]); echo "Entity-id: $addon_entity_id\n"; $is_test_drive = 1; $test_drive_start = $request_content["content"]["subscription"]["cf_testdrivestart"]; $test_drive_end = $request_content["content"]["subscription"]["cf_testdriveend"]; } if ($addon_entity_id == "trade-ideas-brokerage-plus") { $itemname = $addon_entity_id; $include_ai_trading = 1; $include_brokerage_plus = 1; } echo "Found $plan_id, $email, $first_name, $last_name, $chargebee_customer_id, $tradeideas_username, $payment_username, $credit_days, $include_oddsmaker, $include_ai_trading, $include_brokerage_plus, $include_paper_trading\n"; $user_info = retrieve_or_create_user($email, $payment_username, $tradeideas_username, $first_name, $last_name, $email); print_r($user_info); $user_id = $user_info['id']; $username = $user_info['username']; if ($event_type == "payment_succeeded") { $tune_transaction_id = $request_content["content"]["subscription"]["cf_tune_transaction_id"]; if($username == null) $username = $email; if($username != null && $tune_transaction_id != null){ $sql = "UPDATE tune_id_storage SET lead_username='$username', lead_subscription_status='active' WHERE transaction_id='$tune_transaction_id'"; $result = mysql_query($sql); } } if (is_numeric($user_id)) { $success = make_credits_to_account($user_id, $plan_id, $transaction_date, $transaction_id, $credit_days, $include_oddsmaker, $include_ai_trading, $include_brokerage_plus, $include_paper_trading, $is_test_drive, $test_drive_start, $test_drive_end, $test_drive_days,$hasTrialPeriod,$isGift, $event_type, $event_id,$oneHundredPctDiscount); echo "Success for $user_id\n"; echo "Inserting into aggregate_revenue.\n"; $payment_amount = $request_content["content"]["transaction"]["amount"] / 100; $contactid = $request_content["content"]["customer"]["id"]; $ordertype = "subscr_payment"; if ($event_type == "subscription_changed") { $ordertype = "subscr_changed"; } $paytype = "Credit Card"; $ispayment = 1; $issubscription = 0; $provider = "chargebee"; $insert_sql = "INSERT INTO aggregate_revenue (creation, updated, orderid, itemname, payment_gross, payment_fee, ordertype, paytype, provider, userid, contactid, username, paydate, issubscription, ispayment) VALUES ("; $insert_sql .= "NOW(), NOW(), '" . mysql_escape_string($event_id) . "', '" . mysql_escape_string($itemname) . "', '" . mysql_escape_string($payment_amount) . "', '0', '" . mysql_escape_string($ordertype) . "', '"; $insert_sql .= mysql_escape_string($paytype) . "', '" . mysql_escape_string($provider) . "', '" . mysql_escape_string($user_id) . "', '" . mysql_escape_string($contactid) . "', '"; $insert_sql .= mysql_escape_string($username) . "', FROM_UNIXTIME('" . mysql_escape_string($transaction_date) . "'), '$issubscription', '$ispayment')"; echo "Inserting $insert_sql\n"; $result = mysql_query($insert_sql); if ($result) { echo "Successfully inserted.\n"; } else { echo "Error inserting. " . mysql_error() . "\n"; } } else { // TODO handle error echo "Couldn't find username\n"; } } else { echo "Couldn't find plan_id $plan_id "; print_r($all_plans); } } else if (($event_type == "subscription_cancelled" && $plan_id != "test-drive-dummy-subscription") || $event_type == "subscription_renewed") { $event_id = $request_content["id"]; $email = $request_content["content"]["customer"]["email"]; $subscription_plan_id = $request_content["content"]["subscription"]["plan_id"]; if($event_type == "subscription_cancelled"){ assignInfusionTag($email, 1727); $tune_transaction_id = $request_content["content"]["subscription"]["cf_tune_transaction_id"]; if($tune_transaction_id != null){ $sql = "UPDATE tune_id_storage SET lead_subscription_status='cancelled' WHERE transaction_id='$tune_transaction_id'"; $result = mysql_query($sql); } } //now we send an email to marissa - but ONLY if this user is professional $tradeideas_username = $request_content["content"]["customer"]["cf_tradeideas_username"]; $ti_username = getUsername($email,$tradeideas_username); if ($ti_username != null) { //get the relevant info needed to notify Marissa $userSql = "SELECT id, status FROM users WHERE username = '" . mysql_escape_string($ti_username) . "'"; $sqlResult = mysql_query($userSql); if ($sqlResult) { $row = mysql_fetch_assoc($sqlResult); $userId = $row['id']; $status = $row['status']; if($status === "pro"){ if($event_type == "subscription_cancelled") sendDevEmail($userId,$ti_username,$subscription_plan_id,"Successful subscription cancellation of Professional user.","kathleen@trade-ideas.com","Professional User Cancellation"); else if ($event_type == "subscription_renewed"){ sendDevEmail($userId,$ti_username,$subscription_plan_id,"Successful subscription renewal of Professional user.","kathleen@trade-ideas.com","Professional User Renewal"); } } } else { echo "Error: " . mysql_error() . "\n"; } } } else if ($event_type == "subscription_created") { $event_id = $request_content["id"]; $email = $request_content["content"]["customer"]["email"]; $first_name = trim($request_content["content"]["customer"]["first_name"]); $last_name = trim($request_content["content"]["customer"]["last_name"]); $payment_username = $request_content["content"]["subscription"]["cf_payment_username"]; $tradeideas_username = $request_content["content"]["customer"]["cf_tradeideas_username"]; $user_info = retrieve_or_create_user($email, $payment_username, $tradeideas_username, $first_name, $last_name, $email); $include_oddsmaker = getFeatureStatus($all_plans,$plan_id,"include_oddsmaker"); $include_ai_trading = getFeatureStatus($all_plans,$plan_id,"include_ai_trading"); $include_brokerage_plus = getFeatureStatus($all_plans,$plan_id,"include_brokerage_plus"); $include_paper_trading = getFeatureStatus($all_plans,$plan_id,"include_paper_trading"); //seek discount-100% $purchaseAmount = $request_content["content"]["subscription"]["plan_amount"]; // $line_items = $request_content["content"]["invoice"]["line_items"][0]; $invoice = $request_content["content"]["invoice"]; $user_id = $user_info['id']; $username = $user_info['username']; echo "Adding record to infusionsoft: $email, $first_name, $last_name, $plan_id\n"; $add_result = addDataToInfusionsoftContact($email, array("FirstName" => $first_name, "LastName" => $last_name, "Email" => $email, "Username" => $username)); echo "Result of add: $add_result\n"; if ($plan_id == "test-drive-dummy-subscription") { echo "Adding tag to test drive infusionsoft: $email, $first_name, $last_name\n"; $tagAssignmentResult = assignInfusionTag($email, 1777); echo "Result: $tagAssignmentResult\n"; exit; } if($invoice && $request_content["content"]["subscription"]["trial_end"] == null){ //Here we're looking specifically for a plan that has 100% off for a discount coupon, and it's not a plan with a trial $line_items = $request_content["content"]["invoice"]["line_items"]; if($line_items){ $item = $line_items[0]; } $discount_amount = $item["discount_amount"]; if(($discount_amount == $purchaseAmount) && is_numeric($user_id)){ $oneHundredPctDiscount = true; $hasTrialPeriod = false; $credit_days = $all_plans[$plan_id]["credit_days"]; $transaction_date = $request_content["content"]["subscription"]["created_at"]; $is_test_drive = 0; make_credits_to_account($user_id, $plan_id, $transaction_date, $transaction_id, $credit_days, $include_oddsmaker, $include_ai_trading, $include_brokerage_plus, $include_paper_trading, $is_test_drive, $test_drive_start, $test_drive_end, $test_drive_days,$hasTrialPeriod,$isGift, $event_type, $event_id, $oneHundredPctDiscount); $infusionsoft_tags = getInfusionsoftTags($all_plans, $plan_id); addInfusionsoftTags($email, $infusionsoft_tags); exit; } } if($request_content["content"]["subscription"]["trial_end"]){ //if this parameter is present, we have a subscription that has a trial period. /* *This else block handles subscriptions with a trial periods. In this case, the $ credit_days are computed by getting the days * of the trial period by using the "trial_start" and "trial_end" values obtained from the firing of the webhook.. */ $is_test_drive = 0; $transaction_date = $request_content["content"]["subscription"]["created_at"]; $planId = $request_content["content"]["subscription"]["plan_id"]; $result = ChargeBee_Plan::retrieve($planId); $credit_days = getCreditDaysForTrialPeriod($result); if (is_numeric($user_id)){ $hasTrialPeriod = true; make_credits_to_account($user_id, $plan_id, $transaction_date, $transaction_id, $credit_days, $include_oddsmaker, $include_ai_trading, $include_brokerage_plus, $include_paper_trading, $is_test_drive, $test_drive_start, $test_drive_end, $test_drive_days,$hasTrialPeriod,$isGift, $event_type, $event_id, $oneHundredPctDiscount); $infusionsoft_tags = getInfusionsoftTags($all_plans, $plan_id); addInfusionsoftTags($email, $infusionsoft_tags); } exit; } if($request_content["content"]["subscription"]["gift_id"]){ // we want to create record of future user but not activated. That will happen in the subscription-started event(recipient claims gift) $is_test_drive = 0; if (is_numeric($user_id)){ $hasTrialPeriod = false; make_credits_to_account($user_id, $plan_id, $transaction_date, $transaction_id, $credit_days, $include_oddsmaker, $include_ai_trading, $include_brokerage_plus, $include_paper_trading, $is_test_drive, $test_drive_start, $test_drive_end, $test_drive_days,$hasTrialPeriod,$isGift, $event_type, $event_id, $oneHundredPctDiscount); } exit; }else{ echo "Adding tag to payment infusionsoft: $email, $first_name, $last_name\n"; $infusionsoft_tags = getInfusionsoftTags($all_plans, $plan_id); addInfusionsoftTags($email, $infusionsoft_tags); } $payment_amount = $request_content["content"]["transaction"]["amount"] / 100; $transaction_date = $request_content["occurred_at"]; $contactid = $request_content["content"]["customer"]["id"]; $ordertype = "subscr_signup"; $couponCode = getCouponCode($request_content["content"]); $paytype = "Credit Card"; $ispayment = 0; $issubscription = 1; $provider = "chargebee"; $itemname = $plan_id; $already_entered_sql = "SELECT id FROM aggregate_revenue WHERE orderid = '" . mysql_escape_string($event_id) . "' LIMIT 1"; echo "Using $already_entered_sql\n"; $sqlResult = mysql_query($already_entered_sql); $row = mysql_fetch_assoc($sqlResult); $already_entered = is_numeric($row['id']); if ($already_entered) { echo "Already entered, so skipping this.\n"; exit; } $insert_sql = "INSERT INTO aggregate_revenue (creation, updated, orderid, itemname, discountname,payment_gross, payment_fee, ordertype, paytype, provider, userid, contactid, username, paydate, issubscription, ispayment) VALUES ("; $insert_sql .= "NOW(), NOW(), '" . mysql_escape_string($event_id) . "', '" . mysql_escape_string($itemname) . "','" . mysql_escape_string($couponCode) . "','" . mysql_escape_string($payment_amount) . "', '0', '" . mysql_escape_string($ordertype) . "', '"; $insert_sql .= mysql_escape_string($paytype) . "', '" . mysql_escape_string($provider) . "', '" . mysql_escape_string($user_id) . "', '" . mysql_escape_string($contactid) . "', '"; $insert_sql .= mysql_escape_string($username) . "', FROM_UNIXTIME('" . mysql_escape_string($transaction_date) . "'), '$issubscription', '$ispayment')"; echo "Inserting $insert_sql\n"; $result = mysql_query($insert_sql); if ($result) { echo "Successfully inserted.\n"; } else { echo "Error inserting. " . mysql_error() . "\n"; } } else if($event_type == "subscription_started") { if ($request_content["content"]["subscription"]["gift_id"]) { //activates the subscription when gift recipient claims gift $is_test_drive = 0; $include_oddsmaker = getFeatureStatus($all_plans,$plan_id,"include_oddsmaker"); $include_ai_trading = getFeatureStatus($all_plans,$plan_id,"include_ai_trading"); $include_brokerage_plus = getFeatureStatus($all_plans,$plan_id,"include_brokerage_plus"); $include_paper_trading = getFeatureStatus($all_plans,$plan_id,"include_paper_trading"); $infusionsoft_tags = getInfusionsoftTags($all_plans,$plan_id); $transaction_date = $request_content["content"]["subscription"]["created_at"]; $start = $request_content["content"]["subscription"]["activated_at"]; $end = $request_content["content"]["subscription"]["cancelled_at"]; $credit_days = getCreditDaysGiftPeriod($start,$end); $email = $request_content["content"]["customer"]["email"]; $user_id = getIdFromGiftRecipient($email); if (is_numeric($user_id)){ $hasTrialPeriod = false; $isGift = true; make_credits_to_account($user_id, $plan_id, $transaction_date, $transaction_id, $credit_days, $include_oddsmaker, $include_ai_trading, $include_brokerage_plus, $include_paper_trading, $is_test_drive, $test_drive_start, $test_drive_end, $test_drive_days,$hasTrialPeriod,$isGift, $event_type, $event_id, $oneHundredPctDiscount); addInfusionsoftTags($email, $infusionsoft_tags); } exit; } } function addInfusionsoftTags($email, $infusionsoft_tags) { echo "

In addInfusionsoftTags with $email and tags $infusionsoft_tags

"; if ($infusionsoft_tags) { $tags = explode(",", $infusionsoft_tags); foreach ($tags as $tag) { $tag = trim($tag); echo "Assigning tag $tag to $email\n"; assignInfusionTag($email, $tag); } } else { assignInfusionTag($email, 250); assignInfusionTag($email, 166); } } function getCouponCode($content){ $retVal = $content["invoice"]; if($retVal != null) $retVal = $content["invoice"]["discounts"][0]; if($retVal != null) $retVal = $content["invoice"]["discounts"][0]["entity_id"]; if($retVal != null) return $retVal; else return ""; } function logRequest($request_content, $event_type) { $yyyymmdd = date("Ymd"); $logFile = "/var/www/Supporting_Scripts/chargebee_logs/chargebee_webhook.$yyyymmdd.log"; echo "Opening log: $logFile\n"; $message = "++ new request\n"; foreach ($_SERVER as $h => $v) { $message .= "$h = $v\n"; } $message .= file_get_contents('php://input') . "\n"; $message .= print_r($request_content, true) . "\n"; $fh = fopen($logFile, 'a'); if ($fh) { echo "Opened file successfully.\n"; fwrite($fh, $message); fclose($fh); } else { $last_error = error_get_last(); echo "Didn't open file successfully: " . print_r($last_error, true) . "\n"; } //$sendTo = 'dmabe@trade-ideas.com'; //echo "

Sending mail: " . $sendTo . "

"; //mail($sendTo, "Payment Processed from Chargebee: $event_type", $message); } function retrieve_or_create_user($email, $paymentusername, $tiusername, $firstName, $lastName) { $username = $paymentusername; if (!$username && $tiusername) { $username = $tiusername; } echo "Using username $username ($paymentusername, $tiusername)\n"; if ($username) { $userSql = "SELECT id, username FROM mydb.users WHERE username = '" . mysql_escape_string($username) . "'"; echo "userSql=$userSql\n"; $sqlResult = mysql_query($userSql); if ($sqlResult) { $row = mysql_fetch_assoc($sqlResult); $userId = $row['id']; echo "Checking userId $userId\n"; if (preg_match("/^\d+$/", $userId)) { return $row; } } else { echo "Error: " . mysql_error() . "\n"; } } $lower_email = strtolower($email); $userSql = "SELECT id, username FROM users WHERE LOWER(username) = '" . mysql_escape_string($lower_email) . "'"; $sqlResult = mysql_query($userSql); $row = mysql_fetch_assoc($sqlResult); $userId = $row['id']; if (preg_match("/^\d+$/", $userId)) { return $row; } else { $logMessage .= "Creating user for $email\n"; echo "Creating user for $email\n"; createUser($firstName, $lastName, $email); $userSql = "SELECT id, username FROM users WHERE username = '" . mysql_escape_string($email) . "'"; $sqlResult = mysql_query($userSql); $row = mysql_fetch_assoc($sqlResult); $userId = $row['id']; if (preg_match("/^\d+$/", $userId)) { return $row; } } } function createUser($firstName, $lastName, $email) { $userCreateSql = "INSERT INTO users (username, password, creation, real_name, email, initial_ip, wl_include, us_mail) VALUES (\"" . mysql_escape_string($email) . '", "' . generateRandomString() . '", now(), "' . mysql_escape_string($firstName . " " . $lastName) . '", "' . mysql_escape_string($email) . '", "' . mysql_escape_string($_SERVER["REMOTE_ADDR"]) . '", "' . mysql_escape_string($wl_include) . '", "N")'; $userCreationResult = mysql_query($userCreateSql); $logMessage .= "Creating user with sql: $userCreateSql\n"; $userid = mysql_insert_id(); } function usernameExists($email, $paymentusername, $tiusername) { $username = $paymentusername; if (!$username && $tiusername) { $username = $tiusername; } if ($username) { $userSql = "SELECT id FROM users WHERE username = '" . mysql_escape_string($username) . "'"; $sqlResult = mysql_query($userSql); $row = mysql_fetch_assoc($sqlResult); $userId = $row['id']; if (preg_match("/^\d+$/", $userId)) { return true; } } $userSql = "SELECT id FROM users WHERE username = '" . mysql_escape_string($email) . "'"; $sqlResult = mysql_query($userSql); $row = mysql_fetch_assoc($sqlResult); $userId = $row['id']; if (preg_match("/^\d+$/", $userId)) { return true; } return false; } function getUsername($mail,$tiusername){ if($tiusername != null) return trim($tiusername); //check if $email is the $tiusername $email = trim(strtolower($mail)); $userSql = "SELECT * FROM users WHERE username = '" . mysql_escape_string($email) . "'"; $result = mysql_query($userSql); $rowcount= mysql_num_rows($result); if($rowcount > 0) return $email; else return null; } function getIdFromGiftRecipient($mail){ //during the gift process, the username is the email address $email = trim(strtolower($mail)); $userSql = "SELECT id FROM users WHERE username = '" . mysql_escape_string($email) . "'"; $sqlResult = mysql_query($userSql); $row = mysql_fetch_assoc($sqlResult); $userId = $row['id']; return $userId; } function sendDevEmail($contact_id,$ti_username,$subscriptionName,$message,$recipient,$sub){ $to = $recipient; $subject = $sub; $headers = "From: Trade-Ideas \r\n" . "MIME-Version: 1.0\r\n" . "Content-type: text/plain; charset=iso-8859-1\r\n"; $txt = "The user's contact id is: " . $contact_id . " The user's ti_username is: " . $ti_username . " The subscription is: " .$subscriptionName; $message = $message . "\r\n" . $txt; mail($to,$subject,$message,$headers); } function make_credits_to_account($user_id, $plan_id, $transaction_date, $transaction_id, $credit_days, $include_oddsmaker, $include_ai_trading, $include_brokerage_plus, $include_paper_trading, $is_test_drive, $test_drive_start, $test_drive_end, $test_drive_days,$hasTrialPeriod,$isGift, $event_type, $event_id, $oneHundredPctDiscount) { global $chargebee_site_id; $test_drive_start_time = '08:00:00'; // update_user_info takes two arrays to make changes. The first has values that get escaped before updating the database. // The second has special values that don't get escaped, like "now()" $additional_notes = ""; $user_info_sql = "SELECT * FROM users WHERE id = '" . mysql_escape_string($user_id) . "'"; $user_info_result = mysql_query($user_info_sql); $user_info = null; if ($user_info_result) { $user_info = mysql_fetch_assoc($user_info_result); } if ($is_test_drive) { $trial_end = "'$test_drive_start' + INTERVAL 7 DAY"; if ($test_drive_end) { $trial_end = "'$test_drive_end 00:00:00'"; } elseif (is_numeric($test_drive_days)) { $trial_end = "'$test_drive_start' + INTERVAL $test_drive_days DAY"; } if ($user_info) { $found_test_drive = 0; $test_drive_info_sql = "SELECT COUNT(*) AS cnt FROM free_preview WHERE user_id = '" . mysql_escape_string($user_id) . "' AND DATE(scheduled_start) = '" . mysql_escape_string($test_drive_start) . "'"; $test_drive_info_result = mysql_query($test_drive_info_sql); if ($test_drive_info_result) { $test_drive_info = mysql_fetch_assoc($test_drive_info_result); if ($test_drive_info['cnt'] > 0) { $found_test_drive = 1; } } if ($found_test_drive) { $additional_notes = "Duplicate test drive for $test_drive_start"; } else { $free_preview_sql = "INSERT INTO free_preview (contactlastname, email, scheduled_start, trial_start, trial_end, status, hadaccount, authorization_expires, oddsmaker_free, user_id, username, contactid, creation, updated) VALUES ('" . mysql_escape_string($user_info['real_name']) . "'," . "'" . mysql_escape_string($user_info['email']) . "'," . "'" . mysql_escape_string($test_drive_start) . " $test_drive_start_time'," . "NULL," . $trial_end . ",". "'queued'," . "1," . # had account "'" . mysql_escape_string($user_info['authorization_expires']) . "'," . "'" . mysql_escape_string($user_info['oddsmaker_free']) . "'," . "'" . mysql_escape_string($user_id) . "'," . "'" . mysql_escape_string($user_info['username']) . "'," . "NULL," . "NOW()," . "NOW())"; $logMessage .= "mysql query: $free_preview_sql\n"; $free_preview_result = mysql_query($free_preview_sql); if ($free_preview_result) { $updates_escaped = array( "authorization_type" => "initial_demo", ); $updates_raw = array(); $additional_notes = "Test Drive Record created"; } else { $additional_notes = "Test Drive Record creation error"; $logMessage .= "mysql error: " . mysql_error() . "\n"; mail('dmabe@trade-ideas.com', 'Infusionsoft Paid Trial Error', $logMessage); } } } } else { $is_nyse_redo_disabled = $user_info["nyse_disabled_authorization_expires"] && $user_info["nyse_disabled_authorization_expires"] != "0000-00-00 00:00:00"; $updates_escaped = array( "authorization_type" => "creditcard", ); $updates_raw = array(); # this can be reached if event_type is payment_succeeded OR subscription_changed. If subscription_changed, then don't add time to the account # since the payment_succeeded might not be coming. if ($event_type == "payment_succeeded" && is_numeric($credit_days) && $credit_days > 0) { if ($is_nyse_redo_disabled) { $updates_raw["nyse_disabled_authorization_expires"] = "GREATEST(nyse_disabled_authorization_expires, FROM_UNIXTIME(" . $transaction_date . ") + INTERVAL $credit_days DAY)"; } else { $updates_raw["authorization_expires"] = "GREATEST(authorization_expires, FROM_UNIXTIME(" . $transaction_date . ") + INTERVAL $credit_days DAY)"; } } if ($event_type == "subscription_created" && $hasTrialPeriod == true && is_numeric($credit_days) && $credit_days > 0) { if ($is_nyse_redo_disabled) { $updates_raw["nyse_disabled_authorization_expires"] = "GREATEST(nyse_disabled_authorization_expires, FROM_UNIXTIME(" . $transaction_date . ") + INTERVAL $credit_days DAY)"; } else { $updates_raw["authorization_expires"] = "GREATEST(authorization_expires, FROM_UNIXTIME(" . $transaction_date . ") + INTERVAL $credit_days DAY)"; } } if ($event_type == "subscription_created" && $oneHundredPctDiscount == true && $hasTrialPeriod == false && is_numeric($credit_days) && $credit_days > 0) { if ($is_nyse_redo_disabled) { $updates_raw["nyse_disabled_authorization_expires"] = "GREATEST(nyse_disabled_authorization_expires, FROM_UNIXTIME(" . $transaction_date . ") + INTERVAL $credit_days DAY)"; } else { $updates_raw["authorization_expires"] = "GREATEST(authorization_expires, FROM_UNIXTIME(" . $transaction_date . ") + INTERVAL $credit_days DAY)"; } } if ($event_type == "subscription_started" && $isGift == true && is_numeric($credit_days) && $credit_days > 0) { //make sure this is for gift only TODO //&& $isGift == true if ($is_nyse_redo_disabled) { $updates_raw["nyse_disabled_authorization_expires"] = "GREATEST(nyse_disabled_authorization_expires, FROM_UNIXTIME(" . $transaction_date . ") + INTERVAL $credit_days DAY)"; } else { $updates_raw["authorization_expires"] = "GREATEST(authorization_expires, FROM_UNIXTIME(" . $transaction_date . ") + INTERVAL $credit_days DAY)"; } } if ($include_oddsmaker) { $updates_raw["oddsmaker_free"] = "NULL"; } $misc_permissions_start = "misc_permissions"; if ($include_brokerage_plus) { $updates_raw["misc_permissions"] .= $misc_permissions_start . " | 1"; $misc_permissions_start = ""; } if ($include_ai_trading) { $updates_raw["misc_permissions"] .= $misc_permissions_start . " | 2"; $misc_permissions_start = ""; } if ($include_paper_trading) { $updates_raw["misc_permissions"] .= $misc_permissions_start . " | 4"; $misc_permissions_start = ""; } if ($event_type == "subscription_changed" && preg_match("/-standard-/", $plan_id)) { $updates_raw["oddsmaker_free"] = 10; $updates_raw["misc_permissions"] = 1; } } $admin_note = "Chargebee eventid: $event_id, planid: $plan_id"; if ($additional_notes) { $admin_note = $admin_note . ": $additional_notes"; } $success = update_user_info($user_id, $updates_escaped, $updates_raw, false, $admin_note); return $success; } function generateRandomString($length = 10) { $characters = '023456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ'; $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, strlen($characters) - 1)]; } return $randomString; } function addDataToInfusionsoftContact($email, $data) { $app = new iSDK; $log = ""; if ($app->cfgCon(INFUSION_CONNECTION_NAME)) { $returnFields = array('Id', 'Groups'); $dups = $app->findByEmail($email, $returnFields); if (!empty($dups)) { $existingContactID = $dups[0]['Id']; $log .= "Updating $email using contact id: $existingContactID with data: " . print_r($data, true) . "\n"; $app->updateCon($existingContactID, $data); } else { $log .= "Adding contact $email with data: " . print_r($data, true) . "\n"; $contactId = $app->addCon($data); $log .= "Contact id is $contactId\n"; } } return $log; } function assignInfusionTag($email, $tagId) { $resultLog = ""; $resultLog .= "Going to assign tag: $tagId to email $email\n"; $app = new iSDK; if ($app->cfgCon(INFUSION_CONNECTION_NAME)) { $contactInfo = array( 'Email' => $email, ); $returnFields = array('Id', 'Groups'); $dups = $app->findByEmail($contactInfo['Email'], $returnFields); if (!empty($dups)) { $existingContactID = $dups[0]['Id']; $existingGroups = $dups[0]['Groups']; $groups = explode(",", $existingGroups); if (!$groups[$tagId]) { $resultLog .= "Assigning tag to existing contact with id: $existingContactID\n"; $app->grpAssign($existingContactID, $tagId); } else { $resultLog .= "Existing contact with id: $existingContactID already has tag assigned.\n"; } } else { $resultLog .= "Couldn't find contact for email: $email to assign tag to.\n"; } } return $resultLog; } function getCreditDaysGiftPeriod($start,$end){ $diff = abs($end - $start); return ceil($diff / (60 * 60 * 24)); } function getCreditDaysForTrialPeriod($result){ $plan = $result->plan(); $days = 0; $tPeriod = $plan->trialPeriod; $unit = $plan->trialPeriodUnit; if($unit == "month") $days = 30; else $days = 1; return $tPeriod * $days; } function getInfusionsoftTags($allPlans, $plan_id) { if ($plan_id && array_key_exists($plan_id, $allPlans)) { if (array_key_exists("infusionsoft_tags", $allPlans[$plan_id])) { return $allPlans[$plan_id]["infusionsoft_tags"]; } } return ""; } function getFeatureStatus($allPlans,$plan_id,$include){ //this is for computing features (i.e. oddsmaker,papertrade..) for certain types of subscriptions (i.e. those with trial, gifts..) where we're not focusing on the "payment_succeeded" event if ($plan_id && array_key_exists($plan_id, $allPlans)){ return $allPlans[$plan_id][$include] ? 1 : 0; } return 0; } ?>