374 lines
18 KiB
PHP
374 lines
18 KiB
PHP
<?php
|
|
|
|
defined('BASEPATH') OR exit('No direct script access allowed');
|
|
|
|
require APPPATH . '/libraries/REST_Controller.php';
|
|
|
|
/*
|
|
* Changes:
|
|
* 1. This project contains .htaccess file for windows machine.
|
|
* Please update as per your requirements.
|
|
* Samples (Win/Linux): http://stackoverflow.com/questions/28525870/removing-index-php-from-url-in-codeigniter-on-mandriva
|
|
*
|
|
* 2. Change 'encryption_key' in application\config\config.php
|
|
* Link for encryption_key: http://jeffreybarke.net/tools/codeigniter-encryption-key-generator/
|
|
*
|
|
* 3. Change 'jwt_key' in application\config\jwt.php
|
|
*
|
|
*/
|
|
|
|
class iobpay extends REST_Controller
|
|
{
|
|
/**
|
|
* URL: http://localhost/CodeIgniter-JWT-Sample/auth/token
|
|
* Method: GET
|
|
*/
|
|
|
|
function __construct()
|
|
{
|
|
// Construct the parent class
|
|
parent::__construct();
|
|
$this->load->model('user_management_model');
|
|
$this->load->helper('IOBPAY_UTILITY');
|
|
|
|
}
|
|
|
|
|
|
public function generateIOBPayToken_post()
|
|
{
|
|
$records = $this->post('records');
|
|
|
|
$merchant_id = $this->config->item('merchant_id');
|
|
$merchant_sub_id = $this->config->item('merchant_sub_id');
|
|
$sign_key = $this->config->item('sign_key');
|
|
$encryption_key = hash('sha256',$this->config->item('encryption_key'),true);
|
|
$encryption_iv = $this->config->item('encryption_iv');
|
|
$token_generation_url = $this->config->item('token_generation_url');
|
|
$txn_initiation_url = $this->config->item('txn_initiate_url');
|
|
$feetype = "ALL FEES";
|
|
|
|
$merchantreplyurl = $this->config->item('merchant_reply_url'); # merchant reply url to be replaced here
|
|
$totalamt = $records['total_amount'];
|
|
|
|
$merchanttxnid = "";
|
|
$user_id = $records['user_id'];
|
|
$con_id = $records['con_id'];
|
|
$udf1 = $records['udf1'];
|
|
$udf2 = $records['udf2'];
|
|
$udf3 = $records['udf3'];
|
|
|
|
//echo $encryption_key.$encryption_iv.$sign_key,$merchant_id.$merchant_sub_id.$token_generation_url.$totalamt.$feetype.$merchantreplyurl;
|
|
|
|
// die();
|
|
$decodedData = IOBPAY_UTILITY::generateToken($encryption_key,$encryption_iv,$sign_key,$merchant_id,$merchant_sub_id,$token_generation_url,$totalamt,$feetype,$merchantreplyurl);
|
|
|
|
$tokenId = $decodedData->tokenid; //ensure to save in db
|
|
|
|
if($tokenId != NULL)
|
|
{
|
|
|
|
$merchanttxnid = $this->user_management_model->saveRecords(array('amount' => $totalamt,'udf1' => $udf1,'udf2' => $udf2,'udf3' => $udf3,'user_id' => $user_id,'con_id' => $con_id,'token' => $tokenId),CSR_TXN_DETAILS);
|
|
|
|
if($merchanttxnid)
|
|
{
|
|
// $merchanttxnid = $merchanttxnid[0]['merchanttxnid'];
|
|
|
|
$txninitfinalString = IOBPAY_UTILITY::initiateTxn($encryption_key,$encryption_iv,$sign_key,$merchant_id,$merchant_sub_id,$txn_initiation_url,$tokenId,$merchanttxnid,$udf1,$udf2,$udf3,$totalamt,$feetype);
|
|
|
|
if($txninitfinalString)
|
|
{
|
|
$updated = $this->user_management_model->updateRecords(array('txn_ini_string' => $txninitfinalString),CSR_TXN_DETAILS,array('merchant_txn_id' => $merchanttxnid));
|
|
if($updated)
|
|
{
|
|
$data['dataStatus'] = true;
|
|
$data['status'] = REST_Controller::HTTP_OK;
|
|
$data['records'] = array('url' => $txn_initiation_url,'txn_ini_string' => $txninitfinalString,'merchanttxnid' => $merchanttxnid);
|
|
$this->response($data,REST_Controller::HTTP_OK);
|
|
}
|
|
else
|
|
{
|
|
$log_message = "### txninit final json not updated in DB";
|
|
log_message('ERROR',$log_message);
|
|
$data['dataStatus'] = false;
|
|
$data['status'] = REST_Controller::HTTP_NOT_MODIFIED;
|
|
$data['msg'] = 'Something went wrong, Try later!';
|
|
$this->response($data,REST_Controller::HTTP_OK);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$log_message = "### txninit final json error: ";
|
|
log_message('ERROR',$log_message);
|
|
$data['dataStatus'] = false;
|
|
$data['status'] = REST_Controller::HTTP_NOT_MODIFIED;
|
|
$data['msg'] = 'Something went wrong, Try later!';
|
|
$this->response($data,REST_Controller::HTTP_OK);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$log_message = "### merchanttxnid not generated ";
|
|
log_message('ERROR',$log_message);
|
|
$data['dataStatus'] = false;
|
|
$data['status'] = REST_Controller::HTTP_NOT_MODIFIED;
|
|
$data['msg'] = 'Something went wrong, Try later!';
|
|
$this->response($data,REST_Controller::HTTP_OK);
|
|
}
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
$log_message = "### Token Not generated ";
|
|
log_message('ERROR',$log_message);
|
|
$data['dataStatus'] = false;
|
|
$data['status'] = REST_Controller::HTTP_NOT_MODIFIED;
|
|
$data['msg'] = 'Something went wrong, Try later!';
|
|
$this->response($data,REST_Controller::HTTP_OK);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function receiveIOBPAYResponse_post()
|
|
{
|
|
|
|
if($_SERVER['HTTP_ORIGIN'] == $this->config->item('referer_url'))
|
|
{
|
|
$merchant_id = $this->config->item('merchant_id');
|
|
$merchant_sub_id = $this->config->item('merchant_sub_id');
|
|
$sign_key = $this->config->item('sign_key');
|
|
$encryption_key = hash('sha256',$this->config->item('encryption_key'),true);
|
|
$encryption_iv = $this->config->item('encryption_iv');
|
|
|
|
$responsejson = $this->post('resjson');
|
|
|
|
$log_message = '### Txn Response Received : '. $responsejson;
|
|
log_message('ERROR',$log_message);
|
|
$decodedVal = json_decode($responsejson);
|
|
$retData = $decodedVal->data;
|
|
$res = IOBPAY_UTILITY::pkcs5_unpad(openssl_decrypt ( base64_decode($retData) , 'AES-256-CBC' , $encryption_key ,OPENSSL_RAW_DATA | OPENSSL_NO_PADDING, $encryption_iv)); //php 7.1 and above
|
|
|
|
$log_message = '### txninit service response after decryption: '. $res;
|
|
log_message('ERROR',$log_message);
|
|
|
|
$decodedData = json_decode($res);
|
|
$errorcd = isset($decodedData->errorcd) ? $decodedData->errorcd : null;
|
|
if($errorcd != NULL)
|
|
{
|
|
$log_message = '### Server error ! Please contact your website Administrator! Error Code : '. $errorcd;
|
|
log_message('ERROR',$log_message);
|
|
|
|
$data['dataStatus'] = false;
|
|
$data['status'] = REST_Controller::HTTP_NOT_FOUND;
|
|
$data['msg'] = 'Server error ! Please contact your website Administrator! Error Code : '. $errorcd;
|
|
$this->response($data,REST_Controller::HTTP_OK);
|
|
}
|
|
else
|
|
{
|
|
$trackid = $decodedData->trackid; //ensure to save in db
|
|
$txnstatus = $decodedData->txnstatus; //ensure to save in db
|
|
$merchanttxnid = $decodedData->merchanttxnid;
|
|
|
|
$updated = $this->user_management_model->updateRecords(array('trackid' => $trackid,'txnstatus' => $txnstatus),CSR_TXN_DETAILS,array('merchant_txn_id' => $merchanttxnid));
|
|
|
|
$contribution_id = $this->user_management_model->selectCustomRecords(array('con_id'),array('merchant_txn_id' => $merchanttxnid),CSR_TXN_DETAILS);
|
|
|
|
$temp_array = array('trackid' => $trackid,'txnstatus' => $txnstatus,'merchanttxnid' => $merchanttxnid);
|
|
if($trackid!=NULL)
|
|
{
|
|
if($txnstatus=="SUCCESS")
|
|
{
|
|
$temp_array['msg'] = 'Txn Sucessfull!';
|
|
// update FUNS_RECEIVED status against contribute id
|
|
$updated = $this->user_management_model->updateRecords(array('status' => 'FUNDS_RECEIVED'),CSR_CONTRIBUTION_DETAILS,array('cont_id' => $contribution_id[0]['con_id']));
|
|
|
|
header('Location: '.$this->config->item('success_url'));
|
|
exit;
|
|
}
|
|
else if($txnstatus=="FAILURE")
|
|
{
|
|
$temp_array['msg'] = 'Txn Failed!';
|
|
header('Location: '.$this->config->item('failure_url'));
|
|
exit;
|
|
}
|
|
else if($txnstatus=="AWAITED")
|
|
{
|
|
$temp_array['msg'] = 'Txn status is awaited ! Please check after some time !';
|
|
header('Location: '.$this->config->item('awaited_url'));
|
|
exit;
|
|
}
|
|
else
|
|
{
|
|
$temp_array['msg'] = 'Txn status is unknown ! Please check after some time !';
|
|
header('Location: '.$this->config->item('awaited_url'));
|
|
exit;
|
|
}
|
|
}
|
|
|
|
|
|
// $data['dataStatus'] = true;
|
|
// $data['status'] = REST_Controller::HTTP_OK;
|
|
// $data['records'] = $temp_array;
|
|
// $this->response($data,REST_Controller::HTTP_OK);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
set_status_header(REST_CONTROLLER::HTTP_UNAUTHORIZED,"Unauthorized");
|
|
$response['status']=false;
|
|
$response['error']="Access denied!";
|
|
log_message('error','Access denied!');
|
|
echo json_encode($response);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
public function checkTxnStatus_post()
|
|
{
|
|
$merchant_id = $this->config->item('merchant_id');
|
|
$merchant_sub_id = $this->config->item('merchant_sub_id');
|
|
$sign_key = $this->config->item('sign_key');
|
|
$encryption_key = hash('sha256',$this->config->item('encryption_key'),true);
|
|
$encryption_iv = $this->config->item('encryption_iv');
|
|
$action = 'TXNSTATUS';
|
|
$feetype = 'ALL FEES';
|
|
$con_id = $this->post('con_id');
|
|
$merchant_txn_id = $this->post('merchant_txn_id');
|
|
$flag = $this->post('flag');
|
|
$txn_details = array();
|
|
|
|
if($flag == 'STATUS_CHECK')
|
|
{
|
|
$txn_details = $this->user_management_model->selectCustomRecords(array('trackid','token','amount'),array('merchant_txn_id' => $merchant_txn_id),CSR_TXN_DETAILS);
|
|
}
|
|
else if($flag == 'PDF')
|
|
{
|
|
//$txn_details = $this->user_management_model->selectCustomRecords(array('trackid','token','amount'),array('merchant_txn_id' => $merchant_txn_id),CSR_TXN_DETAILS);
|
|
|
|
$this->db->SELECT('CSR_TXN_DETAILS.trackid,CSR_TXN_DETAILS.amount,CSR_TXN_DETAILS.txnstatus,CSR_USER.name,CSR_USER_ORG.org_pan,DATE_FORMAT(convert_tz(CSR_TXN_DETAILS.createdon,"+00:00","+05:30"),"%d-%m-%Y") as txn_date,concat(DATE_FORMAT(convert_tz(CSR_TXN_DETAILS.createdon,"+00:00","+05:30"),"%Y%m%d"),CSR_TXN_DETAILS.merchant_txn_id) as ref_id');
|
|
$this->db->FROM(CSR_TXN_DETAILS.' as CSR_TXN_DETAILS');
|
|
$this->db->JOIN(CSR_USER.' as CSR_USER','CSR_TXN_DETAILS.user_id = CSR_USER.id','LEFT');
|
|
$this->db->JOIN(CSR_USER_ORG.' as CSR_USER_ORG','CSR_USER.id = CSR_USER_ORG.user_id','LEFT');
|
|
$this->db->WHERE('CSR_TXN_DETAILS.merchant_txn_id',$merchant_txn_id);
|
|
$txn_details = $this->db->GET()->result_array();
|
|
if(count($txn_details)) { $txn_details[0]['numtowords'] = $this->numtowords($txn_details[0]['amount']); }
|
|
}
|
|
|
|
if(count($txn_details))
|
|
{
|
|
|
|
if($flag == 'STATUS_CHECK')
|
|
{
|
|
$totalamt = $txn_details[ (count($txn_details) - 1) ]['amount'];
|
|
$tokenid = $txn_details[ (count($txn_details) - 1) ]['token'];
|
|
$trackid = $txn_details[ (count($txn_details) - 1) ]['trackid'];
|
|
|
|
$txn_staus = IOBPAY_UTILITY::checkTxnStatus($this->config->item('txn_status_url'),$merchant_id,$merchant_sub_id,$action,$feetype,$totalamt,$tokenid,$trackid,$sign_key,$encryption_key,$encryption_iv);
|
|
|
|
$errorcd = isset($txn_staus->errorcd) ? $txn_staus->errorcd : null;
|
|
if($errorcd != NULL)
|
|
{
|
|
$log_message = '### Server error ! Please contact your website Administrator! Error Code : '. $errorcd;
|
|
log_message('ERROR',$log_message);
|
|
|
|
$data['dataStatus'] = false;
|
|
$data['status'] = REST_Controller::HTTP_NOT_FOUND;
|
|
$data['msg'] = 'Server error ! Please contact your website Administrator! Error Code : '. $errorcd;
|
|
$this->response($data,REST_Controller::HTTP_OK);
|
|
}
|
|
else
|
|
{
|
|
$trackid = $txn_staus->trackid; //ensure to save in db
|
|
$txnstatus = $txn_staus->txnstatus; //ensure to save in db
|
|
$merchanttxnid = $txn_staus->merchanttxnid;
|
|
|
|
$updated = $this->user_management_model->updateRecords(array('trackid' => $trackid,'txnstatus' => $txnstatus),CSR_TXN_DETAILS,array('merchant_txn_id' => $merchanttxnid));
|
|
|
|
}
|
|
$result_array = array('ref_id' => $trackid,'txnstatus' => $txnstatus,'amt' => $txn_staus->totalamt,'merchanttxnid' => $merchanttxnid);
|
|
}
|
|
else if($flag == 'PDF')
|
|
{
|
|
$result_array = $txn_details;
|
|
}
|
|
|
|
|
|
$data['dataStatus'] = true;
|
|
$data['status'] = REST_Controller::HTTP_OK;
|
|
$data['records'] = $result_array;
|
|
$this->response($data,REST_Controller::HTTP_OK);
|
|
|
|
}
|
|
else
|
|
{
|
|
$data['dataStatus'] = true;
|
|
$data['status'] = REST_Controller::HTTP_NOT_FOUND;
|
|
$data['msg'] = 'No Txn details were found for requested contribute id';
|
|
$this->response($data,REST_Controller::HTTP_OK);
|
|
}
|
|
}
|
|
public function testRedirect_get()
|
|
{
|
|
//sleep(2);
|
|
// $this->load->helper('mail');
|
|
|
|
//mail::sendMail($from,$fromDisplayName,$toWhom,$cc,$bcc,$subject,$isHTML = true,$mailContent);
|
|
|
|
|
|
//die();
|
|
echo 'HIdsjbkj';
|
|
$url = 'https://contribute.tnschools.gov.in/csr/#/contribute';
|
|
header('Location: '.$url);
|
|
exit;
|
|
|
|
}
|
|
|
|
|
|
function numtowords($number)
|
|
{
|
|
$no = floor($number);
|
|
$point = round($number - $no, 2) * 100;
|
|
$hundred = null;
|
|
$digits_1 = strlen($no);
|
|
$i = 0;
|
|
$str = array();
|
|
$words = array('0' => '', '1' => 'One', '2' => 'Two',
|
|
'3' => 'Three', '4' => 'Four', '5' => 'Five', '6' => 'Six',
|
|
'7' => 'Seven', '8' => 'Eight', '9' => 'Nine',
|
|
'10' => 'Ten', '11' => 'Eleven', '12' => 'Twelve',
|
|
'13' => 'Thirteen', '14' => 'Fourteen',
|
|
'15' => 'Fifteen', '16' => 'Sixteen', '17' => 'Seventeen',
|
|
'18' => 'Eighteen', '19' =>'Nineteen', '20' => 'Twenty',
|
|
'30' => 'Thirty', '40' => 'Forty', '50' => 'Fifty',
|
|
'60' => 'Sixty', '70' => 'Seventy',
|
|
'80' => 'Eighty', '90' => 'Ninety');
|
|
$digits = array('', 'Hundred', 'Thousand', 'Lakh', 'Crore');
|
|
while ($i < $digits_1) {
|
|
$divider = ($i == 2) ? 10 : 100;
|
|
$number = floor($no % $divider);
|
|
$no = floor($no / $divider);
|
|
$i += ($divider == 10) ? 1 : 2;
|
|
if ($number) {
|
|
$plural = (($counter = count($str)) && $number > 9) ? 's' : null;
|
|
$hundred = ($counter == 1 && $str[0]) ? ' and ' : null;
|
|
$str [] = ($number < 21) ? $words[$number] .
|
|
" " . $digits[$counter] . $plural . " " . $hundred
|
|
:
|
|
$words[floor($number / 10) * 10]
|
|
. " " . $words[$number % 10] . " "
|
|
. $digits[$counter] . $plural . " " . $hundred;
|
|
} else $str[] = null;
|
|
}
|
|
$str = array_reverse($str);
|
|
$result = implode('', $str);
|
|
$points = ($point) ?
|
|
"." . $words[$point / 10] . " " .
|
|
$words[$point = $point % 10] : '';
|
|
return "Rupees ". $result . " Only";
|
|
|
|
}
|
|
|
|
|
|
} |