<?php

if(isset($_POST['hash'])){

$post = $_POST;


  
$paymax_config = array(
	'userName'=>$payment["paymax_user"],
	'password'=>$payment["paymax_key"],
	'shopCode'=>$payment["paymax_magaza"],
	'hash'=>$payment["paymax_hash"],
);

$post = array();
$post['status'] = $_POST['status'];
$post['paymentStatus'] = $_POST['paymentStatus'];
$post['hash'] = $_POST['hash'];
$post['paymentCurrency'] = $_POST['paymentCurrency'];
$post['paymentAmount'] = $_POST['paymentAmount'];
$post['paymentType'] = $_POST['paymentType'];
$post['paymentTime'] = $_POST['paymentTime'];
$post['conversationId'] = $_POST['conversationId'];
$post['orderId'] = $_POST['orderId'];
$post['shopCode'] = $_POST['shopCode'];
$post['orderPrice'] = $_POST['orderPrice'];
$post['productsTotalPrice'] = $_POST['productsTotalPrice'];
$post['productType'] = $_POST['productType'];
$post['callbackOkUrl'] = $_POST['callbackOkUrl'];
$post['callbackFailUrl'] = $_POST['callbackFailUrl'];

if (empty($post['status']) || empty($post['paymentStatus']) || empty($post['hash']) || empty($post['paymentCurrency']) || empty($post['paymentAmount']) || empty($post['paymentType']) || empty($post['conversationId']) || empty($post['orderId']) || empty($post['shopCode']) || empty($post['orderPrice']) || empty($post['productsTotalPrice']) || empty($post['productType']) || empty($post['callbackOkUrl']) || empty($post['callbackFailUrl']))
{
	/*Eksik Form Datası Mevcut*/
	echo 'EKSIK_FORM_DATASI';
	exit();
}
else
{
//	$MY_HASH = base64_encode(pack('H*',sha1($post['orderId'].$post['paymentCurrency'].$post['orderPrice'].$post['productsTotalPrice'].$post['productType'].$paymax_config["apiShopCode"].$paymax_config["apiHash"])));
//	if ($MY_HASH!==$post['hash'])	
if ($post['productType']!="DIJITAL_URUN" || $post['paymentStatus']!="paymentOk" || $post['status']!="success")
	{
	    echo $MY_HASH." ".$post['hash'];
		/*Hash Uyuşmuyor*/
		echo 'HATALI_HASH_IMZASI';
		exit();
	}
	else
	{
	   
		/*
		paymentStatus'un alabileceği değerler = 
		paymentWait(Ödeme Bekleniyor),
		paymentVerification(Ödendi ancak ödeme doğrulama bekliyor. Reddedilebilir. Mal yada hizmetinizi müşterinize paymentOk alana kadar vermeyin),
		paymentOk(Ödeme alındı. Artık mal yada hizmetinizi müşterinize verebilirsiniz),
		paymentNotPaid('Ödenmedi'),
		*/
		    $merchant_oid=htmlentities($post['orderId'], ENT_QUOTES, "UTF-8");
$dataal=explode("a", $merchant_oid);
            $mik=$dataal[0];   
			$mysqliuye2 =  siparis($mik);
	  
if($mysqliuye2["id"]==Null || $mysqliuye2["durum"]!="10"){
echo "OK";
	exit;
}
$mail=$mysqliuye2["mail"]; 
		if ($post['paymentStatus']=='paymentOk')
		{
			
		
	


     
      
$prod=json_decode($mysqliuye2["urun"],true);
  
	include(__ROOT__."/system/class/turkpin.php");
foreach($prod as $deg => $val){
$siparisstok="";
			$urun=urun($val["product"]);
		  $adet=$val["adet"];
	
			if($urun["urun_stok"]!=Null){
				$nswt=$urun["urun_stok"]-$adet;
		 $dataa = $db->prepare("UPDATE urun SET urun_stok=? where id=?");
        $dataa->execute([$nswt,$val["product"]]);
			}

	$getir="0";
			
$opsiyonkey=moduller("opsiyonkey");
$turkpin=moduller("turkpin");
if($turkpin["durum"]=="1" && $urun["oyunKod"]!=Null){
		   $siparisstok=turkpin($val["product"],$adet);
		   if($siparisstok==Null || $durum=="0"){
			   $durum="0";
		   }
		   else{
			   $durum="2";
		   }
}
else{
if($opsiyonkey["durum"]=="1"){
	foreach($val["opsiyon"] as $degx => $valx){
		$opt=opsiyon($valx);
		if($opt["stok"]!=Null){
				    $stok = explode("\n", $opt["stok"]);
			$stoksay=count($stok);  
			if($stok["0"]==""){
	  	$stoksay="0";
	  }
	  if($stoksay==0){
			$durum="0";
	  }
	  else{
		  
		  $siparisstok=$stok[0];
		  $lisay=2;
		  $say=1;
		  while($adet>=$lisay && $stok[$say]!=Null){
			  $siparisstok=$siparisstok.", ".$stok[$say];
			  $say++;
			  $lisay++;
		  }
			$yenistok=$stok[$say];
			$yenisay=$say+1;
			while(@$stok[$yenisay]!=Null){
			$yenistok=$yenistok."\n".$stok[$yenisay];
			$yenisay++;
		}
		 if($durum!="0"){
		$durum="2";
		 }
		 $dataa = $db->prepare("UPDATE urun_opsiyon SET stok=? where id=?");
        $dataa->execute([$yenistok,$valx]);
		
			}
			$getir="1";
		}
		
	}
}
			if($getir=="0"){
		    $stok = explode("\n", $urun["stok"]);
			$stoksay=count($stok);  
			if($stok["0"]==""){
	  	$stoksay="0";
	  }
	  if($stoksay==0){
			$durum="0";
	  }
	  else{
		  
		  $siparisstok=$stok[0];
		  $lisay=2;
		  $say=1;
		  while($adet>=$lisay && $stok[$say]!=Null){
			  $siparisstok=$siparisstok.", ".$stok[$say];
			  $say++;
			  $lisay++;
		  }
			$yenistok=$stok[$say];
			$yenisay=$say+1;
			while(@$stok[$yenisay]!=Null){
			$yenistok=$yenistok."\n".$stok[$yenisay];
			$yenisay++;
		}
		 if($durum!="0"){
		$durum="2";
		 }
		
		 $dataa = $db->prepare("UPDATE urun SET stok=? where id=?");
        $dataa->execute([$yenistok,$val["product"]]);
		
			}
			}}
	  $stokyaz[$deg]=$siparisstok;
}
						$siparisstok=implode(", ",$stokyaz);
	$stokyaz=json_encode($stokyaz, JSON_UNESCAPED_UNICODE);
		                   
		                       
$telegram=eklenti("telegram");
    if($telegram["durum"]==1){
		  $json=json_decode($telegram["deger"],true); 
		 $telegram_key=$json["Bot Key"];
  $telegramchatid=$json["Chat ID"];

		                    
					$js=json_decode($mysqliuye2["urun"],true);
					if($js[0]==Null){
						$urun=urun($mysqliuye2["urun"]);
						$urunad=$urun["ad"];
					}
					else{
						$urunad=array();
						foreach($js as $deg=>$val){
						$urun=urun($val["product"]);
						$urunad[]=$val["adet"]." adet ".$urun["ad"];
						}
						$urunad=implode(", ",$urunad);
					}
    $msg=$mysqliuye2["tarih"]." tarihinde ".$mysqliuye2["mail"]." mail adresli üye ".html_entity_decode($urunad, ENT_QUOTES, "UTF-8")." ürünü sipariş verdi.";
 
   $url='https://api.telegram.org/bot'.$telegram_key.'/sendMessage';
   $data=array('chat_id'=>$telegramchatid,'text'=>$msg);
        $options=array('http'=>array('method'=>'POST','header'=>"Content-Type:application/x-www-form-urlencoded\r\n",'content'=>http_build_query($data),),);
        $context=stream_context_create($options);
        $result=file_get_contents($url,false,$context);
		
	}
			if($durum=="2"){
		$subject="Sipariş Başarıyla Tamamlandı";
					$mailmsgs = $db->prepare("SELECT ad,mesaj FROM mail where ad='siparis_tamamlandi'");
		}
		else{
		$subject="Sipariş Başarıyla Alındı";
					$mailmsgs = $db->prepare("SELECT ad,mesaj FROM mail where ad='siparis_odendi'");
		}
    $mailmsgs->execute(array());
    $mailmsgs = $mailmsgs->fetchAll(PDO::FETCH_ASSOC);
$mailmsgs["mesaj"]=$mailmsgs["0"]["mesaj"];
	
		$content=str_replace("{siparis_stok}",$siparisstok,str_replace("{siparis_no}",$mysqliuye2["sip_no"],str_replace("{isim_soyisim}",$mysqliuye2["ad"],$mailmsgs["mesaj"])));
		sendEmail($mail,$subject,$content);
		
		 $dataa = $db->prepare("UPDATE siparis SET durum=?, stok=? where id=?");
        $dataa->execute([$durum,$stokyaz,$mik]);

                                          echo "OK";
                                          exit;
                            
		
		}
		elseif ($post['paymentStatus']=='paymentNotPaid'){
					$subject="Sipariş Başarısız Oldu";
		$content="Merhaba ".$mysqliuye2["ad"].",<br>
		Siparişiniz başarısız olmuştur. Ürünü satın alabilmek için lütfen tekrar sipariş veriniz.";
		sendEmail($mail,$subject,$content);
		 $dataa = $db->prepare("UPDATE siparis SET durum=? where id=?");
        $dataa->execute(["3",$mik]);
   echo "OK";
                                          exit;
		}
	}
}


}

if(@$odeme_yontem==Null){
	echo "Eksik data";	exit;
}
  
    #
    ## Müşterinizin sitenizde kayıtlı veya form vasıtasıyla aldığınız eposta adresi
   
    $email = $mail;

    $balance=round($amount,2);
    $balance2=$balance*100;
    $payment_amount = $balance2; //9.99 için 9.99 * 100 = 999 gönderilmelidir.
    #
    ## Sipariş numarası: Her işlemde benzersiz olmalıdır!! Bu bilgi bildirim sayfanıza yapılacak bildirimde geri gönderilir.
 
  $merchant_oid=$sipcek["id"]."a".rand()."z1";
     $user_name = $ad;

    #
    ## Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız adres bilgisi
    $user_address =$adres;
    #
    ## Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız telefon bilgisi
    $user_phone = $telefon;
    #
    ## Başarılı ödeme sonrası müşterinizin yönlendirileceği sayfa
    ## !!! Bu sayfa siparişi onaylayacağınız sayfa değildir! Yalnızca müşterinizi bilgilendireceğiniz sayfadır!
    ## !!! Siparişi onaylayacağız sayfa "Bildirim URL" sayfasıdır (Bakınız: 2.ADIM Klasörü).
     
    $merchant_ok_url = $site."?sip=1";
    $merchant_fail_url = $site."?sip=0";
	
    #
    ## Müşterinin sepet/sipariş içeriği
    $user_basket = base64_encode(json_encode(array(
    array("Payment", "$balance", 1), // 1. ürün (Ürün Ad - Birim Fiyat - Adet )
)));;
    #
    /* ÖRNEK $user_basket oluşturma - Ürün adedine göre array'leri çoğaltabilirsiniz
    $user_basket = base64_encode(json_encode(array(
        array("Örnek ürün 1", "18.00", 1), // 1. ürün (Ürün Ad - Birim Fiyat - Adet )
        array("Örnek ürün 2", "33.25", 2), // 2. ürün (Ürün Ad - Birim Fiyat - Adet )
        array("Örnek ürün 3", "45.42", 1)  // 3. ürün (Ürün Ad - Birim Fiyat - Adet )
    )));
    */
    ############################################################################################

    ## Kullanıcının IP adresi
    if( isset( $_SERVER["HTTP_CLIENT_IP"] ) ) {
        $ip = $_SERVER["HTTP_CLIENT_IP"];
    } elseif( isset( $_SERVER["HTTP_X_FORWARDED_FOR"] ) ) {
        $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    } else {
        $ip = $_SERVER["REMOTE_ADDR"];
    }

    ## !!! Eğer bu örnek kodu sunucuda değil local makinanızda çalıştırıyorsanız
    ## buraya dış ip adresinizi (https://www.whatismyip.com/) yazmalısınız. Aksi halde geçersiz paytr_token hatası alırsınız.
    $user_ip=$ip;
    ##

    ## İşlem zaman aşımı süresi - dakika cinsinden
    $timeout_limit = "30";

    ## Hata mesajlarının ekrana basılması için entegrasyon ve test sürecinde 1 olarak bırakın. Daha sonra 0 yapabilirsiniz.
    $debug_on = 1;

    ## Mağaza canlı modda iken test işlem yapmak için 1 olarak gönderilebilir.
    $test_mode = 0;

    $no_installment = 0; // Taksit yapılmasını istemiyorsanız, sadece tek çekim sunacaksanız 1 yapın

    ## Sayfada görüntülenecek taksit adedini sınırlamak istiyorsanız uygun şekilde değiştirin.
    ## Sıfır (0) gönderilmesi durumunda yürürlükteki en fazla izin verilen taksit geçerli olur.
    $max_installment = 0;

    $currency = "TL";




class Paymax_light_api
{
	private $userName,$password,$shopCode,$hash;
	public function __construct($userName,$password,$shopCode,$hash)
	{
		$this->userName = $userName;
		$this->password = $password;
		$this->shopCode = $shopCode;
		$this->hash = $hash;
	}
	private function hash_generate($string)
	{
		$hash = base64_encode(pack('H*',sha1($this->userName.$this->password.$this->shopCode.$string.$this->hash)));
		return $hash;
	}
	public function create_payment_link($order_data)
	{
		$post_data = array(
			'userName' => $this->userName,
			'password' => $this->password,
			'shopCode' => $this->shopCode,
			'productName' => $order_data['productName'],
			'productData' => $order_data['productData'],
			'productType' => $order_data['productType'],
			'productsTotalPrice' => $order_data['productsTotalPrice'],
			'orderPrice' => $order_data['orderPrice'],
			'currency' => $order_data['currency'],
			'orderId' => $order_data['orderId'],
			'locale' => $order_data['locale'],
			'conversationId' => $order_data['conversationId'],
			'buyerName' => $order_data['buyerName'],
			'buyerSurName' => $order_data['buyerSurName'],
			'buyerGsmNo' => $order_data['buyerGsmNo'],
			'buyerIp' => $order_data['buyerIp'],
			'buyerMail' => $order_data['buyerMail'],
			'buyerAdress' => $order_data['buyerAdress'],
			'buyerCountry' => $order_data['buyerCountry'],
			'buyerCity' => $order_data['buyerCity'],
			'buyerDistrict' => $order_data['buyerDistrict'],
			'callbackOkUrl' => $order_data['callbackOkUrl'],
			'callbackFailUrl' => $order_data['callbackFailUrl'],
			'module'=>'NATIVE_PHP'
		);
		$post_data['hash'] = $this->hash_generate($post_data['orderId'].$post_data['currency'].$post_data['orderPrice'].$post_data['productsTotalPrice'].$post_data['productType'].$post_data['callbackOkUrl'].$post_data['callbackFailUrl']);
		
		$response = $this->send_post('https://apiv1.paymax.com.tr/api/create-payment-link',$post_data);
		if ($response['status']=='success' && isset($response['payment_page_url']))
		{
			return $response;
		}
		else
		{
			print_r($response);
			/*Hatayı Sisteminiz için Yönetin ve Döndürün*/
		}
	}
	private function send_post($post_url,$post_data)
	{
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL,$post_url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_POST, 1) ;
		curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data));
		curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
		curl_setopt($ch, CURLOPT_TIMEOUT, 20);
		curl_setopt($ch, CURLOPT_REFERER, $_SERVER['SERVER_NAME']);
		
		$response = array();
		if (curl_errno($ch))
		{
			/*Curl sırasında bir sorun oluştu*/
			$response = array(
				'status'=>'error',
				'errorMessage'=>'Curl Geçersiz bir cevap aldı',
			);
		}
		else
		{
			/*Curl Cevabını Alın*/
			$result_origin = curl_exec($ch);
			/*Curl Cevabını jsondan array'a dönüştür*/
			//print_r($result_origin);
			$result = json_decode($result_origin,true);
			if (is_array($result))
			{
				$response = (array) $result;
			}
			else
			{
				$response = array(
					'status'=>'error',
					'errorMessage'=>'Dönen cevap Array değildi',
				);
			}
		}
		curl_close($ch);
		return $response;
	}
}

/*Sınıfı Api bilgilerinizle başlatın*/
$paymax = new Paymax_light_api($payment["paymax_user"],$payment["paymax_key"],$payment["paymax_magaza"],$payment["paymax_hash"]);
/*Sipariş Bilgilerinizi Tanımlayın*/
$order_data = array(
	'productName' => 'Payment',
	'productData' => array(
		array(
			'productName'=>'Payment',
			'productPrice'=>$balance,
			'productType'=>'DIJITAL_URUN',
		),
	),
	'productType' => 'DIJITAL_URUN',
	'productsTotalPrice' => $balance,
	'orderPrice' => $balance,
	'currency' => 'TRY',
	'orderId' => $merchant_oid,
	'locale' => 'tr',
	'conversationId' => $merchant_oid,
	'buyerName' => $ad,
	'buyerSurName' => 'SOYADI',
	'buyerGsmNo' => $telefon,
	'buyerIp' => $_SERVER['REMOTE_ADDR'],
	'buyerMail' => $mail,
	'buyerAdress' => $adress,
	'buyerCountry' => '',
	'callbackOkUrl' => $site."?sip=1",
	'callbackFailUrl' => $site."?sip=0",
	'buyerCity' => '',
	'buyerDistrict' => '',
);

/*Sipariş Bilgilerinizi link oluşturmak için sınıfa gönderin*/
$request = $paymax->create_payment_link($order_data);
if($request['status']=='success' && isset($request['payment_page_url']))
{
	/*status==success ve payment_page_url varsa başarılı bir işlem yürüttünüz*/
	$odeme_link = $request['payment_page_url'];
header("Location: ".$odeme_link);
exit;
}
else
{
	/*Hatalı bir cevap alındı*/
	echo 'Ödeme linki üretilirken bir sorun oluştu';
	print_r($request);
}

?>