Files
2025-01-12 16:17:34 -05:00

298 lines
11 KiB
PHP

<?php
namespace App\Controllers;
use CodeIgniter\API\ResponseTrait;
use CodeIgniter\Controller;
use CodeIgniter\HTTP\CLIRequest;
use CodeIgniter\HTTP\IncomingRequest;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
use Exception;
use Twilio\Rest\Client;
/**
* Class BaseController
*
* BaseController provides a convenient place for loading components
* and performing functions that are needed by all your controllers.
* Extend this class in any new controllers:
* class Home extends BaseController
*
* For security be sure to declare any new methods as protected or private.
*/
abstract class BaseController extends Controller
{
/**
* Instance of the main Request object.
*
* @var CLIRequest|IncomingRequest
*/
protected $request;
use ResponseTrait;
/**
* An array of helpers to be loaded automatically upon
* class instantiation. These helpers will be available
* to all other controllers that extend BaseController.
*
* @var list<string>
*/
protected $db;
private $con_name = 'digifi_db'; // 'wrench_blog';
protected $helpers = [];
/**
* Be sure to declare properties for any property fetch you initialized.
* The creation of dynamic property is deprecated in PHP 8.2.
*/
// protected $session;
/**
* @return void
*/
public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
{
// Do Not Edit This Line
parent::initController($request, $response, $logger);
// Preload any models, libraries, etc, here.
// E.g.: $this->session = \Config\Services::session();
try {
$this->db = \Config\Database::connect($this->con_name);
} catch (Exception $e) {
echo 'Caught Data Connect Exception ::: ', $e->getMessage(), "\n";
}
}
protected function insert_db($table_name, $insert_data) : array{
$row = [];
$this->db->table($table_name)->insert($insert_data);
$query = $this->db->query("SELECT * FROM $table_name ORDER BY id DESC LIMIT 1");
$row = $query->getRowArray();
// echo $row->name;
return $row;
}
protected function update_db($table_name, $update_data, $where_data) : array{
$row = [];
// bad $this->db->table($table_name)->where('id', '=', $where_data)->update($update_data);
$query = $this->db->query("SELECT * FROM $table_name ORDER BY id DESC LIMIT 1");
$row = $query->getRowArray();
return $row;
}
public function APIcall($method, $url, $data) {
// $curl = curl_init();
$curl = curl_init($url);
switch ($method) {
case "GET":
$params2 = '';
foreach($data as $key2=>$value2)
$params2 .= $key2.'='.$value2.'&';
$params2 = trim($params2, '&');
$url = $url.'?'.$params2;// add param to URL
log_message('critical', "API URL FINAL =>".$url );
//curl_setopt($curl, CURLOPT_FRESH_CONNECT, true);
//curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
break;
case "POST":
curl_setopt($curl, CURLOPT_POST, 1);
if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
case "PUT":
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
}
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'APIKEY: RegisteredAPIkey',
'Content-Type: application/json',
));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$result = curl_exec($curl);
if(!$result) {
echo("Connection failure!");
}
curl_close($curl);
return json_decode($result, true);
}
public function randomPassword( $length = 8 )
{
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_-=+;:,.?";
$length = rand(10, 16);
$password = substr( str_shuffle(sha1(rand() . time()) . $chars ), 0, $length );
return $password;
}
public function sendSMS_twillo($to_number, $sms_message):string{
// Find your Account SID and Auth Token at twilio.com/console
// and set the environment variables. See http://twil.io/secure
$sid = getenv("TWILIO_ACCOUNT_SID");
$token = getenv("TWILIO_AUTH_TOKEN");
$twilio = new \Twilio\Rest\Client($sid, $token); //Twilio\Rest\Client
$message = $twilio->messages->create(
"+2348141331999", // To
[
"body" =>
$sms_message,
"from" => "+14706008089",
]
);
return $message->body;
}
public function sendSMS($to_number, $sms_message):string{
$API_KEY ="TLYsgMTZBeasJHHimcWXG1QPHmjH7FPwnbKwiqTEwGCu6TrK0v13hCn8N6SYZp";
$BASE_URL = "https://api.ng.termii.com";
log_message('error', "SMS TO API---=>". $to_number);
$curl = curl_init();
$data = array(
"to"=> $to_number,
"from"=> "DigiFI",
"sms"=> $sms_message,
"type"=> "plain",
"channel"=> "generic",
"api_key"=> $API_KEY,
);
$post_data = json_encode($data);
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://termii.com/api/sms/send',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_POSTFIELDS => $post_data,
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json'
),
));
$response = curl_exec($curl);
log_message('error', "SMS TO API Response---=>". $response);
curl_close($curl);
return $response;
}
private function sendSMS33($smsNumber,$smsMessage){
$base_url = "https://v3.api.termii.com";
$api_key = "TLYsgMTZBeasJHHimcWXG1QPHmjH7FPwnbKwiqTEwGCu6TrK0v13hCn8N6SYZp";
$curl = curl_init();
$data = array("api_key" => $api_key, "to" => $smsNumber, "from" => "digiFi",
"sms" => $smsMessage, "type" => "plain", "channel" => "generic" );
$post_data = json_encode($data);
curl_setopt_array($curl, array(
CURLOPT_URL => $base_url."/api/sms/send",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => $post_data,
CURLOPT_HTTPHEADER => array(
"Content-Type: application/json"
),
));
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
public function readCustomer($uid){
$userUid = trim($uid);
$mysql ="SELECT * from customers where uid::text ='".$userUid."'";
$query = $this->db->query($mysql);
return $query->getRowArray();
}
public function coreVerifyEmployerMessage($application_uid){
$data['application_uid'] = $application_uid;
$findEmp ="SELECT c.firstname,c.lastname,a.uid AS application_uid, a.*
FROM applications a
LEFT JOIN customers c ON c.uid =a.customer_uid
WHERE a.status =2 AND a.uid = '".trim($application_uid)."'";
// log_message('error', "findEmp---=>" . $findEmp);
$query = $this->db->query($findEmp);
$row = $query->getResult('array');
$employer_uid = $row[0]['employer_uid'];
$application_uid = $row[0]['application_uid'];
$sigNatory = $this->pickEmployerSignatory($employer_uid);
$to_number = $sigNatory["phone"]; // "2347032847884"; // "16784574345"; //
if ($row[0]['uid']!='' && $application_uid !='' ){
$this->moveEmployerChecksToZero($application_uid); // all previous login is to employer verification is invalid invalid
log_message('error', "Call API---=>");
$api_data = $row[0];
$api_data["signatory_password"] = $this->randomPassword(); // "1000011";
$api_data["signatory_email"] = $sigNatory['email']; //"ameye+signatory@chiefsoft.com";
$api_data["signatory_name"] = $sigNatory['name']; //"Signatory Name";
$api_data["signatory_uid"] = $sigNatory['uid']; //"Signatory Name";
$api_data["processing_bank_name"] = "Processing Bank";
$api_data["processing_bank_email"] = "processingbank@email.com";
$udata = [
'employer_uid' => $employer_uid,
'password' => md5($api_data["signatory_password"]),
'username' => $api_data["signatory_email"],
'signatory_uid'=> $api_data["signatory_uid"],
'application_uid'=>$data['application_uid']
];
$addedData = $this->insert_db('employer_checks',$udata);
$sms_message = "Your OTP = 1234";
$this->sendSMS($to_number, $sms_message);
$checkData = $this->APIcall("POST", "http://10.10.10.48:6332/api/verify/employer", json_encode($api_data));
}else{
log_message('error', "Not found API---=>");
}
}
private function pickEmployerSignatory($employer_uid):array{
$signatoryQRy = "SELECT s.* FROM employers_signatory s LEFT JOIN employers e ON e.id =s.employer_id WHERE e.uid ='$employer_uid' ORDER BY s.id ASC LIMIT 1";
log_message('error', "pickSignatory---=>" . $signatoryQRy);
$query = $this->db->query($signatoryQRy);
$row = $query->getResult('array');
return $row[0];
}
private function moveEmployerChecksToZero($application_uid): int {
$sqlZeroSql = "UPDATE employer_checks SET status = 0 WHERE status = 1 AND application_uid='$application_uid'";
$query = $this->db->query($sqlZeroSql);
return 0;
}
}