<?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);
}