• File: index.php
  • Full Path: /var/www/sftpscriptmbim/index.php
  • Date Modified: 10/25/2021 8:18 PM
  • File size: 7.29 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

	$fileDirectory = "/var/sftp/uploads_bim/";//diretório onde estão localizados os ficheiros
	$validfilesPath = "/var/sftp/bkp/validfiles/";
	$invalidfilesPath = "/var/sftp/bkp/invalidfiles/";

	$env="prod";
	// se não for diretório não faz nada
	if(!is_dir($fileDirectory)) return;

	check_and_remove_invalid_files_to_dir(filesInDirectoryFn($fileDirectory),$invalidfilesPath,$fileDirectory);

	// executar o programa
	if($env === "dev" && count(filesInDirectoryFn($fileDirectory)) > 0){
		execProgram(filesInDirectoryFn($fileDirectory),$fileDirectory,$invalidfilesPath,$validfilesPath,$env);
	}else if($env === "prod" && count(filesInDirectoryFn($fileDirectory)) > 0){
		execProgram(filesInDirectoryFn($fileDirectory),$fileDirectory,$invalidfilesPath,$validfilesPath,$env);
	}
	else return;

	/*Se for directório, remove os ficheiros desnecessários*/
	function filesInDirectoryFn($fileDirectory){

		$filesInDirectory = scandir($fileDirectory);

			if(count($filesInDirectory) > 1){
				if($filesInDirectory[0] == '.' && $filesInDirectory[1] == '..'){
					array_splice($filesInDirectory,0,2);
				}
			}

	    return $filesInDirectory;

	}

	function execProgram($filesInDirectory,$fileDir,$invalidFilePath,$validFilePath,$env){

	
		foreach ($filesInDirectory as $file) {
			
			if($file !== 'index.php' && substr($file,0,5)==='11900'){

				$fileLines=read_file_and_get_lines($file,$fileDir);

				$treatedData=treat_file_lines($fileLines,$file,$fileDir,$invalidFilePath,$env);

				if(is_array($treatedData)){
					remove_valid_to_backup($fileDir.$file,$validFilePath.$file);

					echo "<script> console.log(".json_encode($treatedData)."); </script>";
				}

			}

		}
	}

	function check_invalid_content_on_meps_file($content,$file,$fileDir,$invalidDirPath){
		
		$content= explode("|",$content);

		$days=strtotime(date('Y-m-d H:i:s')) - strtotime($content[0]);
		$days=floor($days/(60*60*24));

		$isInvalid = false;

		if($days > 1 || substr($content[1],5,5) !=="11900")
		{
			rename($fileDir.$file,$invalidDirPath.$file);
			$isInvalid=true;
		}
		
		return $isInvalid;
	}


	function check_and_remove_invalid_files_to_dir($files,$invalidDirPath,$fileDirectory){

			for($i=0;$i<sizeof($files);$i++){
				
				$file=$files[$i];

				$currentDate=date('Y-m-d');

				$currentDate=(int) str_replace("-","",$currentDate);

				$entity=substr($file, 0,5);
				$fileDate=str_replace("-","",substr($file,5,8));
				$fileDate = substr($fileDate,4,4).substr($fileDate,2,2).substr($fileDate,0,2);
				$isRemoved=false;

				/**Não consideramos ficheiros futuros**/ 
				if($file !== 'index.php' && $entity !== '11900'){
					$isRemoved = rename($fileDirectory.$file,$invalidDirPath.$file);	
				}

				if($entity == '11900' && $currentDate < $fileDate){
					if(!$isRemoved)
						rename($fileDirectory.$file,$invalidDirPath.$file);		
				}

				if($entity == '11900' && $currentDate >= $fileDate){
					$days = (int) $currentDate - (int)$fileDate;
					if($days > 1)
						rename($fileDirectory.$file,$invalidDirPath.$file);		
				}
				
			}

	}

	function remove_valid_to_backup($filePath,$dirPath){
		rename($filePath,$dirPath);
	}

	function treat_file_lines($fileLines,$file,$fileDir,$invalidDirPath,$env){

		$contentLength=sizeof($fileLines);//tamanho do conteúdo detalhe do ficheiro

		// resultado do tratamento das linhas do ficheiro
		$content_result=array('contentData'=>get_content_line_data($fileLines,$contentLength));

		if(check_invalid_content_on_meps_file($fileLines[0],$file,$fileDir,$invalidDirPath)) return true;

		// salvar na base de dados dos dados
		$dbConnection=database_connection($env);

		// Add content to db
		foreach ($content_result['contentData'] as $key=>$content) {
			$content_id=add_content_to_database($dbConnection,$content);
			$content_result['contentData'][$key]['content_id']=$content_id;
		}

		$url=null;

		if($env==="dev")
			$url="http://160.242.36.118:81/imaliapitest/public/api/recharge-by-reference";
		else if($env==="prod")
			$url="https://172.16.50.2/imaliapi/public/api/recharge-by-reference";

		//fechando a conneção com a base de dados
		ob_flush();

		send_http_request_to_server($content_result,$url);
		
		return $content_result;
	}


	function get_content_line_data($fileLines,$contentLength){

		$content=array();

		$contentParts=explode("|", $fileLines[0]);

		for($i=0;$i < $contentLength;$i++){

			$datetime_of_transaction=$contentParts[0];
			$entityAndReference=$contentParts[1];
			$amount=(int) preg_replace("/[^0-9]/","",substr($contentParts[2],10,strlen($contentParts[2])))/100;
			$terminal_locality=substr($contentParts[3],5,strlen($contentParts[3]));

			$entity=substr($entityAndReference,5,5);
			$payment_reference=substr($entityAndReference,11,strlen($entityAndReference));

			$newContent= array(
				'datetime_of_transaction' =>$datetime_of_transaction, 
				'entity' =>$entity, 
				'payment_reference' => $payment_reference , 
				'paid_amount' =>$amount , 
				'terminal_locality' =>$terminal_locality , 
			);

			array_push($content, $newContent);

		}

		return $content;

	}

	function read_file_and_get_lines($file,$fileDir){

			$lines=array();

				$fh = fopen($fileDir.$file,'r');// abrir o ficheiro

				//adicione as linhas do ficheiro no array $lines
				while ($line = fgets($fh)) {

					array_push($lines, $line);	

				}

				fclose($fh);//fechar o ficheiro

			return $lines;
	}

	function add_content_to_database($con,$content){ 
		
			$dot=$content['datetime_of_transaction'];
			$enty=$content['entity'];
			$pref=$content['payment_reference'];
			$pa=$content['paid_amount'];
			$tl=$content['terminal_locality'];
			$dateTime=date('Y-m-d H:i:s');
			mysqli_query($con,
			   "INSERT INTO mbim_contents VALUES(
				null,
				'$enty',
				'$pref',
				'$pa',
				'$tl',
				'$dot',
				'$dateTime')
			   "
			);

			return $con->insert_id;
	}

	function database_connection($env){

		// iniciar sessão na base de dados
		$con = null;
		
		ob_start();

		// configurando o fuso horário
		$timezone=date_default_timezone_set('Africa/Maputo');

		if($env === "dev")
			$con=mysqli_connect("127.0.0.1","root","","paytekaf_meps");
		else if($env === "prod")
			$con=mysqli_connect("172.16.50.1","rodb","Ro_DB_1994","payments");

		if (mysqli_connect_errno()) {
			printf("Connect failed: %s\n", mysqli_connect_error());
			exit();
		}

		return $con;
	}


	function send_http_request_to_server($data,$url){

			$ch = curl_init();

            curl_setopt($ch, CURLOPT_URL, $url);
			curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded","Accept:application/json"));
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
			curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
			$result = curl_exec($ch);
           
			$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

			if(curl_error($ch)){
				echo "Error: ".curl_error($ch);
				echo "\nStatusCode: :".$httpCode;
			}

			echo "\Resultado:".$result;

            curl_close($ch);

	}