• 11-07-2018, 05:40:16
    #1
    Üyeliği durduruldu
    Merhaba allta bulunan kod içersinde paywant ödeme eklettim fakat referansın ödeme yapınca komisyon vermiyor webmoney gibi diğer ödeme yöntemlerinde sorunsuz çalısıyor bu kodda ne eksik acaba yardım ederseniz sevinirim.Teşekkürler
    <?php
    
    use dezlov\PayPal\IpnListener;
    use Jimmerioles\BitcoinCurrencyConverter\Converter;
    
    class PaymentModel
    {
    
        const PAYMENT_PAYPAL_ID = 1;
        const PAYMENT_STRIPE_ID = 2;
        const PAYMENT_WEBMONEY_ID = 3;
        const PAYMENT_PERFECT_MONEY = 4;
        /*const PAYMENT_SKRILL_ID = 5;*/
        const PAYMENT_GEARY_ID = 6;
        const PAYMENT_PAYZA_ID = 7;
        const PAYMENT_PAYTM_ID = 8;
        const PAYMENT_COINPAYMENTS_ID = 9;
        const PAYMENT_PAYWANT_ID = 10;
    
        public static function paymentInfo()
        {
            $database = DatabaseFactory::getFactory()->getConnection();
            $method = intval($_GET['method']);
            $get = $database->prepare('SELECT minlimit, maxlimit FROM payment_methods WHERE id = :id');
            $get->execute([':id' => $method]);
            echo json_encode($get->fetchObject());
        }
    
        public static function history(int $page = 0, int $itemsPerPage = 20)
        {
            $database = DatabaseFactory::getFactory()->getConnection();
            $get = $database->prepare("SELECT * FROM transactions WHERE user_id = :userid ORDER BY created DESC LIMIT " . $itemsPerPage . " OFFSET " . $itemsPerPage * $page);
            $get->execute(array(':userid' => Session::get('user_id')));
    
            return $get->fetchAll();
        }
    
        public static function paypalsettings()
        {
            $database = DatabaseFactory::getFactory()->getConnection();
            $get = $database->prepare('SELECT * FROM payment_methods WHERE id = 1');
            $get->execute();
            return $get->fetchObject();
        }
    
        public static function gearySettings()
        {
            $database = DatabaseFactory::getFactory()->getConnection();
            $get = $database->prepare('SELECT * FROM payment_methods WHERE id = 6');
            $get->execute();
            return $get->fetchObject();
        }
    
        // START STRIPE METHOD
    
        public static function stripeSettings()
        {
            $database = DatabaseFactory::getFactory()->getConnection();
            $get = $database->prepare('SELECT * FROM payment_methods WHERE id = 2');
            $get->execute();
            return $get->fetchObject();
        }
    
        public static function stripe()
        {
            $secret = self::stripeSettings()->field2;
    
            // Stripe settings
            $stripesettings = self::stripeSettings();
    
            // From post
            $token = Request::post('stripeToken', true);
            $amount = Request::post('amountInCents', true);
            $amountnormal = $amount / 100;
            $email = Request::post('stripeEmail', true);
    
            $username = $_SESSION['user_name'];
    
            $database = DatabaseFactory::getFactory()->getConnection();
    
            if (empty($amount)) {
                Session::add('feedback_negative', Text::get('Amountisemptyenteravalidvalue'));
                return false;
            } elseif (!filter_var($amount, FILTER_VALIDATE_FLOAT)) {
                Session::add('feedback_negative', Text::get('Amountisnotfloatnumber'));
                return false;
            } elseif ($amountnormal > $stripesettings->maxlimit) {
                Session::add('feedback_negative', Text::get('Specifiedamountismorethanmaxlimit')." ($$stripesettings->maxlimit), ".Text::get('pleasetryagain'));
                return false;
            } elseif ($amountnormal < $stripesettings->minlimit) {
                Session::add('feedback_negative', Text::get('Specifiedamountislessthanminlimit')." ($$stripesettings->minlimit), ".Text::get('pleasetryagain'));
                return false;
            } elseif ($stripesettings->enabled == 0) {
                Session::add('feedback_negative', Text::get('StripePaymentMethodisdisabled'));
                return false;
            } else {
    
                    $createCharge = SubscriptionModel::processStripe($secret, $token, $email, $amount, 'usd', "Add funds to account: $username");
                    if(isset($createCharge['success'])) {
    
                        /* Check if its users first payment & user is referred by someone, if yes
                         * someone gets 10% etc of the payment amount depending on table settings->affiliate_comission value
                         */
                        AffiliateModel::rewardReferrer(Session::get('user_id'), $amountnormal, $createCharge['customerId']);
    
                        // Add balance
                        $add = $database->prepare('UPDATE users SET balance = balance + :amount WHERE user_id = :userid');
                        $executeAdd = $add->execute(array(
                            ':userid' => Session::get('user_id'),
                            ':amount' => $amountnormal
                        ));
    
                        // Add transaction history
                        $addtran = $database->prepare('INSERT INTO transactions (user_id, payment_id, complete, created, amount, method) VALUES (:userid, :payment, :complete, :created, :amount, :method)');
                        $executeAddtran = $addtran->execute(array(
                            ':userid' => Session::get('user_id'),
                            ':payment' => $createCharge['customerId'],
                            ':complete' => 1,
                            ':created' => date('Y-m-d H:i:s'),
                            ':amount' => $amountnormal,
                            ':method' => 'Stripe'
                        ));
    
                        if ($executeAdd && $executeAddtran) {
                            Session::add('feedback_positive', Text::get('Youhavesuccessfullyadded').' <b>$' . $amountnormal . '</b> '.Text::get('toyourbalance'));
                        }
                    } else {
                        Session::add('feedback_negative', Text::get('Couldnotprocesspayment'));
                    }
            }
        }
    
        public static function webmoneySettings()
        {
            $database = DatabaseFactory::getFactory()->getConnection();
            $get = $database->prepare('SELECT * FROM payment_methods WHERE id = 3');
            $get->execute();
            return $get->fetchObject();
        }
    
        public static function paywantSettings()
        {
            $database = DatabaseFactory::getFactory()->getConnection();
            $get = $database->prepare('SELECT * FROM payment_methods WHERE id = 10');
            $get->execute();
            return $get->fetchObject();
        }
        public static function paywant(){
          if($_POST){
            error_reporting(0);
            $SiparisID = $_POST["SiparisID"];
            $ExtraData = $_POST["ExtraData"];
            $UserID = $_POST["UserID"];
            $ReturnData = $_POST["ReturnData"];
            $Status = $_POST["Status"];
            $OdemeKanali = $_POST["OdemeKanali"];
            $OdemeTutari = $_POST["OdemeTutari"];
            $NetKazanc = $_POST["NetKazanc"];
            $Hash = $_POST["Hash"];
            $database = DatabaseFactory::getFactory()->getConnection();
            $add = $database->prepare('UPDATE users SET balance = balance + :amount WHERE user_id = :userid');
            $add->execute(array(
                ':userid' => $UserID,
                ':amount' => $OdemeTutari
            ));
            $addtran = $database->prepare('INSERT INTO transactions (user_id, payment_id, complete, created, amount, method) VALUES (:userid, :payment, :complete, :created, :amount, :method)');
            $addtran->execute(array(
                ':userid' => $UserID,
                ':payment' => '',
                ':complete' => 1,
                ':created' => date('Y-m-d H:i:s'),
                ':amount' => $OdemeTutari,
                ':method' => 'PayWant'
            ));
            echo 'OK';
          }
        }
        public static function webmoney()
        {
            // Prerequest flag
            if ($_POST['LMI_PREREQUEST'] == 1) {
                // The merchant's purse to which the customer has made payment. Format is a letter and 12 digits.
                if ($_POST['LMI_PAYEE_PURSE'] == self::webmoneySettings()->field1) echo 'YES';
            } else {
                $key =
                    $_POST['LMI_PAYEE_PURSE'] .
                    $_POST['LMI_PAYMENT_AMOUNT'] .
                    $_POST['LMI_PAYMENT_NO'] .
                    $_POST['LMI_MODE'] .
                    $_POST['LMI_SYS_INVS_NO'] .
                    $_POST['LMI_SYS_TRANS_NO'] .
                    $_POST['LMI_SYS_TRANS_DATE'] .
                    self::webmoneySettings()->field2 .
                    $_POST['LMI_PAYER_PURSE'] .
                    $_POST['LMI_PAYER_WM'];
    
                if (strtoupper(hash('sha256', $key)) != $_POST['LMI_HASH']) {
                    exit;
                }
    
                $userid = filter_var($_POST['userid'], FILTER_SANITIZE_NUMBER_INT);
    
                $database = DatabaseFactory::getFactory()->getConnection();
    
                AffiliateModel::rewardReferrer($userid, $_POST['LMI_PAYMENT_AMOUNT']);
    
                // Add balance
                $add = $database->prepare('UPDATE users SET balance = balance + :amount WHERE user_id = :userid');
                $add->execute(array(
                    ':userid' => $userid,
                    ':amount' => $_POST['LMI_PAYMENT_AMOUNT']
                ));
    
                // Add transaction history
                $addtran = $database->prepare('INSERT INTO transactions (user_id, payment_id, complete, created, amount, method) VALUES (:userid, :payment, :complete, :created, :amount, :method)');
                $addtran->execute(array(
                    ':userid' => $userid,
                    ':payment' => '',
                    ':complete' => 1,
                    ':created' => date('Y-m-d H:i:s'),
                    ':amount' => $_POST['LMI_PAYMENT_AMOUNT'],
                    ':method' => 'WebMoney'
                ));
    
            }
    
        }
    
        public static function processWebmoney()
        {
            // Amount user would like to deposit to account balance
            $price = Request::post('price', true);
            $webmoneysettings = self::webmoneySettings();
            if (empty($price)) {
                Session::add('feedback_negative', Text::get('Amountisemptyenteravalidvalue'));
                return false;
            } elseif (!filter_var($price, FILTER_VALIDATE_FLOAT)) {
                Session::add('feedback_negative', Text::get('Amountisnotfloatnumber'));
                return false;
            } elseif ($price > self::webmoneySettings()->maxlimit) {
                Session::add('feedback_negative', Text::get('Specifiedamountismorethanmaxlimit')." $$webmoneysettings->maxlimit, ".Text::get('pleasetryagain').".");
                return false;
            } elseif ($price < self::webmoneySettings()->minlimit) {
                Session::add('feedback_negative', Text::get('Specifiedamountislessthanminlimit')." $$webmoneysettings->minlimit, ".Text::get('pleasetryagain').".");
                return false;
            } elseif (self::webmoneySettings()->enabled == 0) {
                Session::add('feedback_negative', Text::get('WebmoneyPaymentMethodisdisabled'));
                return false;
            } else {
                $username = Session::get('user_name');
                Session::set('processwebmoney', '1');
                Session::set('LMI_PAYEE_PURSE', self::webmoneySettings()->field1);
                Session::set('LMI_PAYMENT_AMOUNT', $price);
                Session::set('LMI_PAYMENT_DESC', Text::get('Addfundstoaccount').": $username");
                Redirect::to('addfunds/processwebmoney');
            }
        }
    
        public static function perfectmoneySettings()
        {
            $database = DatabaseFactory::getFactory()->getConnection();
            $get = $database->prepare('SELECT * FROM payment_methods WHERE id = 4');
            $get->execute();
            return $get->fetchObject();
        }
    
        public static function perfectmoney()
        {
            $secret = strtoupper(md5(self::perfectmoneySettings()->field2));
    
            $hash = $_POST['PAYMENT_ID'] . ':' .
                $_POST['PAYEE_ACCOUNT'] . ':' .
                $_POST['PAYMENT_AMOUNT'] . ':' .
                $_POST['PAYMENT_UNITS'] . ':' .
                $_POST['PAYMENT_BATCH_NUM'] . ':' .
                $_POST['PAYER_ACCOUNT'] . ':' .
                $secret . ':' .
                $_POST['TIMESTAMPGMT'];
    
            $hash = strtoupper(md5($hash));
    
            if ($hash != $_POST['V2_HASH']) exit('error');
    
            $database = DatabaseFactory::getFactory()->getConnection();
    
            AffiliateModel::rewardReferrer($_POST['PAYMENT_ID'], $_POST['PAYMENT_AMOUNT']);
    
            // Add balance
            $add = $database->prepare('UPDATE users SET balance = balance + :amount WHERE user_id = :userid');
            $add->execute(array(
                ':userid' => $_POST['PAYMENT_ID'],
                ':amount' => $_POST['PAYMENT_AMOUNT']
            ));
    
            // Add transaction history
            $addtran = $database->prepare('INSERT INTO transactions (user_id, payment_id, complete, created, amount, method) VALUES (:userid, :payment, :complete, :created, :amount, :method)');
            $addtran->execute(array(
                ':userid' => $_POST['PAYMENT_ID'],
                ':payment' => '',
                ':complete' => 1,
                ':created' => date('Y-m-d H:i:s'),
                ':amount' => $_POST['PAYMENT_AMOUNT'],
                ':method' => 'Perfect Money'
            ));
        }
        public static function processpaywant()
        {
          $price = Request::post('price', true);
          Session::set('processpaywant', '1');
            $db = DatabaseFactory::getFactory()->getConnection();
            $result = $db->prepare("SELECT * FROM payment_methods WHERE id = ? ");
            $result->execute(array(10));
            $d = $result->fetchAll()[0];
          	$apiKey		  = $d->apikey;	// api anahtarı
          	$apiSecret 	= $d->apisecret;					// api gizli anahtarı
          	$userID		= Session::get('user_id');							// kullanıcı id
          	$userEmail	= Session::get('user_email');		// kullanıcı e-mail adresi
          	$returnData	= $orderid = Session::get('user_name'); 						// sipariş kodu
          	$userIPAdresi = $_SERVER['REMOTE_ADDR'];					// kullanıcının ip adresi
    
          	$hashOlustur = base64_encode(hash_hmac('sha256',"$returnData|$userEmail|$userID".$apiKey,$apiSecret,true));
    
          	$productData = array(
          	"name" =>  $price." TL Bakiye Yukleme ", // Ürün adı
          	"amount" => $price*100, 				// Ürün fiyatı, 10 TL : 1000
          	"extraData" => 1,				// Notify sayfasına iletilecek ekstra veri
          	"paymentChannel" => "1,2,3",	// Bu ödeme için kullanılacak ödeme kanalları
          	"commissionType" => 1			// Komisyon tipi, 1: Yansıt, 2: Üstlen
          	);
    
          	$postData = array(
          		'apiKey' => $apiKey,
          		'hash' => $hashOlustur,
          		'returnData'=> $returnData,
          		'userEmail' => $userEmail,
          		'userIPAddress' => $userIPAdresi,
          		'userID' => $userID,
          		'proApi' => true,
          		'productData' => $productData
          	);
    
          	$curl = curl_init();
          	curl_setopt_array($curl, array(
          	  CURLOPT_URL => "http://api.paywant.com/gateway.php",
          	  CURLOPT_RETURNTRANSFER => true,
          	  CURLOPT_ENCODING => "",
          	  CURLOPT_MAXREDIRS => 10,
          	  CURLOPT_TIMEOUT => 30,
          	  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
          	  CURLOPT_CUSTOMREQUEST => "POST",
          	  CURLOPT_POSTFIELDS =>  http_build_query($postData),
          	));
    
          	$response = curl_exec($curl);
          	$err = curl_error($curl);
    
          	if ($err)
          	  echo "cURL Error #:" . $err;
          	else{
          	  $jsonDecode = json_decode($response,false);
          	  if($jsonDecode->Status == 100){
          		header("Location:". $jsonDecode->Message);
          		// Ortak odeme sayfasina yonlendir
          	  }else
          		echo $response;
          	}
    
          	curl_close($curl);
    
    
          //Redirect::to('addfunds/paywant');
        }
    
        public static function processPerfectmoney()
        {
            // Amount user would like to deposit to account balance
            $price = Request::post('price', true);
            $perfectsettings = self::perfectmoneySettings();
            if (empty($price)) {
                Session::add('feedback_negative', Text::get('Amountisemptyenteravalidvalue'));
                return false;
            } elseif (!filter_var($price, FILTER_VALIDATE_FLOAT)) {
                Session::add('feedback_negative', Text::get('Amountisnotfloatnumber'));
                return false;
            } elseif ($price > self::perfectmoneySettings()->maxlimit) {
                Session::add('feedback_negative', Text::get('Specifiedamountismorethanmaxlimit')." $$perfectsettings->maxlimit, ".Text::get('pleasetryagain').".");
                return false;
            } elseif ($price < self::perfectmoneySettings()->minlimit) {
                Session::add('feedback_negative', Text::get('Specifiedamountislessthanminlimit')." $$perfectsettings->minlimit, ".Text::get('pleasetryagain').".");
                return false;
            } elseif (self::perfectmoneySettings()->enabled == 0) {
                Session::add('feedback_negative', Text::get('PerfectMoneyPaymentMethodisdisabled'));
                return false;
            } else {
    
                Session::set('processperfect', '1');
                Session::set('usd_account', self::perfectmoneySettings()->field1);
                Session::set('payee_name', SiteSettingsModel::sitesettings()->sitename);
                Session::set('payment_amount', $price);
    
                Redirect::to('addfunds/processperfect');
            }
        }
    
        public static function processGeary() {
            // Amount user would like to deposit to account balance
            $price = Request::post('price', true);
            $gearySettings = self::gearySettings();
            if (empty($price)) {
                Session::add('feedback_negative', Text::get('Amountisemptyenteravalidvalue'));
                return false;
            } elseif (!filter_var($price, FILTER_VALIDATE_FLOAT)) {
                Session::add('feedback_negative', Text::get('Amountisnotfloatnumber'));
                return false;
            } elseif ($price > $gearySettings->maxlimit) {
                Session::add('feedback_negative', Text::get('Specifiedamountismorethanmaxlimit')." $$gearySettings->maxlimit, try again.");
                return false;
            } elseif ($price < $gearySettings->minlimit) {
                Session::add('feedback_negative', Text::get('Specifiedamountislessthanminlimit')." $$gearySettings->minlimit, try again.");
                return false;
            } elseif ($gearySettings->enabled == 0) {
                Session::add('feedback_negative', Text::get('MyceliumGearPaymentMethodisdisabled'));
                return false;
            } else {
                $gateway_id = PaymentModel::gearySettings()->field1;
                $gateway_secret = PaymentModel::gearySettings()->field2;
    
                $geary = new Geary($gateway_id, $gateway_secret);
                $keychain_id = $geary->get_last_keychain_id()->last_keychain_id + 1;
                self::updateKeychainGeary($keychain_id);
                $callback_data = (string)Session::get('user_id').'&'.$price;
                $order = $geary->create_order($price, $keychain_id, $callback_data);
    
                if ($order->payment_id) {
                    // Redirect to a payment gateway
                    header("Location: https://gateway.gear.mycelium.com/pay/{$order->payment_id}");
                    die();
                }
            }
        }
    
        public static function geary() {
            $gateway_id = PaymentModel::gearySettings()->field1;
            $gateway_secret = PaymentModel::gearySettings()->field2;
    
            $geary = new Geary($gateway_id, $gateway_secret);
            $order = $geary->check_order_callback();
    
            // Order status was received
            if ($order !== FALSE) {
                // If payment is paid 2 or over-paid 4, proceed
                if($order['status'] == 2 || $order['status'] == 4) {
    
                // get user id from callback_data (get value before &)
                $userid = strtok($order['callback_data'], '&');
                // get price from callback_data (get value after &)
                $receivedPriceUSD = substr($order['callback_data'], strrpos($order['callback_data'], '&') + 1);
    
                // If the user has over-paid, convert paid bitcoin to usd
                if($order['status'] == 4) {
                    $convert = new Converter;
                    $receivedPriceUSD = $convert->toCurrency('USD', $order['amount_paid_in_btc']);
                }
    
                AffiliateModel::rewardReferrer($userid, $receivedPriceUSD, $order['order_id']);
    
                $database = DatabaseFactory::getFactory()->getConnection();
                // Add balance
                $add = $database->prepare('UPDATE users SET balance = balance + :amount WHERE user_id = :userid');
                $add->execute(array(
                    ':userid' => $userid,
                    ':amount' => $receivedPriceUSD
                ));
    
                // Add transaction history
                $addtran = $database->prepare('INSERT INTO transactions (user_id, payment_id, complete, created, amount, method) VALUES (:userid, :payment, :complete, :created, :amount, :method)');
                $addtran->execute(array(
                    ':userid' => $userid,
                    ':payment' => $order['order_id'],
                    ':complete' => 1,
                    ':created' => date('Y-m-d H:i:s'),
                    ':amount' => $receivedPriceUSD,
                    ':method' => 'Mycelium Gear'
                ));
                }
            } else {
                echo 'Signature mismatch';
            }
        }
    
        public static function updateKeychainGeary(int $id) {
            $database = DatabaseFactory::getFactory()->getConnection();
            $update = $database->prepare('UPDATE payment_methods SET field3 = :id WHERE id = 6');
            $update->execute([
                ':id' => $id
            ]);
        }
    
        public static function getUserCustomDefaults()
        {
            $database = DatabaseFactory::getFactory()->getConnection();
    
            $ids = [];
            $values = [];
            $query = $database->query("SELECT id, name, enabled, user_default_enabled FROM payment_methods");
            $rows = $query->fetchAll();
            foreach ($rows as $row) {
                $ids[] = $row->id;
                $values[] = $row;
            }
            return array_combine($ids, $values);
        }
  • 11-07-2018, 05:41:18
    #2
    Üyeliği durduruldu
    kodun devamı
        public static function processPayPal()
        {
            // Amount user would like to deposit to account balance
            $price = Request::post('price', true);
            $paypalsettings = self::paypalsettings();
            if (empty($price)) {
                Session::add('feedback_negative', Text::get('Amountisemptyenteravalidvalue'));
                return false;
            } elseif (!filter_var($price, FILTER_VALIDATE_FLOAT)) {
                Session::add('feedback_negative', Text::get('Amountisnotfloatnumber'));
                return false;
            } elseif ($price > $paypalsettings->maxlimit) {
                Session::add('feedback_negative', Text::get('Specifiedamountismorethanmaxlimit')." $$paypalsettings->maxlimit, try again.");
                return false;
            } elseif ($price < $paypalsettings->minlimit) {
                Session::add('feedback_negative', Text::get('Specifiedamountislessthanminlimit')." $$paypalsettings->minlimit, try again.");
                return false;
            } elseif ($paypalsettings->enabled == 0) {
                Session::add('feedback_negative', Text::get('PayPalPaymentMethodisdisabled'));
                return false;
            } else {
                $customData = ['addfunds', Session::get('user_id')];
                SubscriptionModel::processPayPal(
                    $paypalsettings->field1,
                    Config::get('URL').'page/paypal',
                    Config::get('URL').'addfunds',
                    Config::get('URL').'addfunds?paypal=success',
                    Text::get('Addfundstoaccount').': '.Session::get('user_name').' - '.SiteSettingsModel::sitesettings()->sitename,
                    Text::get('Backto').' '.SiteSettingsModel::sitesettings()->sitename,
                    $price,
                    json_encode($customData)
                );
            }
        }
    
        // PAYZA START
    
        public static function payzaSettings()
        {
            $database = DatabaseFactory::getFactory()->getConnection();
            $get = $database->prepare('SELECT * FROM payment_methods WHERE id = 7');
            $get->execute();
            return $get->fetchObject();
        }
    
        public static function processPayza() {
            // Amount user would like to deposit to account balance
            $price = Request::post('price', true);
            $payzaSettings = self::payzaSettings();
            if (empty($price)) {
                Session::add('feedback_negative', Text::get('Amountisemptyenteravalidvalue'));
                return false;
            } elseif (!filter_var($price, FILTER_VALIDATE_FLOAT)) {
                Session::add('feedback_negative', Text::get('Amountisnotfloatnumber'));
                return false;
            } elseif ($price > $payzaSettings->maxlimit) {
                Session::add('feedback_negative', Text::get('Specifiedamountismorethanmaxlimit')." $$payzaSettings->maxlimit, try again.");
                return false;
            } elseif ($price < $payzaSettings->minlimit) {
                Session::add('feedback_negative', Text::get('Specifiedamountislessthanminlimit')." $$payzaSettings->minlimit, try again.");
                return false;
            } elseif ($payzaSettings->enabled == 0) {
                Session::add('feedback_negative', Text::get('PayzaPaymentMethodisdisabled'));
                return false;
            } else {
                Session::set('ap_merchant', $payzaSettings->field1);
                Session::set('ap_purchasetype', 'service');
                Session::set('ap_itemname', SiteSettingsModel::sitesettings()->sitename);
                Session::set('ap_amount', $price);
                Session::set('ap_currency', 'USD');
                Session::set('ap_quantity', 1);
                Session::set('ap_description', Text::get('Addfundstoaccount').': '.Session::get('user_name').' - '.SiteSettingsModel::sitesettings()->sitename);
                Session::set('apc_1', Session::get('user_id'));
                Session::set('ap_ipnversion', 2);
                Session::set('ap_testmode', 0);
                Session::set('ap_returnurl', Config::get('URL').'addfunds?payza=success');
                Session::set('ap_cancelurl', Config::get('URL').'addfunds');
                Session::set('ap_alerturl', Config::get('URL').'page/payza');
    
                Redirect::to('addfunds/processpayza');
            }
        }
    
        // Payza will send us a token that we need to send back to verify that this request is valid and from payza to prevent hackers.
        public static function payza() {
            $IPN_V2_HANDLER = 'https://secure.payza.com/ipn2.ashx';
            $TOKEN_IDENTIFIER = 'token=';
    
            $token = urlencode($_POST['token']);
    
            $token = $TOKEN_IDENTIFIER . $token;
    
            $response = '';
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $IPN_V2_HANDLER);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $token);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_HEADER, false);
            curl_setopt($ch, CURLOPT_TIMEOUT, 60);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            $response = curl_exec($ch);
            curl_close($ch);
    
            if (strlen($response) > 0) {
                if (urldecode($response) == "INVALID TOKEN") {
                    die();
                } else {
                    $response = urldecode($response);
                    $aps = explode("&", $response);
                    $info = array();
                    foreach ($aps as $ap) {
                        $ele = explode("=", $ap);
                        $info[$ele[0]] = $ele[1];
                    }
    
                    $receivedMerchantEmailAddress = $info['ap_merchant'];
                    $transactionStatus = $info['ap_status'];
                    $testModeStatus = $info['ap_test'];
                    $purchaseType = $info['ap_purchasetype'];
                    $totalAmountReceived = $info['ap_totalamount'];
                    $feeAmount = $info['ap_feeamount'];
                    $netAmount = $info['ap_netamount'];
                    $transactionReferenceNumber = $info['ap_referencenumber'];
                    $currency = $info['ap_currency'];
                    $transactionDate = $info['ap_transactiondate'];
                    $transactionType = $info['ap_transactiontype'];
                    $customerFirstName = $info['ap_custfirstname'];
                    $customerLastName = $info['ap_custlastname'];
                    $customerAddress = $info['ap_custaddress'];
                    $customerCity = $info['ap_custcity'];
                    $customerState = $info['ap_custstate'];
                    $customerCountry = $info['ap_custcountry'];
                    $customerZipCode = $info['ap_custzip'];
                    $customerEmailAddress = $info['ap_custemailaddress'];
                    $myItemName = $info['ap_itemname'];
                    $myItemCode = $info['ap_itemcode'];
                    $myItemDescription = $info['ap_description'];
                    $myItemQuantity = $info['ap_quantity'];
                    $myItemAmount = $info['ap_amount'];
                    $additionalCharges = $info['ap_additionalcharges'];
                    $shippingCharges = $info['ap_shippingcharges'];
                    $taxAmount = $info['ap_taxamount'];
                    $discountAmount = $info['ap_discountamount'];
                    // USER ID BELOW
                    $myCustomField_1 = $info['apc_1'];
                    if ($transactionStatus == 'Success') {
                        // Transaction is successfully paid, now lets do our thing
                        $database = DatabaseFactory::getFactory()->getConnection();
    
                        AffiliateModel::rewardReferrer($myCustomField_1, $totalAmountReceived);
    
                        // Add balance
                        $add = $database->prepare('UPDATE users SET balance = balance + :amount WHERE user_id = :userid');
                        $add->execute(array(
                            ':userid' => $myCustomField_1,
                            ':amount' => $totalAmountReceived
                        ));
    
                        // Add transaction history
                        $addtran = $database->prepare('INSERT INTO transactions (user_id, payment_id, complete, created, amount, method) VALUES (:userid, :payment, :complete, :created, :amount, :method)');
                        $addtran->execute(array(
                            ':userid' => $myCustomField_1,
                            ':payment' => $transactionReferenceNumber,
                            ':complete' => 1,
                            ':created' => date('Y-m-d H:i:s'),
                            ':amount' => $totalAmountReceived,
                            ':method' => 'Payza'
                        ));
                    } else {
                        die();
                    }
                }
            } else {
                //something is wrong, no response is received from Payza
                die();
            }
        }
    
        // PAYZA END
    
        /**
         * @param int $userID
         * @return array    stdClass array of all the payments methods that is turned on
         *                          enabled member tells whether payment method is user enabled or not
         */
        public static function getUserPaymentMethods(int $userID): array
        {
            $defaults = self::getUserCustomDefaults();
            $userValues = UserModel::getPersonalPaymentMethods($userID);
    
            $returnValue = [];
            foreach ($defaults as $d) {
                if ($d->enabled) {
                    $paymentMethod = new stdClass();
                    $paymentMethod->id = $d->id;
    
                    foreach ($userValues as $u) {
                        if ($u->payment_id == $d->id) {
                            $paymentMethod->enabled = $u->enabled;
                        }
                    }
                    if (!isset($paymentMethod->enabled)) {
                        $paymentMethod->enabled = $d->user_default_enabled;
                    }
                    $returnValue[] = $paymentMethod;
                }
    
            }
            return $returnValue;
        }
    
        public static function getEnabledUserPaymentMethods(int $userID): array
        {
            $values = self::getUserPaymentMethods($userID);
            $returnValue = [];
    
            foreach ($values as $v) {
                if ($v->enabled) {
                    $returnValue[] = $v->id;
                }
            }
            return $returnValue;
        }
    
        // Skrill
        /*
            public static function skrillSettings()
            {
                $database = DatabaseFactory::getFactory()->getConnection();
                $get = $database->prepare('SELECT * FROM pm_skrill');
                $get->execute();
                return $get->fetchObject();
            }
    
            public static function skrill()
            {
                // Validate the Moneybookers signature
                $concatFields = $_POST['merchant_id']
                    .$_POST['transaction_id']
                    .strtoupper(md5(self::skrillSettings()->secret))
                    .$_POST['mb_amount']
                    .$_POST['mb_currency']
                    .$_POST['status'];
    
                // Ensure the signature is valid, the status code == 2,
                // and that the money is going to you
                if (strtoupper(md5($concatFields)) == $_POST['md5sig']
                    && $_POST['status'] == 2
                    && $_POST['pay_to_email'] == self::skrillSettings()->email)
                {
                    // Valid transaction.
                    $database = DatabaseFactory::getFactory()->getConnection();
    
                    // Add balance
                    $add = $database->prepare('UPDATE users SET balance = balance + :amount WHERE user_id = :userid');
                    $add->execute(array(
                        ':userid' => $_POST['PAYMENT_ID'],
                        ':amount' => $_POST['PAYMENT_AMOUNT']
                    ));
    
                    // Add transaction history
                    $addtran = $database->prepare('INSERT INTO transactions (user_id, payment_id, complete, created, amount, method) VALUES (:userid, :payment, :complete, :created, :amount, :method)');
                    $addtran->execute(array(
                        ':userid' => $_POST['PAYMENT_ID'],
                        ':payment' => '',
                        ':complete' => 1,
                        ':created' => date('Y-m-d H:i:s'),
                        ':amount' => $_POST['PAYMENT_AMOUNT'],
                        ':method' => 'Perfect Money'
                    ));
                }
                else
                {
                    // Invalid transaction. Bail out
                    exit;
                }
    
            }
    
            public static function processSkrill()
            {
                // Amount user would like to deposit to account balance
                $price = Request::post('price', true);
                $skrillsettings = self::skrillSettings();
                if (empty($price)) {
                    Session::add('feedback_negative', "Amount is empty, enter a valid value and try again.");
                    return false;
                } elseif (!filter_var($price, FILTER_VALIDATE_FLOAT)) {
                    Session::add('feedback_negative', "Amount is not valid, please try again.");
                    return false;
                } elseif ($price > $skrillsettings->maxlimit) {
                    Session::add('feedback_negative', "Specified amount is more than max limit $$skrillsettings->maxlimit, try again.");
                    return false;
                } elseif ($price < $skrillsettings->minlimit) {
                    Session::add('feedback_negative', "Specified amount is less than min limit $$skrillsettings->minlimit, try again.");
                    return false;
                } elseif ($skrillsettings->enabled == 0) {
                    Session::add('feedback_negative', 'Skrill Payment Method is disabled at the moment, try again later.');
                    return false;
                } else {
    
                    $request = new \Skrill\Quick\SkrillRequest();
                    $request->pay_to_email = $skrillsettings->email;
                    $request->amount = $price;
                    $request->currency = 'USD';
                    $request->language = 'EN';
                    $request->prepare_only = '1';
    
                    $client = new \Skrill\Quick\SkrillClient($request);
                    $sessionid = $client->generateSID(); //return SESSION ID
                    $redirecturl = $client->getRedirectUrl(); //return redirect url
    
                    Session::set('processSkrill', 1);
                    Session::set('skrill_amount', $price);
                    Session::set('skrill_sessionid', $redirecturl);
    
                    Redirect::to('addfunds/processskrill');
    
                }
            }
           */
    
        public static function redeemCode($code, $userid)
        {
            if (!self::redeemBlocked($userid)) {
                return false;
            }
            $dbc = DatabaseFactory::getFactory()->getConnection();
            $codeExists = $dbc->prepare("SELECT *FROM balance_code WHERE balance_key = :code");
            $codeExists->execute([':code' => $code]);
            if ($codeExists->rowCount() == 0) {
                self::redeemFailed($userid);
                Session::add('feedback_negative', Text::get('Codewasnotfound'));
                return false;
            }
            $codeObj = $codeExists->fetchObject();
            if (isset($codeObj->user_id)) {
                self::redeemFailed($userid);
                Session::add('feedback_negative', Text::get('Thiscodehasbeenused'));
                return false;
            }
    
            AffiliateModel::rewardReferrer(Session::get('user_id'), $codeObj->amount, $codeObj->balance_key);
    
            $userBalance = $dbc->prepare("UPDATE users SET balance = (balance + :amount) WHERE users.user_id = :userid");
            $userBalance->execute([
                ':amount' => $codeObj->amount,
                ':userid' => $userid
            ]);
            if ($userBalance->rowCount() == 1) {
                $addtran = $dbc->prepare('INSERT INTO transactions (user_id, payment_id, complete, created, amount, method) VALUES (:userid, :payment, :complete, :created, :amount, :method)');
                $addtran->execute(array(
                    ':userid' => $userid,
                    ':payment' => $codeObj->balance_key,
                    ':complete' => 1,
                    ':created' => date('Y-m-d H:i:s'),
                    ':amount' => $codeObj->amount,
                    ':method' => 'Redeem'
                ));
                $usedCode = $dbc->prepare("UPDATE balance_code SET user_id = :userid WHERE balance_key = :code");
                $usedCode->execute([
                    ':userid' => $userid,
                    ':code' => $codeObj->balance_key
                ]);
                $resetFailed = $dbc->prepare("UPDATE redeem_block SET failed_times = 0 WHERE user_id = :userid");
                $resetFailed->execute(['userid' => $userid]);
                return $codeObj->amount;
            }
            return false;
        }
    
        public static function redeemFailed($userid)
        {
            $dbc = DatabaseFactory::getFactory()->getConnection();
            $stmt = $dbc->prepare("INSERT INTO redeem_block(user_id, failed_times, last_failed) VALUES (:userid, 1, NOW()) ON DUPLICATE KEY UPDATE failed_times = (failed_times + 1), last_failed = NOW()");
            return $stmt->execute([
                ':userid' => $userid
            ]);
        }
    
        public static function redeemBlocked($user_id)
        {
            $dbc = DatabaseFactory::getFactory()->getConnection();
            $stmt = $dbc->prepare("SELECT failed_times, UNIX_TIMESTAMP(last_failed) AS last_failed FROM redeem_block WHERE user_id = :userid");
            $stmt->execute([':userid' => $user_id]);
            $user = $stmt->fetchObject();
            if ($user->failed_times >= 3 AND ($user->last_failed > (time() - 30))) {
                Session::add('feedback_negative', Text::get('Toomanyfailedattemptswait').' ' . (30 - (time() - $user->last_failed)) . ' '.Text::get('seconds'));
                return false;
            }
    
            return true;
        }
    
        public static function addRedeemCodes($code_value, $code_number = 1)
        {
            if ($code_value <= 0){
                return 0;
            }
            $dbc = DatabaseFactory::getFactory()->getConnection();
            $stmt = $dbc->prepare("INSERT INTO balance_code(balance_key, amount) VALUES (:code, :amount)");
            $added = [];
            while (sizeof($added) < $code_number){
                $code = Text::random_str(10);
                $stmt->execute([
                    ':code' => $code,
                    ':amount' => $code_value
                ]);
                if($stmt->rowCount() == 1){
                    $added[] = $code;
                }
            }
            if (sizeof($added) == 0){
                return 'No codes';
            }
            return $added;
        }
    
        public static function removeCode($code)
        {
            $dbc = DatabaseFactory::getFactory()->getConnection();
            $stmt = $dbc->prepare("DELETE FROM balance_code WHERE balance_key = :code");
            $stmt->execute([
                ':code' => $code
            ]);
            return ($stmt->rowCount() > 0) ? true : false;
        }
    
        public static function getRedeemCodes($page = 0, $IPP = 25, $query = "")
        {
            $dbc = DatabaseFactory::getFactory()->getConnection();
            $sql = "SELECT balance_code.*, users.user_name as username FROM balance_code LEFT JOIN users ON balance_code.user_id = users.user_id";
            $data = [];
            if (strlen($query) > 0){
                $sql .= (strlen($query) > 0 ? ' WHERE balance_key = :query' : '');
                $data[':query']  = $query;
            }
            $sql .= " ORDER BY user_id ASC, amount ASC LIMIT " . ($page * $IPP) . ', ' . $IPP;
            $stmt = $dbc->prepare($sql);
            $stmt->execute($data);
            return $stmt->fetchAll();
        }
    
        public static function getRedeemCode($code)
        {
            $dbc = DatabaseFactory::getFactory()->getConnection();
            $stmt = $dbc->prepare("SELECT balance_code.*, users.user_name as username FROM balance_code LEFT JOIN users ON balance_code.user_id = users.user_id WHERE balance_key = :code");
            $stmt->execute([':code' => $code]);
            return $stmt->fetchObject();
        }
    
        public static function setRedeemGiven($code, $given)
        {
            $dbc = DatabaseFactory::getFactory()->getConnection();
            $stmt = $dbc->prepare("UPDATE balance_code SET given = :given WHERE balance_key = :code");
            $stmt->execute([':given' => $given, ':code' => $code]);
            return $stmt->rowCount() == 1 ? true : false;
        }
    
        // PAYTM START
        public static function paytmSettings()
        {
            $database = DatabaseFactory::getFactory()->getConnection();
            $get = $database->prepare('SELECT * FROM payment_methods WHERE id = 8');
            $get->execute();
            return $get->fetchObject();
        }
    
        public static function processPaytm() {
            // Amount user would like to deposit to account balance
            $price = Request::post('price', true);
            $settings = self::paytmSettings();
    
            if (!self::paymentFilterCheck($price, $settings)) return false;
    
            $orderid = Session::get('user_id').'_'.self::randomNumber(8);
            $paramList = [];
            $paramList["ORDER_ID"] = $orderid;
            $paramList["CUST_ID"] = Session::get('user_id');
            $paramList["INDUSTRY_TYPE_ID"] = 'Retail';
            $paramList["CHANNEL_ID"] = 'WEB';
            $paramList["TXN_AMOUNT"] = $price;
            $paramList["MID"] = $settings->field1;
            $paramList["WEBSITE"] = $settings->field3;
            $paramList["EMAIL"] = Session::get('user_email');
            $paramList["CALLBACK_URL"] = Config::get('URL').'page/paytm';
    
            Session::set('ORDER_ID', $orderid);
            Session::set('CUST_ID', Session::get('user_id'));
            Session::set('INDUSTRY_TYPE_ID', 'Retail');
            Session::set('CHANNEL_ID', 'WEB');
            Session::set('TXN_AMOUNT', $price);
            Session::set('MID', $settings->field1);
            Session::set('WEBSITE', $settings->field3);
            Session::set('EMAIL', Session::get('user_email'));
            Session::set('CALLBACK_URL', Config::get('URL').'page/paytm');
    
            Session::set('CHECKSUMHASH', Paytm::getChecksumFromArray($paramList,$settings->field2));
    
            Redirect::to('addfunds/processpaytm');
        }
    
        public static function paymentFilterCheck($price, $settings) {
            if (empty($price)) {
                Session::add('feedback_negative', Text::get('Amountisemptyenteravalidvalue'));
                return false;
            } elseif (!filter_var($price, FILTER_VALIDATE_FLOAT)) {
                Session::add('feedback_negative', Text::get('Amountisnotfloatnumber'));
                return false;
            } elseif ($price > $settings->maxlimit) {
                Session::add('feedback_negative', Text::get('Specifiedamountismorethanmaxlimit')." $$settings->maxlimit, try again.");
                return false;
            } elseif ($price < $settings->minlimit) {
                Session::add('feedback_negative', Text::get('Specifiedamountislessthanminlimit')." $$settings->minlimit, try again.");
                return false;
            } elseif ($settings->enabled == 0) {
                Session::add('feedback_negative', Text::get('ChosenPaymentMethodisdisabled'));
                return false;
            }
            return true;
        }
    
        public static function paytm() {
            $paramList = $_POST;
            $paytmChecksum = isset($_POST["CHECKSUMHASH"]) ? $_POST["CHECKSUMHASH"] : ""; //Sent by Paytm pg
            // Verify all parameters received from Paytm pg to your application. Like MID received from paytm pg is same as your application’s MID, TXN_AMOUNT and ORDER_ID
            // are same as what was sent by you to Paytm PG for initiating transaction etc.
            $isValidChecksum = Paytm::verifychecksum_e($paramList, self::paytmSettings()->field2, $paytmChecksum); //will return TRUE or FALSE string.
            if($isValidChecksum == "TRUE") {
                if ($_POST["STATUS"] == "TXN_SUCCESS") {
                    // Transaction is successfully paid, now lets do our thing
                    $database = DatabaseFactory::getFactory()->getConnection();
                    $userid = strtok(Request::post('ORDERID', true), '_');
                    $amountinUSD = Request::post('TXNAMOUNT', true);
                    // If currency is in INR, we need to convert to USD.
                    if (Request::post('CURRENCY', true) == 'INR') {
                        $amountinUSD = PaymentModel::convertCurrency('INR', 'USD', Request::post('TXNAMOUNT', true));
                    }
    
                    AffiliateModel::rewardReferrer($userid, $amountinUSD);
    
                    // Add balance
                    $add = $database->prepare('UPDATE users SET balance = balance + :amount WHERE user_id = :userid');
                    $add->execute(array(
                        ':userid' => $userid,
                        ':amount' => $amountinUSD
                    ));
    
                    // Add transaction history
                    $addtran = $database->prepare('INSERT INTO transactions (user_id, payment_id, complete, created, amount, method) VALUES (:userid, :payment, :complete, :created, :amount, :method)');
                    $addtran->execute(array(
                        ':userid' => $userid,
                        ':payment' => Request::post('TXNID', true),
                        ':complete' => 1,
                        ':created' => date('Y-m-d H:i:s'),
                        ':amount' => $amountinUSD,
                        ':method' => 'Paytm'
                    ));
                    Session::add('feedback_positive', Text::get('Yourpaymenthasbeenprocessed'));
                    !empty(Session::get('user_id')) ? Redirect::to('addfunds') : Redirect::to('index');
                    die();
                } else {
                    Session::add('feedback_negative', Text::get('Yourpaymentfailed'));
                    !empty(Session::get('user_id')) ? Redirect::to('addfunds') : Redirect::to('index');
                    die();
                }
            } else {
                !empty(Session::get('user_id')) ? Redirect::to('addfunds') : Redirect::to('index');
                die();
                //Process transaction as suspicious.
            }
        }
        // PAYTM END
    
        public static function randomNumber($length) {
            $result = '';
    
            for($i = 0; $i < $length; $i++) {
                $result .= mt_rand(0, 9);
            }
    
            return $result;
        }
    
        public static function convertCurrency($from,$to,$amount)
        {
            $data = file_get_contents("https://api.fixer.io/latest?base=$from");
            $data = json_decode($data);
            $to = $data->rates->$to;
            return $amount*$to;
        }
    
        // COINPAYMENTS START
    
        public static function coinPaymentsSettings()
        {
            $database = DatabaseFactory::getFactory()->getConnection();
            $get = $database->prepare('SELECT * FROM payment_methods WHERE id = 9');
            $get->execute();
            return $get->fetchObject();
        }
    
        public static function processCoinpayments() {
            // Amount user would like to deposit to account balance
            $price = Request::post('price', true);
            $settings = self::coinPaymentsSettings();
    
            if (!self::paymentFilterCheck($price, $settings)) return false;
    
            Session::set('merchant', $settings->field1);
            Session::set('cmd', '_pay');
            Session::set('reset', 1);
    
            Session::set('currency', 'USD');
            Session::set('allow_currencies', $settings->field3);
            Session::set('amountf', $price);
            Session::set('item_name', Text::get('Addfundstoaccount').': '.Session::get('user_name').' - '.SiteSettingsModel::sitesettings()->sitename);
            Session::set('allow_quantity', 0);
            Session::set('want_shipping', 0);
            Session::set('cancel_url', Config::get('URL').'addfunds');
            Session::set('custom', Session::get('user_id'));
            Session::set('ipn_url', Config::get('URL').'page/coinpayments');
    
            Redirect::to('addfunds/processcoinpayments');
        }
    
        private static function checkIfPaymentAlreadyCompleted($transaction_id, $userid) {
            $database = DatabaseFactory::getFactory()->getConnection();
            $check = $database->prepare('SELECT * FROM transactions WHERE payment_id = :transid AND user_id = :userid AND complete = 1');
            $check->execute([
                ':transid' => $transaction_id,
                ':userid' => $userid
            ]);
            return $check->rowCount() > 0 ? true : false;
        }
    
        public static function coinpayments() {
            // Fill these in with the information from your CoinPayments.net account.
            $cp_merchant_id = self::coinPaymentsSettings()->field1;
            $cp_ipn_secret = self::coinPaymentsSettings()->field2;
    
            if (!isset($_POST['ipn_mode']) || $_POST['ipn_mode'] != 'hmac') {
                die('IPN Mode is not HMAC');
            }
    
            if (!isset($_SERVER['HTTP_HMAC']) || empty($_SERVER['HTTP_HMAC'])) {
                die('No HMAC signature sent.');
            }
    
            $request = file_get_contents('php://input');
            if ($request === FALSE || empty($request)) {
                die('Error reading POST data');
            }
    
            if (!isset($_POST['merchant']) || $_POST['merchant'] != trim($cp_merchant_id)) {
                die('No or incorrect Merchant ID passed');
            }
    
            $hmac = hash_hmac("sha512", $request, trim($cp_ipn_secret));
            if (!hash_equals($hmac, $_SERVER['HTTP_HMAC'])) {
                //if ($hmac != $_SERVER['HTTP_HMAC']) { <-- Use this if you are running a version of PHP below 5.6.0 without the hash_equals function
                die('HMAC signature does not match');
            }
    
            // HMAC Signature verified at this point, load some variables.
    
            $txn_id = Request::post('txn_id', true);
            $amount1 = Request::post('amount1', true);
            $currency1 = Request::post('currency1', true);
            $status = Request::post('status', true);
    
            //These would normally be loaded from your database, the most common way is to pass the Order ID through the 'custom' POST field.
            $order_currency = 'USD';
            $userid = Request::post('custom', true);
    
            // see if the transaction ID $txn_id has already been handled before at this point
            if (self::checkIfPaymentAlreadyCompleted($txn_id, $userid)) die('Transaction has already been handled.');
    
            // Check the original currency to make sure the buyer didn't change it.
            if ($currency1 != $order_currency) {
                die('Original currency mismatch!');
            }
    
            if ($status >= 100 || $status == 2) {
                // payment is complete or queued for nightly payout, success
                $database = DatabaseFactory::getFactory()->getConnection();
                AffiliateModel::rewardReferrer($userid, $amount1);
    
                // Add balance
                $add = $database->prepare('UPDATE users SET balance = balance + :amount WHERE user_id = :userid');
                $add->execute(array(
                    ':userid' => $userid,
                    ':amount' => $amount1
                ));
    
                // Add transaction history
                $addtran = $database->prepare('INSERT INTO transactions (user_id, payment_id, complete, created, amount, method) VALUES (:userid, :payment, :complete, :created, :amount, :method)');
                $addtran->execute(array(
                    ':userid' => $userid,
                    ':payment' => $txn_id,
                    ':complete' => 1,
                    ':created' => date('Y-m-d H:i:s'),
                    ':amount' => $amount1,
                    ':method' => 'Coinpayments'
                ));
            }
            die('IPN OK');
        }
    
        // COINPAYMENTS END
    }