<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>

<div class="paymentbox">


<?php 

date_default_timezone_set('Asia/Tehran');
ini_set("log_errors", 1);
ini_set("error_log", "./z_php_error.log");
set_exception_handler(function($e) {
    error_log(
        date('Y-m-d H:i:s').' | '.$_SERVER['REQUEST_URI'].' | '.$e->getMessage().PHP_EOL,
        3,
        "./z_sql_error.log"
    );
});
//Get required configs:
require('../../../majoris_config.php');

foreach ( glob("../class/*.php" ) as $filename )  include $filename;
db::init();
foreach ( glob("../libs/*.php" ) as $filename )  include $filename;

$functions = new ApiFunctions;
if(!isset($_GET['app_id']))
{
    $success = false;
    $reasontext = "اپ آیدی ارسال نشده است.";
}elseif(!isset($_GET['reference_token'])){
    $success = false;
    $reasontext = "نام درگاه ارسال نشده است.";
}
else
{
    $app_id          = $_GET['app_id'];
    $reference_token = $_GET['reference_token'];

    $app_exist = db::exist( "SELECT * FROM `apps` WHERE `id` = ? ", [$app_id] );
    if(!$app_exist){
        $success = false;
        $reasontext = "اپ آیدی ارسال شده اشتباه است.";
    }

    $purchase_exist = db::exist( 'SELECT * FROM `purchases` WHERE reference_token = ? AND app_id = ?', [$reference_token, $app_id] );
    if(!$purchase_exist){
        $success = false;
        $reasontext = "فاکتور مورد نظر یافت نشد.";
    }
    if($app_exist && $purchase_exist){
        $app         = db::fetch( "SELECT * FROM `apps` WHERE `id` = ? ", [$app_id] );
        $panelconfig = db::fetch("SELECT `data` FROM `panelconfig` WHERE app_id = ?",[$app_id]);
        $config      = json_decode($panelconfig['data'], TRUE);
        $purchase = db::fetch( 'SELECT * FROM `purchases` WHERE reference_token = ? AND app_id = ?', [$reference_token, $app_id] );
        $gateway  = $purchase['gateway'];
        
        //temp fix for show user custom title and desc in atdes payment:
        $gatewaysAr = db::fetch("SELECT `data` FROM `appconfig` WHERE app_id = ? AND `type` = ?",[$app_id, "gateways"]);
        $gateways      = json_decode($gatewaysAr['data'], TRUE);
        if ($gateway === 'offline_atdes') {
            foreach ($gateways as $g) {
                if ($g['code'] === 'offline_atdes') {
                    $atdes_gateway_title = $g['title'];
                    $atdes_gateway_desc  = $g['desc'];
                    break;
                }
            }
        }
        //end of temp fix
        
        $gateway_fa = $gateway;
        switch ($gateway) {
            case 'zarinpal':
                $gateway_fa = "زرین پال";
                break;
            case 'payping':
                $gateway_fa = "پی پینگ";
                break;
            case 'wallet':
                $gateway_fa = "کیف پول";
                break;
            case 'offline_transfer':
                $gateway_fa = "انتقال وجه بانکی";
                break;
            case 'offline_atdes':
                $gateway_fa = "پرداخت در محل";
                break;
            case 'mellat':
                $gateway_fa = "به‌پرداخت ملت";
                break;
        }

        $payment_checking = false;
        $atdes_payment    = false;
        $submit_purchase  = false;
        $success          = false;
        $canceled         = false;
        $id               = $purchase['id'];
        $user_id          = $purchase['user_id'];

        if($purchase['status']!='paid'){
            if($purchase['amount'] == 0){

                $success = true;
                $functions -> completeSuccessfulPurchase($id, $app_id, $user_id, $purchase['purchase_type'], $purchase['type_id'], "", $gateway, $gateway_fa);
                $submit_purchase = true;
    
            } else {
                switch ($gateway) {

                    case 'zarinpal':

                        $merchant_id = $config['zarinpal_merchant_id'];
        
                        if ($_GET['Status'] == 'OK') {
                            $authority    = $_GET['Authority'];
                            //https://docs.zarinpal.com/paymentGateway/guide/#%D8%A7%D8%B1%D8%B3%D8%A7%D9%84-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA
                            // According to rest request, we need to pass the price in Rial not Toman (Old Soap client accept price in toman so it is ok in version 1 api)
                            $zarin_amount = $purchase['amount'].'0';
                            
                            $data = array("merchant_id" => $merchant_id, "authority" => $authority, "amount" => $zarin_amount);
                            $jsonData = json_encode($data);
                            $ch = curl_init('https://api.zarinpal.com/pg/v4/payment/verify.json');
                            curl_setopt($ch, CURLOPT_USERAGENT, 'ZarinPal Rest Api v4');
                            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
                            curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
                            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                            curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                                'Content-Type: application/json',
                                'Content-Length: ' . strlen($jsonData)
                            ));
                            
                            $result = curl_exec($ch);
                            curl_close($ch);
                            $result = json_decode($result, true);
        
                            if ($result['data']['code'] == 100) {
                                
                                $tracking_code = $result['data']['ref_id'];
                                $success       = true;
                                $functions -> completeSuccessfulPurchase($id, $app_id, $user_id, $purchase['purchase_type'], $purchase['type_id'], $tracking_code, $gateway, $gateway_fa);
                                $submit_purchase = true;
                    
                            }else if ($result['data']['code'] == 101) {
                    
                                $error_code    = $result['data']['code'];
                                $reasontext    = $functions -> getErrorReasonForZarinPal($error_code);
                                $success       = true;
                                $error_reason  = "کد: ". "(" . $error_code .") ". $reasontext;
                                $tracking_code = $result['data']['ref_id'];
                                $log_data      = "پرداخت موفق بود اما درخواست verify peyment مجدد فراخوانی شده است. کد مرجع بانک : " . $tracking_code;
                                $functions -> savePurchaseLog("زرین پال", $log_data, $purchase['id'], $app_id );
                    
                            } else {
                    
                                $error_code    = $result['data']['code'];
                                $tracking_code = $result['data']['ref_id'];
                                $success       = false;
                                $reasontext    = $functions -> getErrorReasonForZarinPal($error_code);
                                $error_reason  = "علت خطا: ". "(" . $error_code .") ". $reasontext;
                                $log_data      = "پرداخت ناموفق بود. " . $error_reason;
                                $functions -> savePurchaseLog("زرین پال", $log_data, $purchase['id'], $app_id );
                            }
                        }else{
                            
                            $canceled  = true;
                            $success   = false;
                            $authority = $_GET['Authority'];
                            $log_data = "پرداخت توسط کاربر انصراف داده شد. کد هویتی پرداخت: " . $authority;
                            $functions -> savePurchaseLog("زرین پال" , $log_data, $purchase['id'], $app_id );
                        }
                        break;

                    case 'payping':

                        $tokenCode = $config['payping_token'];
                        $amount    = $purchase['amount'];
        
                        if( isset( $_GET['refid'] ) ){
                            $refid = $_GET['refid'];
                        }else{
                            $refid = 0;
                        }               
                        // Saving refid just for payping, since we have access to it just after returning from the payping terminal
                        $uret = db::update('purchases' , [ 'tracking_code' => $refid ] , " `id` = ".$id );
                        $uret = is_numeric($uret); 
                        if(!$uret){
                            $log_data = "تلاش برای ذخیره RefId به عنوان کدرهگیری قبل از ارسال درخواست تایید به درگاه ناموفق بود، ولی عملیات تایید ادامه یافت.";
                            $functions -> savePurchaseLog("پی پینگ", $log_data, $id, $app_id );
                        } 
        
                        $data = array(
                            'amount' => $amount,
                            'refId' => $refid
                        );
                        try {
                            $curl = curl_init();
                            curl_setopt_array($curl, array(
                                CURLOPT_URL => "https://api.payping.ir/v2/pay/verify",
                                CURLOPT_RETURNTRANSFER => true,
                                CURLOPT_ENCODING => "",
                                CURLOPT_MAXREDIRS => 10,
                                CURLOPT_TIMEOUT => 30,
                                CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                                CURLOPT_CUSTOMREQUEST => "POST",
                                CURLOPT_POSTFIELDS => json_encode($data),
                                CURLOPT_HTTPHEADER => array(
                                    "accept: application/json",
                                    "authorization: Bearer " . $tokenCode,
                                    "cache-control: no-cache",
                                    "content-type: application/json",
                                ),
                            ));
                            $response = curl_exec($curl);
                            $err      = curl_error($curl);
                            $header   = curl_getinfo($curl);
                            curl_close($curl);
                            if ($err) {
                                $msg = 'خطا در ارتباط به پی‌پینگ : شرح خطا ' . $err;
                                $success = false;
                                $reasontext = $msg;
                                $error_reason = "علت خطا: ".$msg ;
                                $log_data = "پرداخت ناموفق بود. علت خطا: " . $error_reason;
                                $functions -> savePurchaseLog("پی پینگ", $log_data, $id, $app_id );
                            } else {
                                if ($header['http_code'] == 200) {
                                    $response = json_decode($response, true);
                                    if (isset($refid) and $refid != '') {
                                        $success = true;
                                        $functions -> completeSuccessfulPurchase($id, $app_id, $user_id, $purchase['purchase_type'], $purchase['type_id'], $refid, $gateway, $gateway_fa);
                                        $submit_purchase = true;
                                    } else {
                                        $log_data = 'متاسفانه سامانه قادر به دریافت کد پیگیری نمی باشد! نتیجه درخواست : ' . $header['http_code'];
                                        $functions -> savePurchaseLog("پی پینگ", $log_data, $id, $app_id );
                                    }
                                } elseif ($header['http_code'] == 400) {
                                    $success = false;
                                    $resp = json_decode(trim($response), true);
                                    $errorKey = key($resp);
                                    $errorDesc = $resp[$errorKey];
                                    $reasontext = $errorDesc;
                                    $error_reason  = "علت خطا: ". "(" . $errorKey .") ". $reasontext;
                                    $log_data = ' تراکنش ناموفق بود- شرح خطا : ' . $error_reason;
                                    $functions -> savePurchaseLog("پی پینگ", $log_data, $id, $app_id );
                                } else {
                                    $success = false;
                                    $log_data = ' تراکنش ناموفق بود- شرح خطا : ' . $header['http_code'];
                                    $functions -> savePurchaseLog("پی پینگ", $log_data, $id, $app_id );
                                }
                            }
                        } catch (Exception $e) {
                            $success = false;
                            $log_data = ' تراکنش ناموفق بود- شرح خطا سمت برنامه شما : ' . $e->getMessage();
                            $functions -> savePurchaseLog("پی پینگ", $log_data, $id, $app_id );
                        }
                        break;

                    case 'mellat':

                        $terminal_id = $config['mellat_terminal_id'];
                        $user_name = $config['mellat_user_name'];
                        $user_password = $config['mellat_user_password'];
                        $amount    = $purchase['amount'];
        
                        $resCode = $_POST['ResCode'];

                        if($resCode == "0"){ //payment is ok by posted data

                            $orderId 		= $_POST['SaleOrderId'];
                            $verifySaleOrderId 		= $_POST['SaleOrderId'];
                            $verifySaleReferenceId 	= $_POST['SaleReferenceId'];

                            // Saving saleReferenceId just for mellat, since we have access to it just after returning from the payping terminal
                            $uret = db::update('purchases' , [ 'tracking_code' => $verifySaleReferenceId ] , " `id` = ".$id );
                            $uret = is_numeric($uret); 
                            if(!$uret){
                                $log_data = "تلاش برای ذخیره RefId به عنوان کدرهگیری قبل از ارسال درخواست تایید به درگاه ناموفق بود، ولی عملیات تایید ادامه یافت.";
                                $functions -> savePurchaseLog("ملت", $log_data, $id, $app_id );
                            }
                            
                            $parameters = array(
                                'terminalId' => $terminal_id,
                                'userName' => $user_name,
                                'userPassword' => $user_password,
                                'orderId' => $orderId,
                                'saleOrderId' => $verifySaleOrderId,
                                'saleReferenceId' => $verifySaleReferenceId
                            );

                            $client = new nusoap_client('https://bpm.shaparak.ir/pgwchannel/services/pgw?wsdl');
                            $namespace='http://interfaces.core.sw.bps.com/';
                            $result = $client->call('bpVerifyRequest', $parameters, $namespace);
                            $err = $client->getError();
                            if($err){
                                $msg = 'خطا در وریفای پرداخت به‌پرداخت ملت : شرح خطا ' . $err;
                                $success = false;
                                $reasontext = $msg;
                                $error_reason = "علت خطا: ".$msg ;
                                $log_data = "پرداخت ناموفق بود. علت خطا: " . $error_reason;
                                $functions -> savePurchaseLog("به‌پرداخت ملت", $log_data, $id, $app_id );
                            }else{
                                
                                if($result == "0"){

                                    //verify is done
                                    //now settle payment for final step
                                    $result = $client->call('bpSettleRequest', $parameters, $namespace);
                                    $err = $client->getError();
                                    if($err){
                                        $msg = 'خطا در (Settle1) پرداخت به‌پرداخت ملت : شرح خطا ' . $err;
                                        $success = false;
                                        $reasontext = $msg;
                                        $error_reason = "علت خطا: ".$msg ;
                                        $log_data = "پرداخت ناموفق بود. علت خطا: " . $error_reason;
                                        $functions -> savePurchaseLog("به‌پرداخت ملت", $log_data, $id, $app_id );
                                    }else{
                                        
                                        if($result == "0"){
                                            //mellat payment was all ok
                                            $tracking_code = $verifySaleReferenceId;
                                            $success = true;
                                            $functions -> completeSuccessfulPurchase($id, $app_id, $user_id, $purchase['purchase_type'], $purchase['type_id'], $tracking_code, $gateway, $gateway_fa);
                                            $submit_purchase = true;
                                        }else{
                                            $mError = $functions->getErrorReasonForMellat($result);
                                            $msg = 'خطا در (Settle2) پرداخت به‌پرداخت ملت : شرح خطا ' . $mError;
                                            $success = false;
                                            $reasontext = $msg;
                                            $error_reason = "علت خطا: ".$msg ;
                                            $log_data = "پرداخت ناموفق بود. علت خطا: " . $error_reason;
                                            $functions -> savePurchaseLog("به‌پرداخت ملت", $log_data, $id, $app_id );
                                        }
                                        
                                    }

                                }else if ($result == "43"){
                                    
                                    //verify is repeated
                                    $reasontext    = $functions -> getErrorReasonForMellat($result);
                                    $success       = true;
                                    $error_reason  = "کد: ". "(" . $result .") ". $reasontext;
                                    $tracking_code = $verifySaleReferenceId;
                                    $log_data = "پرداخت موفق بود اما درخواست verify peyment مجدد فراخوانی شده است. کد مرجع بانک : " . $tracking_code;
                                    $functions -> savePurchaseLog("به‌پرداخت ملت", $log_data, $purchase['id'], $app_id );

                                }else{

                                    $mError = $functions->getErrorReasonForMellat($resCode);
                                    $msg = 'خطا در پرداخت به‌پرداخت ملت: ' . $mError;
                                    $success = false;
                                    $reasontext = $msg;
                                    $error_reason = "علت خطا: ".$msg ;
                                    $log_data = "پرداخت ناموفق بود. علت خطا: " . $error_reason;
                                    $functions -> savePurchaseLog("به‌پرداخت ملت", $log_data, $id, $app_id );
                                
                                }

                                
                            }

                        }else{

                            $mError = $functions->getErrorReasonForMellat($resCode);
                            $msg = 'خطا در پرداخت به‌پرداخت ملت: ' . $mError;
                            $success = false;
                            $reasontext = $msg;
                            $error_reason = "علت خطا: ".$msg ;
                            $log_data = "پرداخت ناموفق بود. علت خطا: " . $error_reason;
                            $functions -> savePurchaseLog("به‌پرداخت ملت", $log_data, $id, $app_id );
                        
                        }

                        break;

                    case 'wallet':

                        $amount    = $purchase['amount'];
                        $appuser = db::fetch("SELECT * FROM users WHERE id = ? AND app_id = ?" , [ $user_id, $app_id ] );
                        if(!$appuser){
                            $msg = 'خطا : عدم امکان خرید از کیف پول شرح خطا : کاربر مورد نظر یافت نشد.';
                            $success = false;
                            $reasontext = "کاربر مورد نظر یافت نشد";
                            $error_reason = "علت خطا:کاربر مورد نظر یافت نشد ";
                            $log_data = "پرداخت ناموفق بود. علت خطا:کاربر مورد نظر یافت نشد ";
                            $functions -> savePurchaseLog("کیف پول", $log_data, $id, $app_id );
                        } else {
                            $wallet_balance = $appuser['wallet_balance'];
                            if($wallet_balance < $amount ){
                                $msg = 'خطا : عدم امکان خرید از کیف پول شرح خطا : موجودی کیف پول کافی نیست.';
                                $success = false;
                                $reasontext = "موجودی کیف پول کافی نیست";
                                $error_reason = "علت خطا:موجودی کیف پول کافی نیست ";
                                $log_data = "پرداخت ناموفق بود. علت خطا:موجودی کیف پول کافی نیست. ";
                                $functions -> savePurchaseLog("کیف پول", $log_data, $id, $app_id );
                            } else {
    
                                $res = db::query("UPDATE `users` SET `wallet_balance` = `wallet_balance` - ? WHERE id = ? AND app_id = ?" , [ $amount, $user_id, $app_id ]);
    
                                if(!$res){
                                    $msg = 'خطا : عدم امکان خرید از کیف پول شرح خطا : به روزرسانی مقدار کیف پول انجام نشد..';
                                    $success = false;
                                    $reasontext = "به روزرسانی مقدار کیف پول انجام نشد";
                                    $error_reason = "علت خطا:به روزرسانی مقدار کیف پول انجام نشد ";
                                    $log_data = "پرداخت ناموفق بود. علت خطا:به روزرسانی مقدار کیف پول انجام نشد. ";
                                    $functions -> savePurchaseLog("کیف پول", $log_data, $id, $app_id );
                                }else{
                                    $wallet_status = 'مبلغ '.$amount.' تومان از کیف پول شما برداشت شد. موجودی کنونی کیف پول شما: '.($wallet_balance - $amount).' تومان';
                                    $success = true;
                                    $refid = $purchase['reference_token'];
                                    $functions -> completeSuccessfulPurchase($id, $app_id, $user_id, $purchase['purchase_type'], $purchase['type_id'], $refid, $gateway, $gateway_fa);
                                    $submit_purchase = true;
                                }
                            }
                        }
                        break;  

                    case 'offline_transfer':

                        $amount = $purchase['amount'];

                        $current_checking_purchase = db::exist("SELECT * FROM `purchases` WHERE `status` = ? AND id = ?",["checking",$purchase['id']]);
                        
                        if(!$current_checking_purchase){

                            $res = db::update('purchases' , ['status' => "checking"] , " `id` = ".$purchase['id'] );
                            if(!$res){

                                $msg = 'خطا : عدم امکان خرید از طریق انتقال بین بانکی شرح خطا : عدم بروز شدن پرداخت به وضعیت در حال بررسی.';
                                $success = false;
                                $reasontext = "عدم بروزشدن وضعیت پرداخت به در حال بررسی";
                                $error_reason = "عدم بروزشدن پرداخت به وضعیت در حال بررسی";
                                $log_data = "عدم بروز شدن پرداخت به وضعیت در حال بررسی";
                                $functions -> savePurchaseLog("انتقال وجه بانکی", $log_data, $id, $app_id );
                            
                            } else {

                                $success = true;
                                $payment_checking = true;
                                if($purchase['purchase_type'] == "order"){
                                    //make order checking too! its an offline_transfer order!
                                    $order_id = $purchase['type_id'];
                                    $uret = db::update('orders', ['status' => "checking"], " `id` = " . $order_id);
                                }
                            
                            }

                        }else{

                            //already checking purchase exist
                            //do nothing just show purchase is checking to user
                            $success = true;
                            $payment_checking = true;
                            
                        }
                        
                        break;

                    case 'offline_atdes':

                        $amount = $purchase['amount'];
                        
                        if($purchase['purchase_type'] != "order"){

                            //cancel the payment task!
                            //atdes gateway is only available for order type
                            $msg = 'خطا : عدم امکان خرید از طریق پرداخت در محل شرح خطا : تنها پرداخت سفارشات با سیستم پرداخت در محل مقدور است.';
                            $success = false;
                            $reasontext = "تنها پرداخت سفارشات با سیستم پرداخت در محل مقدور است";
                            $error_reason = "تنها پرداخت سفارشات با سیستم پرداخت در محل مقدور است";
                            $log_data = "تنها پرداخت سفارشات با سیستم پرداخت در محل مقدور است";
                            $functions -> savePurchaseLog("پرداخت در محل", $log_data, $id, $app_id );
                        
                        }else if($functions->checkIfOrderHasAnyVirtualProduct($purchase['type_id'])){
                            
                            //cancel the payment task!
                            //atdes gateway is onlu available for physcial or services order
                            $msg = 'خطا : عدم امکان خرید از طریق پرداخت در محل شرح خطا : تنها پرداخت در محل سفارشات بدون محصول مجازی ممکن است.';
                            $success = false;
                            $reasontext = "تنها پرداخت در محل سفارشات بدون محصول مجازی ممکن است";
                            $error_reason = "تنها پرداخت در محل سفارشات بدون محصول مجازی ممکن است";
                            $log_data = "تنها پرداخت در محل سفارشات بدون محصول مجازی ممکن است";
                            $functions -> savePurchaseLog("پرداخت در محل", $log_data, $id, $app_id );
                        
                        }else{

                            $res = db::update('purchases' , ['status' => "checking"] , " `id` = ".$purchase['id'] );
                            if(!$res){
                                $msg = 'خطا : عدم امکان خرید از طریق پرداخت در محل شرح خطا : عدم بروز شدن پرداخت به وضعیت در حال بررسی.';
                                $success = false;
                                $reasontext = "عدم بروزشدن وضعیت پرداخت به در حال بررسی";
                                $error_reason = "عدم بروزشدن پرداخت به وضعیت در حال بررسی";
                                $log_data = "عدم بروز شدن پرداخت به وضعیت در حال بررسی";
                                $functions -> savePurchaseLog("پرداخت در محل", $log_data, $id, $app_id );
                            
                            } else {

                                //make order working! its an atdes order!
                                $success = true;
                                $atdes_payment = true;
                                $refid = "";
                                $functions -> completeSuccessfulPurchase($id, $app_id, $user_id, $purchase['purchase_type'], $purchase['type_id'], $refid, $gateway, $gateway_fa);
                                
                            }

                        }
                        
                        break;

                    default:

                        $success = false;
                        $reasontext = "نام درگاه، اشتباه ارسال شده یا پشتیبانی نمیشود.";
                        break;

                }
            }

        } else {

            $msg = 'خطا : عدم امکان خرید شرح خطا : این تراکنش قبلا تایید شده است.';
            $success = true;
            $reasontext = "این تراکنش قبلا تایید شده است";
            $error_reason = "علت خطا:این تراکنش قبلا تایید شده است ";
            $log_data = "پرداخت ناموفق بود. علت خطا:این تراکنش قبلا تایید شده است. ";
            $functions -> savePurchaseLog($gateway_fa, $log_data, $id, $app_id );  

        }

    }
}

echo '<div class="appname">'. $config['appname'] .'</div>';


if($success && $submit_purchase){

    echo '<div class="statusok">'. $config['zarinpal_payment_ok'] .'</div>';
    if(isset($wallet_status)){echo '<div class="wallet-status">'.$wallet_status.'</div>';}
    if(isset($tracking_code)){echo '<div class="tracking">کد رهگیری: '. $tracking_code .'</div>';}

}else if($success && $payment_checking){

    echo '<div class="statusok">پرداخت در وضعیت در حال بررسی قرار گرفت</div>';
    echo '<div class="reason">پس از تایید مدیر پرداخت شما به وضعیت پرداخت شده تغییر خواهد کرد</div>';
    
}else if($success && $atdes_payment){

    echo '<div class="statusok">'. 'سفارش با روش ' . $atdes_gateway_title . ' ثبت شد' .'</div>';
    echo '<div class="reason">'.$atdes_gateway_desc.'</div>';
    
}else if ($success){

    echo '<div class="statusok">'. $config['zarinpal_payment_ok2'] .'</div>';
    if(isset($tracking_code)){echo '<div class="tracking">کد رهگیری: '. $tracking_code .'</div>';}
    if(isset($reasontext) && $reasontext != ""){echo '<div class="reason">'.$reasontext.'</div>';}

}else if ($canceled && !$success){
    
    echo '<div class="statusnok">'. $config['zarinpal_payment_nok_canceled'] .'</div>';
    echo '<div class="descred">'. $config['zarinpal_payment_nok_explain'] .'</div>';

}else{

    echo '<div class="statusnok">'. $config['zarinpal_payment_nok'] .'</div>';
    if(isset($reasontext) && $reasontext != ""){echo '<div class="reason">'.$reasontext.'</div>';}
    echo '<div class="descred">'. $config['zarinpal_payment_nok_explain'] .'</div>';

}

echo '<div class="desc">'. $config['zarinpal_payment_desc'] .'</div>';


//protocol addresses will not work if . or _ exists in href url so we replace it all:
$rawpackagename = str_replace(".","",$app['packagename']);
$rawpackagename = str_replace("_","",$rawpackagename);
echo '<a class="backbtn" href = "approcket'.$rawpackagename.'://'.$app['packagename'].'">'.$config['zarinpal_payment_btn_text'].'</a>';


?>

</div>
</body>
</html>