<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\aadharpaybanks;
use App\Apes;
use App\Http\Controllers\Comission\DeductApesComission;
use App\Http\Controllers\Comission\DeductApesMiniComission;
use App\Wallet;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Crypt;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\DB;


use App\AadharPayTransaction;
use App\AadharPaySettingType;
use App\Http\Controllers\Comission\AddAadharPayComission;
use App\Http\Controllers\Comission\AddAadharPaySurcharge;

use App\Module;

class AepsFPController extends Controller
{
	public function __construct()
    {
		$this->apiJwtKey = "457e766e1ad80aa82be1df1084b89c10ffc4d3c3";
		$this->apiNewUrl = "https://api.diosm.in/api/";
		$this->partnerId = "DIOSM0001";
	}

	public function bankList(){
		$responseBanks = Http::get('https://api.diosm.in/api/aeps/v1/bank_list',[],);
		$banks = $responseBanks->body();
		$banks= json_decode($banks,true);
		$key = array_search('86', array_column($banks['data'], 'id'));
		unset($banks['data'][$key]);
		$bankList = $banks['data'];
		$res = [];
		foreach($bankList as $k => $v){
			$banklist[$k]['id'] = $v['id'];
			$banklist[$k]['name'] = $v['bankName'];
			$banklist[$k]['iin'] = $v['iinno'];
		}
		$res['bankList'] = array_values($banklist);
		return $res;
	}
	
	public function stateList(){
		$responseState = Http::get('https://api.diosm.in/api/aeps/v1/getStates',[],);
		$states = $responseState->body();
		$states= json_decode($states,true);
		/* $key = array_search('86', array_column($banks['data'], 'id'));
		unset($banks['data'][$key]); */

		$res['stateList'] = $states;
		return $res;
	}
	
		
	public function merchantStatus(Request $request){
		$resdata = $request->all();
		if(!isset($resdata['userId']) || empty($resdata['userId'])){
			$responseArr['res_code'] = '301';
			$responseArr['message'] = "userId missing";
			return response()->json($responseArr);
		}
		
		$userid = $resdata['userId'];
		
		$userLoginId = User::where('id', $userid)->get(['loginId','ekyc_fp','ekyc_fp_id','contact','name','email'])->first();
		if(empty($userLoginId)){
			$responseArr['res_code'] = '301';
			$responseArr['message'] = "Invalid userId";
			return response()->json($responseArr);
		}
		
		$userName = $userLoginId->name;
		$loginId = $userLoginId->loginId;
		$userMobile = $userLoginId->contact;		
		$merchantId = $userLoginId->ekyc_fp_id;
		$ekyc_fp = $userLoginId->ekyc_fp;
		
		
		if(!empty($merchantId)){
			if($ekyc_fp == 0){
				$jsonData = ["merchantId"=> $merchantId];
				$token = $this->create_token();
				$response = Http::withHeaders([
						'jwt-token' => $token,
					])->asForm()->post($this->apiNewUrl . 'aeps/v1/merchant/eKycStatus', 
						$jsonData,
					);
				$response = $response->body();
				$resArr= json_decode($response,true);
				if(isset($resArr['statusCode']) && $resArr['statusCode']=='200'){
					$id = User::where('id', $userid)->update(['ekyc_fp'=>1]);
					
					$userLoginId->ekyc_fp = 1;
					$responseArr['res_code'] = '200';
					$responseArr['message'] = "KYC Completed";
					$responseArr['data'] = $userLoginId;
					return response()->json($responseArr);
				} else {
					$msg = isset($resArr['message']) ? $resArr['message'] : 'Error';
					
					$responseArr['res_code'] = '303';
					$responseArr['message'] = $msg;
					$responseArr['data'] = $userLoginId;
					return response()->json($responseArr);
				}
			} 
			else {
				$responseArr['res_code'] = '200';
				$responseArr['message'] = "KYC Completed";
				$responseArr['data'] = $userLoginId;
				return response()->json($responseArr);	
			}

		} else {
			$responseArr['res_code'] = '302';
			$responseArr['message'] = "Complete your Ekyc";
			$responseArr['data'] = $userLoginId;
			return response()->json($responseArr);
		}
		        
    }

	public function submitEkyc(Request $request){
		$resdata = $request->all();
		$validator = \Validator::make($resdata, [			
			'name' => 'required',
			'email' => 'required',
			'mobile' => 'required',
			'aadhar' => 'required',
			'pancard' => 'required',
			'shop_name' => 'required',
			'dob' => 'required|date_format:Y-m-d',
			'city' => 'required',
			'pinCode' => 'required',
			'state' => 'required',
			'address' => 'required',
			'gender' => 'required'
		]); 
		if ($validator->fails()) {
			$responseArr['res_code'] = '301';
			//$responseArr['message'] = $validator->errors()->get('contact')[0];
			$responseArr['message'] = $validator->errors()->first();
			return response()->json($responseArr);
		}
		$userid = $resdata['userId'];
		
		$userLoginId = User::where('id', $userid)->get(['name','last_name','middle_name','pancard','aadhar','email','contact','shop_name','dob','address','gender','post_code','city','id'])->first();
		if(empty($userLoginId)){
			$responseArr['res_code'] = '301';
			$responseArr['message'] = "Invalid userId";
			return response()->json($responseArr);
		}
		
		$name = !empty($userLoginId->name) ? $userLoginId->name : '';
		$last_name = !empty($userLoginId->last_name) ? " ". $userLoginId->last_name : '';
		$middle_name = !empty($userLoginId->middle_name) ? " ". $userLoginId->middle_name : '';
		
		$pan = $userLoginId->pancard;
		$aadhar = $userLoginId->aadhar;
		$name = $name.$middle_name.$last_name;
		$email = $userLoginId->email;
		$mobile = $userLoginId->contact;
		$shop_name = $resdata['shop_name'];
		$dob = $resdata['dob'];
		$state = $resdata['state'];
		$address = $resdata['address'];
		$pinCode = $resdata['pinCode'];
		$city = $resdata['city'];
		//$dob = Carbon::parse($resdata['dob'])->format("Y-m-d");
		$gender = $resdata['gender'];
		$jsonData = array(
						"full_name"=> $name,
						"mobile"=> $mobile,
						"email"=> $email,
						"pan"=> $pan,
						"gender"=> $gender,
						"adhaar_no"=> $aadhar,
						"shopName"=> $shop_name,
						"pinCode"=> $pinCode,
						"city"=> $city,
						"district"=> $city,
						"state"=> $state,
						"address"=> $address,
						"dob"=> $dob,
						"latitude"=> "17.4442806",
						"longitude"=> "78.4809119"
					);
		$token = $this->create_token();
		$response = Http::withHeaders([
                'jwt-token' => $token,
            ])->asForm()->post($this->apiNewUrl . 'aeps/v1/merchant/onboard', 
                $jsonData,
            );
		$response = $response->body();
		//$response = '{     "statusCode": "200",     "message": "successful",     "data": {         "merchantId": "DIOS000T2"     } }'; 
		file_put_contents('fp_ekyc.txt',"\n\n Mobile Time: ".date("F j, Y, g:i a"). " - ". $response, FILE_APPEND);
		$resArr= json_decode($response,true);
		if(isset($resArr['statusCode']) && $resArr['statusCode'] == '200'){
			$responseArr['res_code'] = '200';
			$responseArr['message'] = $resArr['message'];
			$user = User::where('id', $userLoginId->id)->first();
			
			$user->dob = empty($user->dob) ?  $dob : $user->dob;
			$user->address = empty($user->address) ?  $address : $user->address;
			$user->city = empty($user->city) ?  $city : $user->city;
			$user->post_code = empty($user->post_code) ?  $pinCode : $user->post_code;
			$user->gender = empty($user->gender) ?  $gender : $user->gender;
			$user->shop_name = empty($user->shop_name) ?  $shop_name : $user->shop_name;
			$user->ekyc_fp_id = isset($resArr['data']['merchantId']) ? $resArr['data']['merchantId'] : '';
			$user->ekyc_fp = 0;
			
			$user->save();
			return response()->json($responseArr);
		} else {
			$responseArr['res_code'] = '205';
			$responseArr['message'] = ($resArr['message']) ? $resArr['message'] : 'Error';
			return response()->json($responseArr);
		}
	}
	
		
	public function resendOtp(Request $request){
		
		$resdata = $request->all();
		if(!isset($resdata['userId']) || empty($resdata['userId'])){
			$responseArr['res_code'] = '301';
			$responseArr['message'] = "userId missing";
			return response()->json($responseArr);
		}
		
		$userid = $resdata['userId'];
		
		$userLoginId = User::where('id', $userid)->get(['ekyc_fp','ekyc_fp_id'])->first();
		if(empty($userLoginId)){
			$responseArr['res_code'] = '301';
			$responseArr['message'] = "Invalid userId";
			return response()->json($responseArr);
		}
		
		if(empty($userLoginId->ekyc_fp_id) || $userLoginId->ekyc_fp == 1){
			$responseArr['res_code'] = '301';
			$responseArr['message'] = "Not allow to send otp.";
			return response()->json($responseArr);
		}
		
		$merchantId = $userLoginId->ekyc_fp_id;
		$jsonData = array("merchantId"=> $merchantId);
	 	$token = $this->create_token();
		$response = Http::withHeaders([
                'jwt-token' => $token,
            ])->asForm()->post($this->apiNewUrl . 'aeps/v1/sendOtp', 
                $jsonData,
            );
		$response = $response->body();
		//$response = '{     "statusCode": "200",     "message": "Request Completed" }';
		$resArr= json_decode($response,true);
		if(isset($resArr['statusCode']) && $resArr['statusCode'] == '200'){
			$responseArr['res_code'] = '200';
			$responseArr['message'] = $resArr['message'];
			return response()->json($responseArr);
		} else {
			$responseArr['res_code'] = '205';
			$responseArr['message'] = ($resArr['message']) ? $resArr['message'] : 'Error';
			return response()->json($responseArr);
		}
	}
	
		
	public function otp_verify(Request $request){
		$resdata = $request->all();
		$validator = \Validator::make($resdata, [			
			'otp' => 'required',
			'userId' => 'required'
		]); 
		if ($validator->fails()) {
			$responseArr['res_code'] = '301';
			//$responseArr['message'] = $validator->errors()->get('contact')[0];
			$responseArr['message'] = $validator->errors()->first();
			return response()->json($responseArr);
		}
		$userid = $resdata['userId'];
		
		$userLoginId = User::where('id', $userid)->get(['ekyc_fp','ekyc_fp_id'])->first();
		if(empty($userLoginId)){
			$responseArr['res_code'] = '301';
			$responseArr['message'] = "Invalid userId";
			return response()->json($responseArr);
		}
		
		if(empty($userLoginId->ekyc_fp_id) || $userLoginId->ekyc_fp == 1){
			$responseArr['res_code'] = '301';
			$responseArr['message'] = "Not allow to send otp.";
			return response()->json($responseArr);
		}
		
		$merchantId = $userLoginId->ekyc_fp_id;
		$otp = $resdata['otp'];
	
		$jsonData = array("merchantId"=> $merchantId,
						"otp"=> $otp
					);
	 	$token = $this->create_token();
		$response = Http::withHeaders([
                'jwt-token' => $token,
            ])->asForm()->post($this->apiNewUrl . 'aeps/v1/otpVerify', 
                $jsonData,
            );
		$response = $response->body();
		//$response = '{"statusCode":200,"message":"OTP verified successfully"}';
		$resArr= json_decode($response,true);
		if(isset($resArr['statusCode']) && $resArr['statusCode'] == '200'){
			$responseArr['res_code'] = '200';
			$responseArr['message'] = $resArr['message'];
			return response()->json($responseArr);
		} else {
			$responseArr['res_code'] = '205';
			$responseArr['message'] = ($resArr['message']) ? $resArr['message'] : 'Error';
			return response()->json($responseArr);
		}
	}
	
	
	public function eKycBiometric(Request $request){
		$resdata = $request->all();
		$validator = \Validator::make($resdata, [			
			'pid_xml' => 'required',
			'userId' => 'required'
		]); 
		if ($validator->fails()) {
			$responseArr['res_code'] = '301';
			//$responseArr['message'] = $validator->errors()->get('contact')[0];
			$responseArr['message'] = $validator->errors()->first();
			return response()->json($responseArr);
		}
		$userid = $resdata['userId'];
		
		$userLoginId = User::where('id', $userid)->get(['ekyc_fp','ekyc_fp_id'])->first();
		if(empty($userLoginId)){
			$responseArr['res_code'] = '301';
			$responseArr['message'] = "Invalid userId";
			return response()->json($responseArr);
		}
		
		if(empty($userLoginId->ekyc_fp_id) || $userLoginId->ekyc_fp == 1){
			$responseArr['res_code'] = '301';
			$responseArr['message'] = "Not allow to send otp.";
			return response()->json($responseArr);
		}
		
		$merchantId = $userLoginId->ekyc_fp_id;
		$pid_xml_base64e = base64_encode($request->pid_xml);
		$jsonData = array("merchantId"=> $merchantId,						
						"pid_xml_base64e"=> $pid_xml_base64e,
					);
		$token = $this->create_token();
		$response = Http::withHeaders([
                'jwt-token' => $token,
            ])->asForm()->post($this->apiNewUrl . 'aeps/v1/merchant/eKycBiometric', 
                $jsonData,
            );
		$response = $response->body();
		$resArr= json_decode($response,true);
		if(isset($resArr['statusCode']) && $resArr['statusCode'] == '200'){
			$responseArr['res_code'] = '200';
			$responseArr['message'] = $resArr['message'];
			//$responseArr['response'] = $resArr;
			return response()->json($responseArr);
		} else {
			$responseArr['res_code'] = '205';
			$responseArr['message'] = ($resArr['message']) ? $resArr['message'] : 'Error';
			return response()->json($responseArr);
		}
	}
	
	private function apiToken(){
		$token = Http::withHeaders([
            "Accept" => "application/json",
            "Content-Type" => "application/json",
        ])->timeout(30)->post(env('AepsUrl') . "api/auth/login", [
            "email" => env("AepsUser"),
            "password" => env("AepsPassword"),
            "domain" => env("AepsDomain"),

        ]);
        
        if ($token->ok()) {
            $tokenResponse = $token->json();

            $this->aadharPayWallet = $tokenResponse["aadharPayWallet"];
            $this->aepsWallet = $tokenResponse["aepsWallet"];
            $services = $tokenResponse["userservice"];
            foreach ($services as $key => $se) {
                $this->services[] = $se["service"];
                $this->services_sta[$se["service"]] = $se["status"];

            }
            if (in_array("aeps", $this->services) && $this->services_sta["aeps"] == 1) {
                $this->token = $tokenResponse["access_token"];
                $this->exp_time = $tokenResponse["expires_in"];
                $this->aepsToken = $tokenResponse["aepsToken"];
                $this->parentUser = $tokenResponse["id"];
            } else {
                abort(401);
            }
        } else {
            abort(500);
        }
	}
				
		
    public function transaction(Request $request){
		//return response()->json($request->all());
		
		$this->apiToken();
		
		$resdata = $request->all();
		
		file_put_contents('mob_req.txt',"\n\n Mob Time: ".date("F j, Y, g:i a"). " - ". json_encode($resdata), FILE_APPEND);
		$validator = \Validator::make($resdata, [			
			'transType' => 'required',
			'contact' => 'required',
			'aadhar' => 'required',
			//'name' => 'required',
			'pidData' => 'required',
			'userId' => 'required',
			'IIN' => 'required',
			//'routeApi' => 'required',
		], [
                'pidData.required' => 'Please scan fingerprint',
                //'routeApi.required' => 'Please select AEPS Pipe',
            ]); 
		if ($validator->fails()) {
			$responseArr['res_code'] = '301';
			//$responseArr['message'] = $validator->errors()->get('contact')[0];
			$responseArr['message'] = $validator->errors()->first();
			return response()->json($responseArr);
		}
		$userId = $resdata['userId']; 
		
		
		$contact = $resdata['contact'];
		//$name = $resdata['name'];
		$aadhaar = $resdata['aadhar'];
		$transType = strtoupper($resdata['transType']);
		$amount = isset($resdata['amount']) ? $resdata['amount'] : 0;;
		$IIN = isset($resdata['IIN']) ? $resdata['IIN'] : "";
		
		$pidData = $resdata['pidData'];
		//$pidData = (htmlspecialchars_decode($resdata['pidData']));
		
		$userLoginId = User::where('id', $userId)->get(['loginId','ekyc_fp_id','id'])->first();
		if(empty($userLoginId)){
			$responseArr['error'] = '301';
			$responseArr['message'] = 'Invalid UserId';
			return response()->json($responseArr);
		}
		
		if (!in_array($transType,['ACCOUNTWITHDRAWAL','BALANCEINFO','MINISTATEMENT'])) {
			$responseArr['res_code'] = '301';
			$responseArr['message'] = 'Transaction type accept only BALANCEINFO/WITHDRAWAL';
			return response()->json($responseArr);
		}

		if ($transType=='ACCOUNTWITHDRAWAL' && $amount <= 0) {
			$responseArr['res_code'] = '301';
			$responseArr['message'] = 'Invalid Amount!';
			return response()->json($responseArr);
		}
		
	
		$type = "4";
		$url = $this->apiNewUrl . 'aeps/v1/transaction';		
		if ($transType == "ACCOUNTWITHDRAWAL") {
			$transT = 'CW';
		} else if($transType == "MINISTATEMENT") {
			$transT = 'MS';
			$amount = 0;
		} else {			
			$transT = 'BE';
			$amount = 0;
		}
		$order_id = $referenceid = $transT.time().rand(111,999);
		
		
		
		$loginId = $userLoginId->loginId;
		$merchantId = $userLoginId->ekyc_fp_id;
		$userId = $userLoginId->id;
		$pid_xml_base64e = base64_encode($pidData);
		
		$jsonData = array(
						"merchantId"=> $merchantId,						
						"agent_trid"=> $referenceid,						
						"adhaarNumber"=> $aadhaar,						
						"bankIIN"=> $IIN,						
						"amount"=> $amount,						
						"mobileNumber"=> $contact,						
						"transactionType"=> $transT,						
						"latitude"=> "17.4442806",						
						"longitude"=> "78.4809119",						
						"pid_xml_base64e"=> $pid_xml_base64e,
					);
		$token = $this->create_token();
		
		$response = Http::withHeaders([
                'jwt-token' => $token,
            ])->asForm()->post($url, 
                $jsonData,
            );
		
			if ($transType == "ACCOUNTWITHDRAWAL") {
				file_put_contents('aepsWithdrawal.txt',"\n\n Time: ".date("F j, Y, g:i a"). " - ". $response, FILE_APPEND); 
			} else if($transType == "MINISTATEMENT") {
				file_put_contents('aepsMini.txt',"\n\n Time: ".date("F j, Y, g:i a"). " - ". $response, FILE_APPEND); 
			} else {
				file_put_contents('aepsBalance.txt',"\n\n Time: ".date("F j, Y, g:i a"). " - ". $response, FILE_APPEND); 
			}
			file_put_contents('jsonData.txt', "\n\n\n Time: ".date("F j, Y, g:i a"). " \n ". json_encode($jsonData), FILE_APPEND); 
			
			$response = $response->body(); 
						
			
			/* if ($transType == "ACCOUNTWITHDRAWAL") {
				$response = '{"statusCode":"200","message":"Request Completed","data":{"amount":"810","transaction_id":"CWBT4597832311222133302116I","agent_trid":"CW1672473779631","bankRRN":"TEST448190","balanceAmount":"107","status":"SUCCESS","miniStatement":[]},"DATA":{"RRN":"236513448190","miniStatement":[],"BalanceAmount":107}}';
			} else if($transType == "MINISTATEMENT") {
				$response = '{"statusCode":"200","message":"Request Completed","data":{"amount":"0","transaction_id":"MSBB4562147311222094344218I","agent_trid":"MS1672460021978","bankRRN":"TEST9979199","balanceAmount":"207","status":"SUCCESS","miniStatement":[{"date":"16\/08\/2022","txnType":"Cr","amount":"200.0","narration":" BY TRANSFER   "},{"date":"25\/08\/2022","txnType":"Dr","amount":"215.0","narration":" FI Txn @ CSP o"},{"date":"19\/09\/2022","txnType":"Cr","amount":"200.0","narration":" BY TRANSFER   "},{"date":"25\/09\/2022","txnType":"Cr","amount":"2.0","narration":" CREDIT INTERES"},{"date":"15\/10\/2022","txnType":"Cr","amount":"200.0","narration":" BY TRANSFER   "},{"date":"17\/10\/2022","txnType":"Cr","amount":"2000.0","narration":" BY TRANSFER   "},{"date":"19\/10\/2022","txnType":"Dr","amount":"1500.0","narration":" FI Txn @ CSP o"},{"date":"30\/10\/2022","txnType":"Dr","amount":"900.0","narration":" FI Txn @ CSP o"}]},"DATA":{"RRN":"236509979199","miniStatement":[{"date":"16\/08\/2022","txnType":"Cr","amount":"200.0","narration":" BY TRANSFER   "},{"date":"25\/08\/2022","txnType":"Dr","amount":"215.0","narration":" FI Txn @ CSP o"},{"date":"19\/09\/2022","txnType":"Cr","amount":"200.0","narration":" BY TRANSFER   "},{"date":"25\/09\/2022","txnType":"Cr","amount":"2.0","narration":" CREDIT INTERES"},{"date":"15\/10\/2022","txnType":"Cr","amount":"200.0","narration":" BY TRANSFER   "},{"date":"17\/10\/2022","txnType":"Cr","amount":"2000.0","narration":" BY TRANSFER   "},{"date":"19\/10\/2022","txnType":"Dr","amount":"1500.0","narration":" FI Txn @ CSP o"},{"date":"30\/10\/2022","txnType":"Dr","amount":"900.0","narration":" FI Txn @ CSP o"}],"BalanceAmount":207}}';
			} else {
				$response = '{"statusCode":"200","message":"Request Completed","data":{"amount":"0","transaction_id":"BEBA4537223311222181147629I","agent_trid":"BE1672490504945","bankRRN":"TEST8702848","balanceAmount":"6584.62","status":"SUCCESS","miniStatement":[]},"DATA":{"RRN":"236518702848","miniStatement":[],"BalanceAmount":6584.6199999999998908606357872486114501953125}}';
			} */
			
			$res = json_decode($response,true);
			$data = [];
			//if(isset($res['DATA']) && !empty($res['DATA'])){
				$data['txn_amount'] = (isset($res['data']['amount']) && $res['data']['amount'] > 0) ? "" . $res['data']['amount'] : 0 ;
				$data['retailer_txnid'] = isset($res['data']['agent_trid']) ? $res['data']['agent_trid'] : '' ;
				$data['rrn'] = isset($res['data']['bankRRN']) ? $res['data']['bankRRN'] : '' ;
				$data['aadhar'] = $aadhaar;
				$data['balance_amount'] = (isset($res['data']['balanceAmount']) && $res['data']['balanceAmount'] != 'NA') ? "" . round($res['data']['balanceAmount'],2) : 0 ;
				$data['txn_date'] = date("Y-m-d H:i:s");
				$data['iin'] = $IIN;
				$data['mini_statement'] = isset($res['data']['miniStatement']) ? $res['data']['miniStatement'] : array() ;
				
				$res['DATA']['RRN'] = $data['rrn'];
				$res['DATA']['miniStatement'] = $data['mini_statement'];
				$res['DATA']['BalanceAmount'] = $data['balance_amount'];
				
				if(!empty($res)){
					$response = json_encode($res);
				}
				
				if(isset($data['mini_statement']) && !empty($data['mini_statement'])){
					foreach($data['mini_statement'] as $k=>$mv){
						$data['mini_statement'][$k]['amount'] = "".$mv['amount'];
					}
				}
								
				
				$txnStatus = (isset($res['data']['status']) && $res['statusCode']==200) ? $res['data']['status'] : 'FAILED' ;
				$txn_msg = isset($res['message']) ? $res['message'] : '' ;
				$UIDAIAuthenticationCode =  isset($res['data']['transaction_id']) ? $res['data']['transaction_id'] : '' ;
			//}
			
			$apes = DB::table('apestransactions')->insert([
                "user_id" => $userId,
                "service" => $data['iin'],
                "mobile" => $contact,
                "amount" => $data['txn_amount'],
				"transType" => $transT,
				"aadhar" => $aadhaar,
				"RRN" => $data['rrn'],
				"UIDAIAuthenticationCode" => $UIDAIAuthenticationCode,
                "apiResponse"=>$response,
                "ORDER_ID" => $referenceid,
                "txnStatus" => $txnStatus,
                "txn_msg" => $txn_msg,
                "type" => $type,
                "created_at" => date("Y-m-d H:i:s"),
                "updated_at" => date("Y-m-d H:i:s")
            ]);
			
			
			if(isset($res['statusCode']) && $res['statusCode']==200 && $txnStatus == "SUCCESS"){
				
				
				$aepsTransactions = Http::withToken($this->token)->withHeaders([
                    "Accept" => "application/json",
                    "Content-Type" => "application/json",
                ])->timeout(30)->post(env('AepsUrl') . "api/auth/aeps/store", [
                    'user_id' => $this->parentUser,
                    'memberId' => $loginId,
                    'aadhar' => $aadhaar,
                    'contact' => $contact,
                    'txn_amt' => $data['txn_amount'],
                    'rrn_no' => $data['rrn'],
                    'bank' => $data['iin'],
                    'txn_date' => $data['txn_date'],
                    'txn_status' => $txnStatus,
                    'txn_msg' => $txn_msg,
                    'balanceAmount' => $data['balance_amount'],
                    'retailerTxnId' => $order_id,
                ]);
                $aepsTransactions = json_decode($aepsTransactions->body());

                if ($aepsTransactions->status == 1  && ($transType == "MINISTATEMENT"  ||  $transType == "ACCOUNTWITHDRAWAL")) {
					if ($data['txn_amount'] > 0 && $amount > 0) {
						
                        $DeductApesComission = new DeductApesComission();
                        $DeductApesComission->index($data['txn_amount'], $userId, $order_id);
						
                        Wallet::create(["user_id" => $userId, "method" => "Aeps Transaction", "type" => 0, "amount" => $data['txn_amount'], "order_id" => $order_id, "transaction_id" => $order_id, "created_at" => date("Y-m-d H:i:s"), "updated_at" => date("Y-m-d H:i:s")]);
                    }
											
					if($transType == "MINISTATEMENT") {
						$DeductApesMiniComission = new DeductApesMiniComission();
						$DeductApesMiniComission->index($userId,$order_id);
					}
				}
								
				$responseArr['res_code'] = '200';
				$responseArr['message'] = $res['message'];
				$responseArr['data'] = $data;
				$responseArr['request_to'] = $transType;
				
			}
			else {
				$responseArr['res_code'] = '201';
				$responseArr['message'] = isset($res['message']) ? $res['message'] : 'Error';
				$responseArr['data'] = $data;
			}
		
		return response()->json($responseArr);		
		//return response()->json($jsonData);
		
	}   
	
	private function create_token(){ //PaysPrint Token
		$JWT_KEY = $this->apiJwtKey; // Live
		$rand = mt_rand(9999 , 100000);
		$time  = time();
		$data = array(
			"timestamp"  => $time, 
			"partnerId"  => $this->partnerId
		);
		  // Create token header as a JSON string
		$header = json_encode(['typ' => 'JWT', 'alg' => 'HS256']);
		$payload = json_encode($data);
		$base64UrlHeader = str_replace(['+', '/'], ['-', '_'], base64_encode($header));
		$base64UrlPayload = str_replace(['+', '/'], ['-', '_'], base64_encode($payload));
		$signature = hash_hmac('sha256', $base64UrlHeader . "." . $base64UrlPayload, $JWT_KEY , true);
		$base64UrlSignature = str_replace(['+', '/'], ['-', '_'], base64_encode($signature));
		$jwt = $base64UrlHeader . "." . $base64UrlPayload . "." . $base64UrlSignature;
		return $jwt;
		// echo $paysprint['JWT_KEY'] ;
	}	
}
