• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Znote AAC 1.4 - [TFS 0.2.13+] & [TFS 0.3.6+/0.4]

ipn.php <<<<


PHP:
<?php
$log = microtime(true) . '.log';

function gesiorLog($file, $text, $data = [])
{
//    file_put_contents($file, $text . PHP_EOL . var_export($data, true) . PHP_EOL, FILE_APPEND);
}

gesiorLog($log, 'start',
    [
    'POST' => $_POST,
    'GET' => $_GET,
    'SERVER' => $_SERVER,
    ]
);

// Require the functions to connect to database and fetch config values
require 'config.php';
require 'engine/database/connect.php';

function VerifyPaypalIPN(array $IPN = null){
    global $log;
    if(empty($IPN)){
        $IPN = $_POST;
    }
    if(empty($IPN['verify_sign'])){
        return null;
    }
    $IPN['cmd'] = '_notify-validate';
    $PaypalHost = (empty($IPN['test_ipn']) ? 'www' : 'www.sandbox').'.paypal.com';
    $cURL = curl_init();
    curl_setopt($cURL, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($cURL, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($cURL, CURLOPT_URL, "https://{$PaypalHost}/cgi-bin/webscr");
    curl_setopt($cURL, CURLOPT_ENCODING, 'gzip');
    curl_setopt($cURL, CURLOPT_BINARYTRANSFER, true);
    curl_setopt($cURL, CURLOPT_POST, true); // POST back
    curl_setopt($cURL, CURLOPT_POSTFIELDS, $IPN); // the $IPN
    curl_setopt($cURL, CURLOPT_HEADER, false);
    curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($cURL, CURLOPT_FORBID_REUSE, true);
    curl_setopt($cURL, CURLOPT_FRESH_CONNECT, true);
    curl_setopt($cURL, CURLOPT_CONNECTTIMEOUT, 30);
    curl_setopt($cURL, CURLOPT_TIMEOUT, 60);
    curl_setopt($cURL, CURLINFO_HEADER_OUT, true);
    curl_setopt($cURL, CURLOPT_HTTPHEADER, array(
        'Connection: close',
        'Expect: ',
    ));
    $Response = curl_exec($cURL);
    $Status = (int)curl_getinfo($cURL, CURLINFO_HTTP_CODE);
    curl_close($cURL);

    gesiorLog($log, 'VerifyPaypalIPN',
        [
        'Response' => $Response,
        'Status' => $Status,
        'URL' => "https://{$PaypalHost}/cgi-bin/webscr",
        ]
    );

    if(empty($Response) or !preg_match('~^(VERIFIED|INVALID)$~i', $Response = trim($Response)) or !$Status){
        return null;
    }
    if(intval($Status / 100) != 2){
        return false;
    }
    return !strcasecmp($Response, 'VERIFIED');
}

// Fetch paypal configurations
$paypal = $config['paypal'];
$prices = $config['paypal_prices'];

gesiorLog($log, 'config',
    [
    'paypal' => $paypal,
    'prices' => $prices,
    ]
);

// Send an empty HTTP 200 OK response to acknowledge receipt of the notification
header('HTTP/1.1 200 OK');

// Build the required acknowledgement message out of the notification just received
$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value) {
    $value = urlencode(stripslashes($value));
    $req  .= "&$key=$value";
}
$postdata = $req;

// Assign payment notification values to local variables
$item_name        = $_POST['item_name'];
$item_number      = $_POST['item_number'];
$payment_status   = $_POST['payment_status'];
$payment_amount   = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id           = $_POST['txn_id'];
$receiver_email   = $_POST['receiver_email'];
$payer_email      = $_POST['payer_email'];
$custom           = (int)$_POST['custom'];

$connectedIp = $_SERVER['REMOTE_ADDR'];
mysql_insert("INSERT INTO `znote_paypal` VALUES ('', '$txn_id', 'Connection from IP: $connectedIp', '0', '0', '0')");

$status = VerifyPaypalIPN();
if ($status) {
    // Check that the payment_status is Completed
    if ($payment_status == 'Completed') {

        
        // Check that txn_id has not been previously processed
        $txn_id_check = mysql_select_single("SELECT `txn_id` FROM `znote_paypal` WHERE `txn_id`='$txn_id'");
        if ($txn_id_check !== false) {
            // Check that receiver_email is your Primary PayPal email
            if ($receiver_email == $paypal['email']) {
                
                $status = true;
                $paidMoney = 0;
                $paidPoints = 0;

                foreach ($prices as $priceValue => $pointsValue) {
                    if ($priceValue == $payment_amount) {
                        $paidMoney = $priceValue;
                        $paidPoints = $pointsValue;
                    }
                }

                if ($paidMoney == 0) $status = false; // Wrong ammount of money
                if ($payment_currency != $paypal['currency']) $status = false; // Wrong currency
                
                // Verify that the user havent messed around with POST data
                if ($status) {
                    // transaction log
                    mysql_insert("INSERT INTO `znote_paypal` VALUES ('', '$txn_id', '$payer_email', '$custom', '".$paidMoney."', '".$paidPoints."')");
                    
                    // Process payment
                    $data = mysql_select_single("SELECT `points` AS `old_points` FROM `znote_accounts` WHERE `account_id`='$custom';");

                    // Give points to user
                    $new_points = $data['old_points'] + $paidPoints;
                    mysql_update("UPDATE `znote_accounts` SET `points`='$new_points' WHERE `account_id`='$custom'");
                }
            }  else {
                $pmail = $paypal['email'];
                mysql_insert("INSERT INTO `znote_paypal` VALUES ('', '$txn_id', 'ERROR: Wrong mail. Received: $receiver_email, configured: $pmail', '0', '0', '0')");
            }
        }
    }
} else {
    // Something is wrong
    mysql_insert("INSERT INTO `znote_paypal` VALUES ('', '$txn_id', 'ERROR: Invalid data. $postdata', '0', '0', '0')");
}
 
Last edited:
It seems that I cannot register any account via the website.. I think it has to do with activating the PHP extension but I'am not sure.

I get this message on the site

Configuration error!
Cannot save cache to memory, but it is configured to do so.
You need to enable PHP extension APCu to enable memory cache.
Install it or set $config['cache']['memory'] to false!
Ubuntu install: sudo apt install php-apcu

I have tried turning cache memory to false but it still doesn't work to register an account. When I'm done creating the account, the page doesn't say anything other than "REGISTER" with big text.

Does anyone know this issue, and how do I enable PHP extension APCu to enable memory cache on Windows 11? I have been searching for this all morning, trying to install PHP and ACPu seperatly, trying Xampp but I can't seem to figure this one out.
 
It seems that I cannot register any account via the website.. I think it has to do with activating the PHP extension but I'am not sure.

I get this message on the site

Configuration error!
Cannot save cache to memory, but it is configured to do so.
You need to enable PHP extension APCu to enable memory cache.
Install it or set $config['cache']['memory'] to false!
Ubuntu install: sudo apt install php-apcu

I have tried turning cache memory to false but it still doesn't work to register an account. When I'm done creating the account, the page doesn't say anything other than "REGISTER" with big text.

Does anyone know this issue, and how do I enable PHP extension APCu to enable memory cache on Windows 11? I have been searching for this all morning, trying to install PHP and ACPu seperatly, trying Xampp but I can't seem to figure this one out.
You could always do a temporary fix and disable the php extension

set $config['cache']['memory'] to false!
 
You could always do a temporary fix and disable the php extension
As I mentioned, I have already tried it. But it doesn't seem to work. So my guess is that it has to load the cache data to be able to register account and other data from the site, or am I misataken here?

The picture I uploaded shows whats happening when I have registered an account. I have tried to login on it but it doesn't register at all.
 

Attachments

  • Skärmbild 2023-09-02 173314.png
    Skärmbild 2023-09-02 173314.png
    478.4 KB · Views: 12 · VirusTotal
Last edited:
As I mentioned, I have already tried it. But it doesn't seem to work. So my guess is that it has to load the cache data to be able to register account and other data from the site, or am I misataken here?

The picture I uploaded shows whats happening when I have registered an account. I have tried to login on it but it doesn't register at all.
Now try, if you are using xampp, try with uniserver, or vice versa.
 
Back
Top