• 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 ACC IPN Problem

Hekan

New Member
Joined
Jun 14, 2008
Messages
94
Reaction score
0
Hello. I am using PayGol IPN in ZNOTE Acc and everything is fine i get money etc but problem comes up when player try to get points. He got none. Script is not adding points. Could U help me please?

PHP:
<?php
    // Require the functions to connect to database and fetch config values
    require 'config.php';
    require 'engine/database/connect.php';
  
    // Fetch paygol configurations
    $paygol = $config['paygol'];

    // check that the request comes from PayGol server
    if(!in_array($_SERVER['REMOTE_ADDR'],
     array('109.70.3.48', '109.70.3.146', '109.70.3.58', '31.45.23.9'))) {
     header("HTTP/1.0 403 Forbidden");
     die("Error: Unknown IP");
    }

    // get the variables from PayGol system
    $message_id    = $_GET['message_id'];
    $service_id    = $_GET['service_id'];
    $shortcode    = $_GET['shortcode'];
    $keyword    = $_GET['keyword'];
    $message    = $_GET['message'];
    $sender    = $_GET['sender'];
    $operator    = $_GET['operator'];
    $country    = $_GET['country'];
    $custom    = $_GET['custom'];
    $points    = $_GET['points'];
    $price    = $_GET['price'];
    $currency    = $_GET['currency'];
  
    // FUNCTIONS
    function sanitize($data)/* Security reasons */ {
        return htmlentities(strip_tags(mysql_real_escape_string($data)));
    }
    function user_data($user_id)/* account data */ {
        $data = array();
        $user_id = sanitize($user_id);
      
        $func_num_args = func_num_args();
        $func_get_args = func_get_args();
      
        if ($func_num_args > 1)  {
            unset($func_get_args[0]);
          
            $fields = '`'. implode('`, `', $func_get_args) .'`';
            $data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `accounts` WHERE `id` = $user_id;"));
            return $data;
        }
    }
    // Since only paygol.com is able to communicate with this script, we will blindly trust them until proven othervise.
    if ($service_id == $paygol['serviceID']) {
        $new_points = (int)$paygol['points'];
      
        $data = user_data($custom, 'name');
        if ($data['name']) {
            // Sanitize all data: (ok, we do not completely trust them blindly. D:)
            $message_id    = sanitize($message_id);
            $service_id    = sanitize($service_id);
            $shortcode    = sanitize($shortcode);
            $keyword    = sanitize($keyword);
            $message    = sanitize($message);
            $sender    = sanitize($sender);
            $operator    = sanitize($operator);
            $country    = sanitize($country);
            $custom    = sanitize($custom);
            $points    = sanitize($points);
            $price    = sanitize($price);
            $currency    = sanitize($currency);
          
            // Update logs:
            $log_query = mysql_query("INSERT INTO `znote_paygol` VALUES ('', '$custom', '$price', '$new_points', '$message_id', '$service_id', '$shortcode', '$keyword', '$message', '$sender', '$operator', '$country', '$currency')")or die("Log paygol SQL ERROR");
          
            // Give points to user
            $old_points = mysql_result(mysql_query("SELECT `points` FROM `znote_accounts` WHERE `account_id`='$custom';"), 0, 'points');
            echo 'Custom: '. $custom .'<br>';
            echo "Query: SELECT `points` FROM `znote_accounts` WHERE `account_id`='$custom';<br>";
            echo 'Old points: '. $old_points .'<br>';
            $new_points += $old_points;
            echo 'New points: '. $new_points .'<br>';
            $update_account = mysql_query("UPDATE `znote_accounts` SET `points`='$new_points' WHERE `account_id`='$custom'")or die(mysql_error());
            echo 'Account id 2 shold be updated now!';
          
        } else echo ' character data false';
  
    } else echo 'service id wrong';
?>

Thanks for ur help
 
Last edited by a moderator:
Check your config.php you must update your information like serviceID, points, price, etc. Even you can turn on TEST MODE from PayGol and check if you recieve the points. It should works fine and if you're using Linux try to add permissions 777 to the file.
 
My config is configured :( And still no points. And i am on windows

PHP:
    //////////////////
    /// PAYGOL SMS ///
    //////////////////
    // !!! Paygol takes 60%~ of the money, and send aprox 40% to your paypal.
    // You can configure paygol to send each month, then they will send money to you 1 month after recieving 50+ eur.
    $config['paygol'] = array(
        'enabled' => true,
        'serviceID' => 85959,// Service ID from paygol.com
        'currency' => 'EUR',
        'price' => 1.00,
        'points' => 50, // Remember to write same details in paygol.com!
        'name' => '50 Points',
        'returnURL' => "http://".$_SERVER['HTTP_HOST']."/success.php",
        'cancelURL' => "http://".$_SERVER['HTTP_HOST']."/failed.php",
        'ipnURL' => "http://".$_SERVER['HTTP_HOST']."/paygol_ipn.php",
    );
 
Last edited by a moderator:
@narko can you help me ? im having this issue my paypal account is verified, everything is okey there. I enabled the ipn system and put my website/ipn.php link on my paypal account.
(im using paypal) i recive the money but the player never recieve the points can you help me?
i dont know what to edit in this file ...
apart from enable ipn in my paypal account, have it verified and config my config.php file
what more i have to do?
here is my ipn.php (paypal)

PHP:
<?php
    if (gethostbyaddr($_SERVER['REMOTE_ADDR']) !== 'notify.paypal.com') {
        exit();
    }

    // Require the functions to connect to database and fetch config values
    require 'config.php';
    require 'engine/database/connect.php';
  
    // Fetch and sanitize POST and GET values
    function getValue($value) {
        return (!empty($value)) ? sanitize($value) : false;
    }
    function sanitize($data) {
        return htmlentities(strip_tags(mysql_znote_escape_string($data)));
    }
  
    function VerifyPaypalIPN(array $IPN = null){
        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);
        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'];
  
    // 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           = getValue($_POST['txn_id']);
    $receiver_email   = getValue($_POST['receiver_email']);
    $payer_email      = getValue($_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')");
    }
?>


regards
 
Last edited by a moderator:
Make sure the serviceID is correct and that paygol know which URL to send IPN messages to (yourwebsite.com/paygol_ipn.php)

I have also noticed edge cases where $_SERVER['HTTP_HOST'] fail to work properly, in which case just change the config value
PHP:
'ipnURL' => "http://".$_SERVER['HTTP_HOST']."/paygol_ipn.php",
to
PHP:
'ipnURL' => "http://yourwebsite.com/paygol_ipn.php",
 
Make sure the serviceID is correct and that paygol know which URL to send IPN messages to (yourwebsite.com/paygol_ipn.php)

I have also noticed edge cases where $_SERVER['HTTP_HOST'] fail to work properly, in which case just change the config value
PHP:
'ipnURL' => "http://".$_SERVER['HTTP_HOST']."/paygol_ipn.php",
to
PHP:
'ipnURL' => "http://yourwebsite.com/paygol_ipn.php",


sorry my ignoranze @Znote i've saw something aboutservice id where i edit it? i dont have


/ Write your paypal address here, and what currency you want to recieve money in.
$config['paypal'] = array(
'enabled' => true,
'email' => '[email protected]', // Example: [email protected]
'currency' => 'USD',
'points_per_currency' => 10, // 1 currency = ? points? [ONLY used to calculate bonuses]
'success' => "http://".$_SERVER['HTTP_HOST']."/success.php",
'failed' => "http://".$_SERVER['HTTP_HOST']."/failed.php",
'ipn' => "http://".$_SERVER['HTTP_HOST']."http://xxxx.ddns.net/paypal_ipn.php",
'showBonus' => true,
);
 
'success' => "http://".$_SERVER['HTTP_HOST']."/success.php",
'failed' => "http://".$_SERVER['HTTP_HOST']."/failed.php",
'ipn' => "http://".$_SERVER['HTTP_HOST']."http://xxxx.ddns.net/paypal_ipn.php",
all three of these I guess
like this

PHP:
/ Write your paypal address here, and what currency you want to recieve money in.
$config['paypal'] = array(
'enabled' => true,
'email' => '[email protected]', // Example: [email protected]
'currency' => 'USD',
'points_per_currency' => 10, // 1 currency = ? points? [ONLY used to calculate bonuses]
'success' => "http://xxxx.ddns.net/success.php",
'failed' => "http://xxxx.ddns.net/failed.php",
'ipn' => "http://xxxx.ddns.net/paypal_ipn.php",
'showBonus' => true,
);
 
all three of these I guess
like this

PHP:
/ Write your paypal address here, and what currency you want to recieve money in.
$config['paypal'] = array(
'enabled' => true,
'email' => '[email protected]', // Example: [email protected]
'currency' => 'USD',
'points_per_currency' => 10, // 1 currency = ? points? [ONLY used to calculate bonuses]
'success' => "http://xxxx.ddns.net/success.php",
'failed' => "http://xxxx.ddns.net/failed.php",
'ipn' => "http://xxxx.ddns.net/paypal_ipn.php",
'showBonus' => true,
);


thanks @Tarek1337
znote menthioned something about check service id where i edit that?


edit: @Znote im using PAYPAL i dont have serviceID in config.php bro i edited the text as @Tarek1337 told me tested it again but player wont recieve the points

edit2: also i tried this way without succes
$config['paypal'] = array(
'enabled' => true,
'email' => 'xxx[email protected]', // Example: [email protected]
'currency' => 'USD',
'points_per_currency' => 10, // 1 currency = ? points? [ONLY used to calculate bonuses]
'success' => "http://xxxxx.ddns.net/success.php",
'failed' => "http://xxxx.ddns.net/failed.php",
'ipn' => "http://xxxx.ddns.net/paypal_ipn.php",
'showBonus' => true,
 
Last edited:
thanks @Tarek1337
znote menthioned something about check service id where i edit that?


edit: @Znote im using PAYPAL i dont have serviceID in config.php bro i edited the text as @Tarek1337 told me tested it again but player wont recieve the points

edit2: also i tried this way without succes

You mentioned in OP/thread post:
Hello. I am using PayGol IPN in ZNOTE Acc and everything is fine i get money etc but problem...

So I assumed you were having problems with PayGol, not Paypal.
Paygol uses serviceID as well.

And you need to edit the success, failed and IP urls to be correct. Paypal IPN file is just called "ipn.php", not "paypal_ipn.php"

PayGol IPN file is paygol_ipn.php
 
Back
Top