<?php

namespace App\Http\Controllers;

use App\aadharpaybanks;
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\Apes;
use App\Http\Controllers\Comission\DeductApesComission;
use App\Http\Controllers\Comission\DeductApesMiniComission;

use App\AadharPayTransaction;
use App\AadharPaySettingType;
use App\Http\Controllers\Comission\AddAadharPayComission;
use App\Http\Controllers\Comission\AddAadharPaySurcharge;
use App\Module;

class AepsController extends Controller
{
    private $token;

    private $aepsWallet;

    private $parentUser;
    private $aepsToken;
    private $services = [];
    private $services_sta = [];
    public function __construct()
    {
		//$this->apiToken();
    }
	
	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" => url("/") . "/",

        ]);
        
        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();
		$validator = \Validator::make($resdata, [			
			'transType' => 'required',
			'contact' => 'required',
			'aadhar' => 'required',
			'name' => 'required',
			'pidData' => 'required',
			//'routeApi' => 'required',
		], [
                'pidData.required' => 'Please scan fingerprint',
                //'routeApi.required' => 'Please select AEPS Pipe',
            ]); 
		if ($validator->fails()) {
			$responseArr['error'] = '301';
			//$responseArr['message'] = $validator->errors()->get('contact')[0];
			$responseArr['message'] = $validator->errors()->first();
			return response()->json($responseArr);
		}
		$contact = $resdata['contact'];
		$name = $resdata['name'];
		$aadhaar = $resdata['aadhar'];
		$transType = $resdata['transType'];
		$amount = isset($resdata['amount']) ? $resdata['amount'] : 0;;
		$IIN = isset($resdata['IIN']) ? $resdata['IIN'] : $resdata["radio_IIN"];
		
		$pidData = trim(preg_replace('/\s\s+/', '', htmlentities($resdata['pidData'])));
		$routeApi = (isset($resdata['routeApi']) && strtoupper($resdata['routeApi'])=='YES') ? 'AEPS' : 'ICICIAEPS';
		
		if (!in_array($transType,['accountwithdrawal','balanceinfo','ministatement'])) {
			$responseArr['error'] = '301';
			$responseArr['message'] = 'Transaction type accept only BALANCEINFO/WITHDRAWAL';
			return response()->json($responseArr);
		}

		if ($transType=='accountwithdrawal' && $amount <= 0) {
			$responseArr['error'] = '301';
			$responseArr['message'] = 'Invalid Amount!';
			return response()->json($responseArr);
		}
		$referenceid = "W".time().rand(111,999);
		
		if($routeApi=='ICICIAEPS'){
			if ($transType == "accountwithdrawal") {
				$url = "epMoney/txnNonCash/rest/iciciaeps/accountwithdrawal";
				$transT = 'WITHDRAWAL';
			} else if($transType == "ministatement") {
				$url = "epMoney/txn/rest/aeps/miniStatement";
				$transT = 'MINISTATEMENT';
				$amount = 0;
			} else {
				$url = "epMoney/txn/rest/iciciaeps/balanceinfo";
				$transT = 'BALANCEINFO';
				$amount = 0;
			}
			$type = "1";
			$order_id = "NB" . $referenceid;
			if ($transType == "accountwithdrawal") {
				$order_id = "NC" . $referenceid;
			}
		} else {
			$type = "2";			
			if ($transType == "accountwithdrawal") {
				$url = "epMoney/txnNonCash/rest/aeps/accountwithdrawal";
				$transT = 'WITHDRAWAL';
			} else if($transType == "ministatement") {
				$url = "epMoney/txn/rest/aeps/miniStatement";
				$transT = 'MINISTATEMENT';
				$amount = 0;
			} else {
				$url = "epMoney/txn/rest/aeps/balanceinfo";
				$transT = 'BALANCEINFO';
				$amount = 0;
			}
			$order_id = "YB" . $referenceid;
				if ($transType == "accountwithdrawal") {
					$order_id = "YC" . $referenceid;
				}
		}
		
		$loginId = $AID = Auth()->user()->loginId;
		$userId = Auth()->user()->id;
		
		$key = hex2bin(env('APES_KEY'));
        $string = $order_id . '|' . $AID . '|' . $amount . "|" . $routeApi . "|" . $transT . "|" . $aadhaar;
        $checksum = base64_encode(hash_hmac('sha512', $string, $key, true));
		
		$endurl = env('AepsEpay') . $url;		
		//$pidData = preg_replace("/[\r\n]*/", "", htmlentities($pidData));
		$pidData = trim(preg_replace('/\s\s+/', '', htmlentities($resdata['pidData'])));
		$pidData = addslashes(htmlspecialchars_decode($pidData));
		$jsonData = '{
		  "HEADER": {
			"ST": "' . $transT . '",
			"TXN_AMOUNT": "' . $amount . '",
			"AID": "' . $AID . '",
			"OP": "'. $routeApi .'"
		  },
		  "DATA": {
			"ORDER_ID": "' . $order_id . '",
			"IIN": "' . $IIN . '",
			"AadharNumber": "' . $aadhaar . '",
			"isAgree": true,
			"mobileNumber": "' . $contact . '",
			"CN": "' . $contact . '",
			"BiometricData": "' . $pidData . '"
		  }
		}';
		
		    $response = Http::withHeaders([
                'Authorization' => 'Bearer ' . $this->aepsToken,
                'CHECKSUM' => $checksum,
            ])->asForm()->post($endurl, [
                "jsonData" => $jsonData,
            ]);
			
			if ($transType == "accountwithdrawal") {
				//file_put_contents('aepsWithdrawal_06042022.txt',"\n\n Time: ".date("F j, Y, g:i a"). " - ". $response, FILE_APPEND); 
			} else if($transType == "ministatement") {
				//file_put_contents('aepsMini_06042022.txt',"\n\n Time: ".date("F j, Y, g:i a"). " - ". $response, FILE_APPEND); 
			} else {
				//file_put_contents('aepsBalance_06042022.txt',"\n\n Time: ".date("F j, Y, g:i a"). " - ". $response, FILE_APPEND); 
			}
			//file_put_contents('jsonData6.txt', "\n\n\n Time: ".date("F j, Y, g:i a"). " \n ". $jsonData, FILE_APPEND); 
			
			$response = $response->body();
			//$response = '{"RESP_CODE":"300","RESPONSE":"SUCCESS","RESP_MSG":"Transaction Successful (300)","DATA":{"STAN":"556796","RRN":"215514556796","IIN":"NA","ResponseCode":"00","AccountType":"NA","BalanceType":"NA","CurrancyCode":"356","BalanceIndicator":"NA","BalanceAmount":"2562.74","AccountTypeLedger":"NA","BalanceTypeLedger":"NA","CurrancyCodeLedger":"356","BalanceIndicatorLedger":"NA","BalanceAmountLedger":"2562.74","AccountTypeActual":"NA","BalanceTypeActual":"NA","CurrancyCodeActual":"356","BalanceIndicatorActual":"NA","BalanceAmountActual":"2562.74","Status":2,"UIDAIAuthenticationCode":"4ad6b2c2b8924b35a7883b890b432258","RetailerTxnId":"YBW1654333298605","BankName":"","OTPKey":"","miniStatement":[{"amount":"1000.00","date":"30/05/2022","narration":"UPI/2150","txnType":"Dr"},{"amount":"220.00","date":"30/05/2022","narration":"UPI/2150","txnType":"Dr"},{"amount":"459.00","date":"27/05/2022","narration":"UPI/2147","txnType":"Dr"},{"amount":"648.00","date":"27/05/2022","narration":"UPI/2147","txnType":"Dr"},{"amount":"2100.00","date":"26/05/2022","narration":"NEFT-N14","txnType":"Cr"},{"amount":"22900.00","date":"20/05/2022","narration":"BIL/NEFT","txnType":"Dr"},{"amount":"4.00","date":"20/05/2022","narration":"MMT/IMPS","txnType":"Dr"},{"amount":"23000.00","date":"20/05/2022","narration":"NEFT-N14","txnType":"Cr"},{"amount":"1.00","date":"20/05/2022","narration":"BIL/NEFT","txnType":"Dr"}],"Aadhar":"XXXXXXXX3439","txnDate":"Sat Jun 04 14:31:45 IST 2022","txnCharge":null,"paidAmount":0.0}}';
			//$response = '{"RESP_CODE":"999","RESPONSE":"SERVER_ERROR","RESP_MSG":"Server Error. Please contact System Administration (Level 2) (999)"}';
			
			$res = json_decode($response,true);
			
			//if(isset($res['DATA']) && !empty($res['DATA'])){
				$data['txn_amount'] = (isset($res['DATA']['TxnAmount']) && $res['DATA']['TxnAmount'] > 0) ? $res['DATA']['TxnAmount'] : 0 ;
				$data['retailer_txnid'] = isset($res['DATA']['RetailerTxnId']) ? $res['DATA']['RetailerTxnId'] : '' ;
				$data['rrn'] = isset($res['DATA']['RRN']) ? $res['DATA']['RRN'] : '' ;
				$data['aadhar'] = isset($res['DATA']['Aadhar']) ? $res['DATA']['Aadhar'] : '' ;
				$data['balance_amount'] = (isset($res['DATA']['BalanceAmountActual']) && $res['DATA']['BalanceAmountActual'] != 'NA') ? round($res['DATA']['BalanceAmountActual'],2) : 0 ;
				$data['txn_date'] = isset($res['DATA']['txnDate']) ? $res['DATA']['txnDate'] : '' ;
				$data['iin'] = isset($res['DATA']['IIN']) ? $res['DATA']['IIN'] : '' ;
				$data['mini_statement'] = isset($res['DATA']['miniStatement']) ? $res['DATA']['miniStatement'] : array() ;
				
				$data['balance_amount'] = (($data['balance_amount'] == 0) && isset($res['DATA']['BalanceAmountLedger'])) ? round($res['DATA']['BalanceAmountLedger'],2) : $data['balance_amount'];
				
				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['RESPONSE']) ? $res['RESPONSE'] : '' ;
				$txn_msg = isset($res['RESP_MSG']) ? $res['RESP_MSG'] : '' ;
				$UIDAIAuthenticationCode = isset($res['DATA']['UIDAIAuthenticationCode']) ? $res['DATA']['UIDAIAuthenticationCode'] : '' ;
			//}
			
			$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" => $order_id,
                "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['RESP_CODE']) && $res['RESP_CODE']==300 && $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['RESP_MSG'];
				$responseArr['data'] = $data;
				$responseArr['request_to'] = $transType;
				Session::flash('success', $res['RESP_MSG']);
				Session::flash('info', "Your account balance is: " . $data['balance_amount']);
				if($transType == "accountwithdrawal") {
					return redirect()->back();
				} else {
					return redirect()->back()->withInput(['aadhar'=>$request->aadhar,'routeApi'=>$request->routeApi,'transType'=>$request->transType]);
				}
			}
			else {
				Session::flash('error', $res['RESP_MSG']);				
				return redirect()->back()->withInput(['aadhar'=>$request->aadhar,'routeApi'=>$request->routeApi,'transType'=>$request->transType]);
			}
		
		return response()->json($responseArr);		
		//return response()->json($jsonData);
		
	}   
		
    public function aadhar_transaction(Request $request){
		//return response()->json($request->all());
		
		$this->apiToken();
		
		$resdata = $request->all();
		$validator = \Validator::make($resdata, [			
			'transType' => 'required',
			'contact' => 'required',
			'aadhar' => 'required',
			'name' => 'required',
			'pidData' => 'required',
			//'routeApi' => 'required',
		], [
                'pidData.required' => 'Please scan fingerprint',
                //'routeApi.required' => 'Please select AEPS Pipe',
            ]); 
		if ($validator->fails()) {
			$responseArr['error'] = '301';
			//$responseArr['message'] = $validator->errors()->get('contact')[0];
			$responseArr['message'] = $validator->errors()->first();
			return response()->json($responseArr);
		}
		$contact = $resdata['contact'];
		$name = $resdata['name'];
		$aadhaar = $resdata['aadhar'];
		$transType = $resdata['transType'];
		$amount = isset($resdata['amount']) ? $resdata['amount'] : 0;;
		$IIN = isset($resdata['IIN']) ? $resdata['IIN'] : $resdata["radio_IIN"];
		
		$pidData = trim(preg_replace('/\s\s+/', '', htmlentities($resdata['pidData'])));
		$routeApi = (isset($resdata['routeApi']) && strtoupper($resdata['routeApi'])=='YES') ? 'AEPS' : 'ICICIAEPS';
		
		if (!in_array($transType,['aadharPay'])) {
			$responseArr['error'] = '301';
			$responseArr['message'] = 'Transaction type accept only aadharPay';
			return response()->json($responseArr);
		}

		if ($transType=='aadharPay' && $amount <= 0) {
			$responseArr['error'] = '301';
			$responseArr['message'] = 'Invalid Amount!';
			return response()->json($responseArr);
		}
		$referenceid = "AP".time().rand(111,999);
		
		$type = "2";	
		
		$url = 'txn/rest/aadharPpay/accountwithdrawal';
		$transT = 'WITHDRAWAL';
		
		$order_id = "Y" . $referenceid;
		
		$loginId = $AID = Auth()->user()->loginId;
		$userId = Auth()->user()->id;
		
		$key = hex2bin(env('APES_KEY'));
        $string = $order_id . '|' . $AID . '|' . $amount . "|AADHARPAY|WITHDRAWAL|" . $aadhaar;
        $checksum = base64_encode(hash_hmac('sha512', $string, $key, true));
		
		$endurl = env('AADHARPAY') . $url;		
		//$pidData = preg_replace("/[\r\n]*/", "", htmlentities($pidData));
		$pidData = trim(preg_replace('/\s\s+/', '', htmlentities($resdata['pidData'])));
		$pidData = addslashes(htmlspecialchars_decode($pidData));
		$jsonData = '{
		  "HEADER": {
			"ST": "WITHDRAWAL",
			"TXN_AMOUNT": "' . $amount . '",
			"AID": "' . $AID . '",
			"OP": "AADHARPAY"
		  },
		  "DATA": {
			"ORDER_ID": "' . $order_id . '",
			"IIN": "' . $IIN . '",
			"AadharNumber": "' . $aadhaar . '",
			"isAgree": true,
			"mobileNumber": "' . $contact . '",
			"CN": "' . $contact . '",
			"BiometricData": "' . $pidData . '"
		  }
		}';
		
		    $response = Http::withHeaders([
                'Authorization' => 'Bearer ' . $this->aepsToken,
                'CHECKSUM' => $checksum,
            ])->asForm()->post($endurl, [
                "jsonData" => $jsonData,
            ]);
			
			//file_put_contents('aadharpay_06042022.txt',"\n\n Time: ".date("F j, Y, g:i a"). " - ". $response, FILE_APPEND);
			//file_put_contents('jsonData7.txt', "\n\n\n Time: ".date("F j, Y, g:i a"). " \n ". $jsonData, FILE_APPEND); 
			
			$response = $response->body();
			
			$res = json_decode($response,true);
			

				$data['txn_amount'] = (isset($res['DATA']['TxnAmount']) && $res['DATA']['TxnAmount'] > 0) ? $res['DATA']['TxnAmount'] : 0 ;
				$data['retailer_txnid'] = isset($res['DATA']['RetailerTxnId']) ? $res['DATA']['RetailerTxnId'] : '' ;
				$data['rrn'] = isset($res['DATA']['RRN']) ? $res['DATA']['RRN'] : '' ;
				$data['aadhar'] = isset($res['DATA']['Aadhar']) ? $res['DATA']['Aadhar'] : '' ;
				$data['balance_amount'] = (isset($res['DATA']['BalanceAmountActual']) && $res['DATA']['BalanceAmountActual'] != 'NA') ? round($res['DATA']['BalanceAmountActual'],2) : 0 ;
				$data['txn_date'] = isset($res['DATA']['txnDate']) ? $res['DATA']['txnDate'] : '' ;
				$data['iin'] = isset($res['DATA']['IIN']) ? $res['DATA']['IIN'] : '' ;
				
				$data['balance_amount'] = (($data['balance_amount'] == 0) && isset($res['DATA']['BalanceAmountLedger'])) ? round($res['DATA']['BalanceAmountLedger'],2) : $data['balance_amount'];
				
				$txnStatus = isset($res['RESPONSE']) ? $res['RESPONSE'] : '' ;
				$txn_msg = isset($res['RESP_MSG']) ? $res['RESP_MSG'] : '' ;
				$UIDAIAuthenticationCode = isset($res['DATA']['UIDAIAuthenticationCode']) ? $res['DATA']['UIDAIAuthenticationCode'] : '' ;

            $apes = DB::table('aadhar_pay_transactions')->insert([
                "user_id" => $userId,
                "amount" => $data['txn_amount'],
				"aadhar" => $aadhaar,
				"RRN" => $data['rrn'],
				"IIN" => $data['iin'],
				"txnDate" => $data['txn_date'],
				"UIDAIAuthenticationCode" => $UIDAIAuthenticationCode,
                "apiResponse"=>$response,
                "RetailerTxnId" => $order_id,
                "tra_status" => $txnStatus,
                "tra_message" => $txn_msg,
                "created_at" => date("Y-m-d H:i:s"),
                "updated_at" => date("Y-m-d H:i:s")
            ]);
			
			if(isset($res['RESP_CODE']) && $res['RESP_CODE']==300 && $txnStatus == "SUCCESS"){
				
				
				$aepsTransactions = Http::withToken($this->token)->withHeaders([
                    "Accept" => "application/json",
                    "Content-Type" => "application/json",
                ])->timeout(30)->post(env('AepsUrl') . "api/auth/aadharPay/store", [
                    'user_id' => $this->parentUser,
                    'loginId' => $loginId,
                    'aadhar' => $aadhaar,
                    'contact' => $contact,
                    'amount' => $data['txn_amount'],
                    'UIDAIAuthenticationCode' => $UIDAIAuthenticationCode,
                    'RRN' => $data['rrn'],
                    'IIN' => $data['iin'],
                    'txnDate' => $data['txn_date'],
                    'tra_status' => $txnStatus,
                    'tra_message' => $txn_msg,
                    'RetailerTxnId' => $order_id,
					"created_at" => date("Y-m-d H:i:s"),
                    "updated_at" => date("Y-m-d H:i:s"),
                ]);
                $aepsTransactions = json_decode($aepsTransactions->body());

                if ($aepsTransactions->status == 1 ) {
					if ($data['txn_amount'] > 0 && $amount > 0) {
						
                       
						
                        Wallet::create(["user_id" => $userId, "method" => "Aadhar Pay 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")]);
						
						$setting = AadharPaySettingType::first();
					
						if ($setting->type == 1) {
							$aadharPayFee = new AddAadharPayComission();
						} else {
							$aadharPayFee = new AddAadharPaySurcharge();
						}
						$aadharPayFee->index((double) $data['txn_amount'], $userId,$order_id);
                    }
											
					

				}
				
				$data['balance_amount'] = (isset($res['DATA']['BalanceAmountActual']) && $res['DATA']['BalanceAmountActual'] == 'NA') ? 'NA' : round($data['balance_amount'],2) ;
				
				$responseArr['res_code'] = '200';
				$responseArr['message'] = $res['RESP_MSG'];
				$responseArr['data'] = $data;
				$responseArr['request_to'] = $transType;
				
				Session::flash('success', $res['RESP_MSG']);
				Session::flash('info', "Your account balance is: " . $data['balance_amount']);
				if($transType == "aadharPay") {
					return redirect()->back()->withInput(['transType'=>$request->transType]);
				} else {
					return redirect()->back()->withInput(['aadhar'=>$request->aadhar,'routeApi'=>$request->routeApi,'transType'=>$request->transType]);
				}
			} else {
				Session::flash('error', $res['RESP_MSG']);				
				return redirect()->back()->withInput(['aadhar'=>$request->aadhar,'routeApi'=>$request->routeApi,'transType'=>$request->transType]);
				
				$responseArr['res_code'] = '303';
				$responseArr['message'] = $res['RESP_MSG'];
				$responseArr['request_to'] = $transType;
			}
			
			
		return response()->json($responseArr);		
		//return response()->json($jsonData);
		
	}   

    public function index(){		
        if (in_array("apes", request()->userMoules)) {
			$userName = Auth::user()->name;
			$userMobile = Auth::user()->contact;
            $aadharpaybanks = aadharpaybanks::all();
            return view('AepsDeep.aepsNew', compact('aadharpaybanks','userName','userMobile'));
        } else {
            return abort(404);

        }

    }
	
    private function getAepsToken()
    {
        $response = Http::withHeaders(["Content-type" => "application/json"])
            ->withBasicAuth('DiOsM', 'diOSm@5119#Ep')->post(
            env('AEPSPAY') . "epMoney/oauth/token?grant_type=client_credentials",
            ["grant_type" => "client_credentials"]
        );

        if ($response->successful()) {
            return $token = $response->json();

        }
    }
	
	public function getRdDataHash($device_type, $contact, $pipe){	
		$token = $this->getAepsToken();
		$AID = $AID = Auth()->user()->loginId;
		$routeApi = (isset($pipe) && strtoupper($pipe)=='YES') ? 'AEPS' : 'ICICIAEPS';
        $response = Http::withToken($token["access_token"])->asForm()->post(env('AEPSPAY') . 'epMoney/rest/aeps/getrddatahash', [
            "jsonData" => '{
          "HEADER": {
            "ST": "BALANCEINFO",
            "AID": "'.$AID.'",
            "OP": "'.$routeApi.'"
          },
          "DATA": {
            "CUSTOMER_MOBILE": "' . $contact . '",
            "DEVICE": "' . $device_type . '"
          }
        }',
        ]);

       $body = $response->getBody();

        $response = json_decode($body);

        $arr = ['pidOpt' => $response->DATA->pidOpt, 'reqUrl' => $response->DATA->reqUrl];
        return $arr; 

    }
	
	public function getApesReciept(Request $request){
		if(isset($request->transType) && $request->transType=="AP"){
			$transactionHistory = AadharPayTransaction::with("user")->where(['RetailerTxnId'=>request()->id])->first(); 
			$bankHistory = array();
			if(!empty($transactionHistory)){
				$bankHistory = aadharpaybanks::where(['iin'=>$transactionHistory->service])->first(); 
			}
			//return compact('transactionHistory','bankHistory');
			return view('aadhaarPay.reciept',compact('transactionHistory','bankHistory'));
			
		} else {
			$transactionHistory = Apes::with("user")->where(['ORDER_ID'=>request()->id])->first(); 
			$bankHistory = array();
			if(!empty($transactionHistory)){
				$bankHistory = aadharpaybanks::where(['iin'=>$transactionHistory->service])->first(); 
			}
			//return compact('transactionHistory','bankHistory');
			return view('apes.reciept2',compact('transactionHistory','bankHistory'));
			
		}
    }	
	
	public function recentFiveList(){
		$ape = Apes::where(["user_id" => Auth::user()->id])->newQuery();
		$apes = $ape->orderBy('created_at', 'desc')->take(5)->get(["ORDER_ID","amount","transType","txnStatus","type","aadhar","updated_at"]);
		$rows =  '';
		foreach($apes as $row){
			$rows .= "<tr>";
			$rows .= "<td><strong>OrderId: </strong>".$row['ORDER_ID']."<br/><strong>Amount: </strong>".$row['amount']."<br/><strong>Date: </strong>".date_format($row['updated_at'],'d-F H:i:s')."<br/><strong>Aadhar: </strong>xxxx-xxxx-".substr($row['aadhar'],-4)."</td>";
			$rows .= "<td>".$row['txnStatus']."</td>";
			$rows .= "<td><a href='javascript:void(0)' onclick='openReciept(\"".$row['ORDER_ID']."\")' > Print </a></td>";
			
			$rows .= "/<tr>";
		}
		return $rows;
	}
	public function recentFiveListAP(){
		$ape = AadharPayTransaction::where(["user_id" => Auth::user()->id])->newQuery();
		$apes = $ape->orderBy('created_at', 'desc')->take(5)->get(["RetailerTxnId","amount","tra_status","aadhar","updated_at"]);
		$rows =  '';
		foreach($apes as $row){
			$rows .= "<tr>";
			$rows .= "<td><strong>OrderId: </strong>".$row['RetailerTxnId']."<br/><strong>Amount: </strong>".$row['amount']."<br/><strong>Date: </strong>".date_format($row['updated_at'],'d-F H:i:s')."<br/><strong>Aadhar: </strong>xxxx-xxxx-".substr($row['aadhar'],-4)."</td>";
			$rows .= "<td>".$row['tra_status']."</td>";
			$rows .= "<td><a href='javascript:void(0)' onclick='openRecieptAP(\"".$row['RetailerTxnId']."\")' > Print </a></td>";
			
			$rows .= "/<tr>";
		}
		return $rows;
	}
 
 
}
