<?php
if(isset($_POST['item_number'])){
$raw_post_data = file_get_contents('php://input');
$raw_post_array = explode('&', $raw_post_data);
$myPost = array();
foreach ($raw_post_array as $keyval) {
  $keyval = explode ('=', $keyval);
  if (count($keyval) == 2)
    $myPost[$keyval[0]] = urldecode($keyval[1]);
}
// read the IPN message sent from PayPal and prepend 'cmd=_notify-validate'
$req = 'cmd=_notify-validate';
if (function_exists('get_magic_quotes_gpc')) {
  $get_magic_quotes_exists = true;
}
foreach ($myPost as $key => $value) {
  if ($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) {
    $value = urlencode(stripslashes($value));
  } else {
    $value = urlencode($value);
  }
  $req .= "&$key=$value";
}

// Step 2: POST IPN data back to PayPal to validate
$ch = curl_init('https://ipnpb.paypal.com/cgi-bin/webscr');
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));
// In wamp-like environments that do not come bundled with root authority certificates,
// please download 'cacert.pem' from "https://curl.haxx.se/docs/caextract.html" and set
// the directory path of the certificate as shown below:
// curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
if ( !($res = curl_exec($ch)) ) {
  // error_log("Got " . curl_error($ch) . " when processing IPN data");
  curl_close($ch);
 // exit;
}
curl_close($ch);



if (strcmp ($res, "VERIFIED") == 0) {
  // The IPN is verified, process it:
  // check whether the payment_status is Completed
  // check that txn_id has not been previously processed
  // check that receiver_email is your Primary PayPal email
  // check that payment_amount/payment_currency are correct
  // process the notification
  // assign posted variables to local variables
  $item_name = $_POST['item_name'];
  $item_number = $_POST['item_number'];
  $payment_status = $_POST['payment_status'];
  $payment_amount = $_POST['mc_gross'];
  $payment_currency = $_POST['mc_currency'];
  $txn_id = $_POST['txn_id'];
  $receiver_email = $_POST['receiver_email'];
  $payer_email = $_POST['payer_email'];
  // IPN message values depend upon the type of notification sent.
  // To loop through the &_POST array and print the NV pairs to the screen:
  foreach($_POST as $key => $value) {
  //  echo $key . " = " . $value . "<br>";
  }
} else if (strcmp ($res, "INVALID") == 0) {
  // IPN invalid, log for manual investigation
  echo "The response from IPN was: <b>" .$res ."</b>";
  exit;
}

    $merchant_oid=htmlentities($item_number, 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($payment_status=="Completed"){
  
                               
     
      
     
      
$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;
                                            
      
     
                                           
  	}
	else{
		$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;
}
    $paypal_business    = $payment["paypal_business"];
    #
    ## 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 = $balance; //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";

?>

<form action='https://www.sandbox.paypal.com/cgi-bin/webscr' id="pay_form_special" method='post' target="_top">
  <input type='hidden' name='business' value='<?=$paypal_business;?>'> 
				<input type='hidden' name='item_name' value='Payment'> 
				<input type='hidden'name='item_number' value='<?php echo $merchant_oid;?>'> 
				<input type='hidden'name='amount' value='<?php echo $payment_amount; ?>'> 
				<input type='hidden'name='no_shipping' value='1'> 
				<input type='hidden'name='currency_code' value='TRY'> 
				<input type='hidden'name='notify_url' value='<?php echo $site."?callback=Paypal";?>'>
            <input type='hidden' name='cancel_return' value='<?php echo $merchant_fail_url; ?>'>
            <input type='hidden' name='return' value='<?php echo $merchant_ok_url;?>'>
            <input type="hidden" name="cmd" value="_xclick">
</form>

        <script type="text/javascript">

		document.getElementById("pay_form_special").submit();

		</script>
		
		<?php