You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
199 lines
8.2 KiB
PHP
199 lines
8.2 KiB
PHP
<?php
|
|
require_once __DIR__ . "/settings.php";
|
|
require_once __DIR__ . "/database.php";
|
|
|
|
session_start();
|
|
$plan = $_POST['plan'];
|
|
if (!isset(PLANS[$plan])) {
|
|
header("Location: /#pricing");
|
|
die("Invalid plan chosen.");
|
|
}
|
|
if (!isset($_SESSION['username']) || !isset($_SESSION['password']) || !isset($_SESSION['renewing'])) {
|
|
header("Location: /");
|
|
die();
|
|
}
|
|
|
|
\Stripe\Stripe::setApiKey(STRIPE_SK);
|
|
|
|
$token = $_POST['stripeToken'];
|
|
$email = $_POST['email'];
|
|
|
|
try {
|
|
// Free plan
|
|
if (PLANS[$plan]["monthly"] == 0) {
|
|
$free = TRUE;
|
|
}
|
|
|
|
if (!$free && $email !== $_POST['stripeEmail']) {
|
|
throw new Exception("You need to use the same email for payment and for your account.");
|
|
}
|
|
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
|
throw new Exception("The email you supplied is not valid. You need a valid email address to use the service.");
|
|
}
|
|
|
|
if (!$free) {
|
|
$customer = \Stripe\Customer::create(array(
|
|
'email' => $database->select('accounts', 'email', ['accountid' => $_SESSION['accountid']])[0],
|
|
'source' => $token
|
|
));
|
|
|
|
$charge = \Stripe\Charge::create(array(
|
|
'customer' => $customer->id,
|
|
'amount' => PLANS[$plan]["monthly"] * 100,
|
|
'currency' => 'usd'
|
|
));
|
|
|
|
if (!$charge['paid']) {
|
|
throw new Exception("The charge did not complete successfully. Reason: " . $charge["failure_message"]);
|
|
}
|
|
}
|
|
|
|
$error = false;
|
|
$message = ($free ? "Your account is now active!" : "Your purchase was successful!");
|
|
|
|
// Setup cURL
|
|
$curl = curl_init();
|
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($curl, CURLOPT_USERPWD, NEXTCLOUD_USER . ":" . NEXTCLOUD_PASS);
|
|
curl_setopt($curl, CURLOPT_HTTPHEADER, ['OCS-APIRequest: true', "Content-Type: application/x-www-form-urlencoded"]);
|
|
|
|
if ($_SESSION['renewing'] == TRUE) {
|
|
// Enable account
|
|
curl_setopt($curl, CURLOPT_URL, "https://dontsell.me/ocs/v1.php/cloud/users/" . urlencode($_SESSION['username']) . "/enable");
|
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
|
|
$out = curl_exec($curl);
|
|
if (strpos($out, "<status>ok</status>") === FALSE) {
|
|
preg_match('/\<message\>(.*?)\<\/message\>/', $out, $match);
|
|
throw new Exception("Your payment was successful, but we could not setup your account. <a href=\"https://support.netsyms.com\">Click here to contact support.</a> Reason: " . $match[1]);
|
|
}
|
|
// Set quota
|
|
curl_setopt($curl, CURLOPT_URL, "https://dontsell.me/ocs/v1.php/cloud/users/" . urlencode($_SESSION['username']));
|
|
curl_setopt($curl, CURLOPT_POSTFIELDS, "key=quota&value=" . PLANS[$plan]["mb"] . "MB");
|
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
|
|
$out = curl_exec($curl);
|
|
if (strpos($out, "<status>ok</status>") === FALSE) {
|
|
preg_match('/\<message\>(.*?)\<\/message\>/', $out, $match);
|
|
throw new Exception("Your payment was successful, but we could not setup your account. <a href=\"https://support.netsyms.com\">Click here to contact support.</a> Reason: " . $match[1]);
|
|
}
|
|
|
|
// Check if account is active on the same plan
|
|
if ($database->has("billing", ["uid" => $_SESSION['username'], "validuntil[>=]" => date("Y-m-d"), "quota" => PLANS[$plan]["mb"]])) {
|
|
$rows = $database->select("billing", "validuntil", ["uid" => $_SESSION['username'], "validuntil[>=]" => date("Y-m-d"), "quota" => PLANS[$plan]["mb"]]);
|
|
$latest = time();
|
|
foreach ($rows as $r) {
|
|
if (strtotime($r) > $latest) {
|
|
$latest = strtotime($r);
|
|
}
|
|
}
|
|
// Add billing data
|
|
$database->insert("billing", [
|
|
"uid" => $_SESSION['username'],
|
|
"validfrom" => date("Y-m-d"),
|
|
"validuntil" => date("Y-m-d", strtotime("+30 days", $latest)),
|
|
"quota" => PLANS[$plan]["mb"]]
|
|
);
|
|
} else {
|
|
// Add billing data
|
|
$database->insert("billing", [
|
|
"uid" => $_SESSION['username'],
|
|
"validfrom" => date("Y-m-d"),
|
|
"validuntil" => date("Y-m-d", strtotime("+30 days")),
|
|
"quota" => PLANS[$plan]["mb"]]
|
|
);
|
|
}
|
|
} else {
|
|
// Add user
|
|
curl_setopt($curl, CURLOPT_URL, "https://dontsell.me/ocs/v1.php/cloud/users");
|
|
$postfields = "userid=" . urlencode($_SESSION['username']) . "&password=" . urlencode($_SESSION['password']) . "";
|
|
curl_setopt($curl, CURLOPT_POSTFIELDS, $postfields);
|
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
|
|
$out = curl_exec($curl);
|
|
if (strpos($out, "<status>ok</status>") === FALSE) {
|
|
preg_match('/\<message\>(.*?)\<\/message\>/', $out, $match);
|
|
throw new Exception("Your payment was successful, but we could not setup your account. <a href=\"https://support.netsyms.com\">Click here to contact support.</a> Reason: " . $match[1]);
|
|
}
|
|
|
|
// Set quota
|
|
curl_setopt($curl, CURLOPT_URL, "https://dontsell.me/ocs/v1.php/cloud/users/" . urlencode($_SESSION['username']));
|
|
curl_setopt($curl, CURLOPT_POSTFIELDS, "key=quota&value=" . PLANS[$plan]["mb"] . "MB");
|
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
|
|
$out = curl_exec($curl);
|
|
if (strpos($out, "<status>ok</status>") === FALSE) {
|
|
preg_match('/\<message\>(.*?)\<\/message\>/', $out, $match);
|
|
throw new Exception("Your payment was successful, but we could not setup your account. <a href=\"https://support.netsyms.com\">Click here to contact support.</a> Reason: " . $match[1]);
|
|
}
|
|
// Set email
|
|
curl_setopt($curl, CURLOPT_URL, "https://dontsell.me/ocs/v1.php/cloud/users/" . urlencode($_SESSION['username']));
|
|
curl_setopt($curl, CURLOPT_POSTFIELDS, "key=email&value=$email");
|
|
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
|
|
$out = curl_exec($curl);
|
|
if (strpos($out, "<status>ok</status>") === FALSE) {
|
|
preg_match('/\<message\>(.*?)\<\/message\>/', $out, $match);
|
|
throw new Exception("Your payment was successful, but we could not setup your account. <a href=\"https://support.netsyms.com\">Click here to contact support.</a> Reason: " . $match[1]);
|
|
}
|
|
|
|
// Add billing data
|
|
$database->insert("billing", [
|
|
"uid" => $_SESSION['username'],
|
|
"validfrom" => date("Y-m-d"),
|
|
"validuntil" => date("Y-m-d", strtotime("+30 days")),
|
|
"quota" => PLANS[$plan]["mb"]]
|
|
);
|
|
}
|
|
} catch (Exception $e) {
|
|
$error = true;
|
|
$message = "Something went wrong. Details:<br />" . $e->getMessage();
|
|
file_put_contents("../../billingerrors.log", "[" . date("Y-m-d H:i:s") . "]\t" . $_SESSION['username'] . "\t" . $e->getMessage() . "\n", FILE_APPEND);
|
|
}
|
|
unset($_SESSION['username']);
|
|
unset($_SESSION['password']);
|
|
unset($_SESSION['renewing']);
|
|
?>
|
|
<!DOCTYPE HTML>
|
|
<title><?php echo SITE_TITLE; ?></title>
|
|
<?php
|
|
include __DIR__ . '/inc/meta.php';
|
|
include __DIR__ . '/inc/piwik.php';
|
|
?>
|
|
<!-- Wrapper -->
|
|
<div id="wrapper">
|
|
|
|
<?php include __DIR__ . "/inc/header.php"; ?>
|
|
|
|
<!-- Section -->
|
|
<section id="one" class="main alt">
|
|
<header class="accent1">
|
|
<?php
|
|
if ($error === TRUE) {
|
|
echo "<h1>Oops...</h1>";
|
|
} else {
|
|
echo "<h1>Thanks!</h1>";
|
|
}
|
|
?>
|
|
</header>
|
|
<div class="inner alt">
|
|
<div class="content">
|
|
<?php
|
|
if ($error !== TRUE) {
|
|
?>
|
|
<div style="text-align: center;">
|
|
<img src="assets/large-checkmark.svg" style="max-width: 50%; max-height: 200px;"/><br />
|
|
<?php
|
|
echo $message;
|
|
?>
|
|
</div>
|
|
<?php
|
|
} else {
|
|
echo $message;
|
|
}
|
|
?>
|
|
<p>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<?php include __DIR__ . "/inc/footer.php"; ?>
|
|
|
|
</div>
|
|
|
|
<?php include __DIR__ . "/inc/scripts.php"; ?>
|