Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php use App\Models\IpsTransaction; use App\Models\SbswitchApiLog; use App\Models\Sp..

Decoded Output download

<?php 
 
use App\Models\IpsTransaction; 
use App\Models\SbswitchApiLog; 
use App\Models\SpsApiLog; 
use Illuminate\Http\JsonResponse; 
use Illuminate\Support\Facades\DB; 
use Illuminate\Support\Facades\Http; 
use Illuminate\Support\Facades\Log; 
use RobRichards\XMLSecLibs\XMLSecEnc; 
use RobRichards\XMLSecLibs\XMLSecurityDSig; 
use RobRichards\XMLSecLibs\XMLSecurityKey; 
 
goto tiMqI; 
K4bJx: 
/** 
 * @throws DOMException 
 * @throws Exception 
 */ 
function processPacs008XML($xml, DOMDocument $doc, string $remoteAddress, $signed = false): \Illuminate\Http\Response 
{ 
//    if ($signed) { 
//        $verificationData = verifyXMLSignature($doc); 
//        if (!$verificationData['status']) 
//            return errorResponse($verificationData['message'], $remoteAddress); 
//    } 
 
    $pacs_to = $doc->getElementsByTagName("Id")->item(3)->nodeValue; 
    $log_tx_type = 'PACS008'; 
    $log_msg_id = $doc->getElementsByTagName("MsgId")->item(0)->nodeValue; 
    $req = $xml; 
    if ($pacs_to != config("services.ips.institution_bic")) { 
//        Log::info($xml); 
        $resp = "Invalid Request. Error.003"; 
        $log_msg = "Invalid Request. Error.003"; 
        sps_api_log($log_tx_type, $log_msg_id, $req, $resp, $log_msg, 400, $remoteAddress, '/incoming'); 
        return errorResponse($resp, $remoteAddress . " To:" . $pacs_to); 
    } 
    $amount = $doc->getElementsByTagName("IntrBkSttlmAmt")->item(0)->nodeValue; 
    $ccy = $doc->getElementsByTagName("IntrBkSttlmAmt")->item(0)->getAttribute("Ccy"); 
    $dbtr_nm = $doc->getElementsByTagName("Nm")->item(0)->nodeValue; 
    $dbtr_adr = $doc->getElementsByTagName("AdrLine")->item(0)->nodeValue; 
    $dbtr_acc_id = $doc->getElementsByTagName("Id")->item(5)->nodeValue; 
    $bdtr_prtry = $doc->getElementsByTagName("Prtry")->item(2)->nodeValue; 
    $cdtr_nm = $doc->getElementsByTagName("Nm")->item(1)->nodeValue; 
    $cbtr_acc_id = $doc->getElementsByTagName("Id")->item(9)->nodeValue; 
    $cdtr_prtry = $doc->getElementsByTagName("Prtry")->item(3)->nodeValue; 
    $dbtr_agent = $doc->getElementsByTagName("Id")->item(6)->nodeValue; 
    $cdtr_agent = $doc->getElementsByTagName("Id")->item(7)->nodeValue; 
    $rsn = ''; 
    $tx_status = false; 
    $tx_id = ''; 
    if ($dbtr_agent == config("services.ips.institution_bic")) { 
        $account_exists = $dbtr_acc_id == config("services.ips.test_acc_id"); 
        if ($account_exists) { 
            $tx_id = $doc->getElementsByTagName("TxId")->item(0)->nodeValue; 
            $ips_transaction = IpsTransaction::where("tx_id", $tx_id)->first(); 
//            if ($amount > 200) { 
//                $rsn = "Insufficient funds"; 
//            } else 
            if ($amount < 0) { 
                $rsn = "Invalid amount"; 
            } elseif ($ips_transaction) { 
                $rsn = "Duplicate transaction"; 
            } else { 
                $tx_status = true; 
            } 
        } else { 
            $rsn = "Provided account does not exist"; 
            $tx_status = false; 
        } 
    } elseif ($cdtr_agent == config("services.ips.institution_bic")) { 
//        $account_exists = false; 
        if ($signed) { 
            $acc_no = $cbtr_acc_id; 
            $acc_interface = new \App\CentralLogics\CBSInterface(); 
            $acc_details = $acc_interface->account_verification([ 
                'bank_bic' => $pacs_to, 
                'account_id' => $acc_no, 
                'currency' => $ccy 
            ]); 
            $account_exists = $acc_details['status']; 
//            $acc_name = $acc_details['data']->account_name ?? ''; 
//            Log::debug(json_encode($acc_details)); 
//            $data = array("MsgDefIdr" => $doc->getElementsByTagName("MsgDefIdr")->item(0)->nodeValue, "from_institution" => $acmt_fr, "fp_institution" => $acmt_fp, "to_institution" => $acmt_to, "biz_msg_idr1" => $acmt_to . date("YmdHis") . rand(100000, 999999), "biz_msg_idr2" => $acmt_fr . date("YmdHis") . rand(100000, 999999), "credt" => date("Y-m-d\TH:i:s.000\Z"), "orgnl_msg_id" => $msg_id, "orgnl_id" => $orgnl_id, "message_id" => $acmt_to . date("YmdHis") . rand(100000, 999999), "cred_tm" => date("Y-m-d\TH:i:s.000\Z"), "sttlm_mtd" => "CLRG", "verified" => $acc_exists ? "true" : "false", "prtry" => $acc_exists ? "SUCC" : "INVA", "orgnlpaty_and_acct_id" => $acmt_fr . "405411100000087557", "acc_name" => $acc_name, "acct_id" => $acc_id, "ip" => $remoteAddress ?? "not set"); 
        } else { 
            $account_exists = $cbtr_acc_id == config("services.ips.test_acc_id"); 
        } 
        if ($account_exists) { 
            $tx_id = $doc->getElementsByTagName("TxId")->item(0)->nodeValue; 
            $ips_transaction = IpsTransaction::where("tx_id", $tx_id)->first(); 
//            if ($amount > 200) { 
//                $rsn = "Insufficient funds"; 
//            } else 
            if ($amount < 0) { 
                $rsn = "Invalid amount"; 
            } elseif ($ips_transaction) { 
                $rsn = "Duplicate transaction"; 
            } else { 
                $tx_status = true; 
            } 
        } else { 
            $rsn = "Provided account does not exist"; 
            $tx_status = false; 
        } 
    } else { 
//        Log::info($xml); 
        $resp = "Invalid Request. Error.003"; 
        $log_msg = "Invalid Request. Error.004"; 
        sps_api_log($log_tx_type, $log_msg_id, $req, $resp, $log_msg, 400, $remoteAddress, '/incoming'); 
        return errorResponse($resp, $remoteAddress); 
    } 
    $data = array("MsgDefIdr" => $doc->getElementsByTagName("MsgDefIdr")->item(0)->nodeValue, "from_institution" => $doc->getElementsByTagName("Id")->item(1)->nodeValue, "to_institution" => $doc->getElementsByTagName("Id")->item(2)->nodeValue, "fp_institution" => $doc->getElementsByTagName("Id")->item(0)->nodeValue, "biz_msg_idr1" => $doc->getElementsByTagName("BizMsgIdr")->item(0)->nodeValue, "biz_msg_idr2" => $pacs_to . date("YmdHis") . rand(100000, 999999), "credt1" => $doc->getElementsByTagName("CreDt")->item(0)->nodeValue, "credt2" => date("Y-m-d\TH:i:s.000\Z"), "message_id" => $doc->getElementsByTagName("MsgId")->item(0)->nodeValue, "cred_tm" => $doc->getElementsByTagName("CreDtTm")->item(0)->nodeValue, "sttlm_mtd" => $doc->getElementsByTagName("SttlmMtd")->item(0)->nodeValue, "end_to_end_id" => $doc->getElementsByTagName("EndToEndId")->item(0)->nodeValue, "tx_id" => $doc->getElementsByTagName("TxId")->item(0)->nodeValue, "AccptncDtTm" => date("Y-m-d\TH:i:s.000\Z"), "amount" => $amount, "ccy" => $ccy, "dbtr_nm" => $dbtr_nm, "dbtr_adr" => $dbtr_adr, "dbtr_acc_id" => $dbtr_acc_id, "bdtr_prtry" => $bdtr_prtry, "cdtr_nm" => $cdtr_nm, "cdtr_acc_id" => $cbtr_acc_id, "cdtr_prtry" => $cdtr_prtry, "tx_status" => $tx_status ? "true" : "false", "TxSts" => $tx_status ? "ACSC" : "RJCT", "prtry" => $tx_status ? "SUCC" : "INVA", "reason" => $rsn, "ip" => $remoteAddress ?? "not set"); 
    if ($tx_status) { 
        try { 
            DB::beginTransaction(); 
//            if ($signed) { 
            $pushData = [ 
                'from_account_id' => $dbtr_acc_id, 
                'from_account_name' => $dbtr_nm, 
                'to_account_id' => $cbtr_acc_id, 
                'to_account_name' => $cdtr_nm, 
                'to_bank_bic' => $cdtr_agent, 
                'amount' => $amount, 
                'ccy' => $ccy, 
                'description' => $cdtr_prtry, 
                'charges' => 'SLEV', 
            ]; 
            $pushPayment = (new \App\CentralLogics\CBSInterface())->push_payment($pushData); 
            if ($pushPayment['status']) { 
                $create_data = array("tx_id" => $data["tx_id"], "type" => "pacs.008.001.10", "tx_status" => $data["tx_status"], "amount" => $data["amount"], "currency" => $data["ccy"], "from_institution" => $data["from_institution"], "to_institution" => $data["to_institution"], "fp_institution" => $data["fp_institution"], "biz_msg_idr1" => $data["biz_msg_idr1"], "biz_msg_idr2" => $data["biz_msg_idr2"], "credt1" => $data["credt1"], "credt2" => $data["credt2"], "message_id" => $data["message_id"], "MsgDefIdr" => $data["MsgDefIdr"], "cred_tm" => $data["cred_tm"], "sttlm_mtd" => $data["sttlm_mtd"], "end_to_end_id" => $data["end_to_end_id"], "TxSts" => $data["TxSts"], "prtry" => $data["prtry"], "reason" => $data["reason"], "AccptncDtTm" => $data["AccptncDtTm"], "dbtr_name" => $data["dbtr_nm"], "dbtr_address" => $data["dbtr_adr"], "dbtr_acc_id" => $data["dbtr_acc_id"], "bdtr_prtry" => $data["bdtr_prtry"], "cdtr_name" => $data["cdtr_nm"], "cdtr_acc_id" => $data["cdtr_acc_id"], "cdtr_prtry" => $data["cdtr_prtry"], "ip" => $data["ip"]); 
                $ips_transaction = IpsTransaction::create($create_data); 
                DB::commit(); 
            } else { 
                DB::rollBack(); 
                Log::debug(json_encode($pushPayment)); 
//                    return errorResponse('Push payment failed', $remoteAddress); 
                $rsn = 'Push payment could not be processed at this time. Please try again later.'; 
                $tx_status = false; 
            } 
//            } 
        } catch 
        (\Exception $e) { 
            DB::rollBack(); 
//            Log::error($e->getMessage()); 
            $resp = "Invalid Request. Error.005"; 
            $log_msg = "Internal Server Error. Error.005." . substr($e->getMessage(), 0, 200); 
            sps_api_log($log_tx_type, $log_msg_id, $req, $resp, $log_msg, 400, $remoteAddress, '/incoming'); 
            return errorResponse($resp, $remoteAddress); 
        } 
    } 
 
    $data = array("MsgDefIdr" => $doc->getElementsByTagName("MsgDefIdr")->item(0)->nodeValue, "from_institution" => $doc->getElementsByTagName("Id")->item(1)->nodeValue, "to_institution" => $doc->getElementsByTagName("Id")->item(2)->nodeValue, "fp_institution" => $doc->getElementsByTagName("Id")->item(0)->nodeValue, "biz_msg_idr1" => $doc->getElementsByTagName("BizMsgIdr")->item(0)->nodeValue, "biz_msg_idr2" => $pacs_to . date("YmdHis") . rand(100000, 999999), "credt1" => $doc->getElementsByTagName("CreDt")->item(0)->nodeValue, "credt2" => date("Y-m-d\TH:i:s.000\Z"), "message_id" => $doc->getElementsByTagName("MsgId")->item(0)->nodeValue, "cred_tm" => $doc->getElementsByTagName("CreDtTm")->item(0)->nodeValue, "sttlm_mtd" => $doc->getElementsByTagName("SttlmMtd")->item(0)->nodeValue, "end_to_end_id" => $doc->getElementsByTagName("EndToEndId")->item(0)->nodeValue, "tx_id" => $doc->getElementsByTagName("TxId")->item(0)->nodeValue, "AccptncDtTm" => date("Y-m-d\TH:i:s.000\Z"), "amount" => $amount, "ccy" => $ccy, "dbtr_nm" => $dbtr_nm, "dbtr_adr" => $dbtr_adr, "dbtr_acc_id" => $dbtr_acc_id, "bdtr_prtry" => $bdtr_prtry, "cdtr_nm" => $cdtr_nm, "cdtr_acc_id" => $cbtr_acc_id, "cdtr_prtry" => $cdtr_prtry, "tx_status" => $tx_status ? "true" : "false", "TxSts" => $tx_status ? "ACSC" : "RJCT", "prtry" => $tx_status ? "SUCC" : "INVA", "reason" => $rsn, "ip" => $remoteAddress ?? "not set"); 
//    Log::info(json_encode($data)); 
    $xml = generatePacs002XML($data, $signed); 
 
    $log_msg = $tx_status ? 'Success' : $rsn; 
    sps_api_log($log_tx_type, $log_msg_id, $req, $xml, $log_msg, 200, $remoteAddress, '/incoming'); 
 
    return successResponse($xml, $remoteAddress); 
} 
 
goto N0htX; 
jiU76: 
/** 
 * @throws Exception 
 */ 
function processAcmt023XML($xml, DOMDocument $doc, string $remoteAddress, $signed = false): \Illuminate\Http\Response 
{ 
//    if ($signed) { 
//        $verificationData = verifyXMLSignature($doc); 
//        if (!$verificationData['status']) 
//            return errorResponse($verificationData['message'], $remoteAddress); 
//    } 
    $log_tx_type = 'ACMT023'; 
    $log_msg_id = $doc->getElementsByTagName("MsgId")->item(0)->nodeValue; 
 
    $acmt_to1 = $doc->getElementsByTagName("Id")->item(1)->nodeValue; 
    if ($acmt_to1 != config("services.ips.institution_bic")) { 
//        Log::debug("Invalid Request. Error.003" . " IP:" . $remoteAddress); 
//        Log::info($xml); 
        $log_msg = "Invalid Request. Error.03"; 
        $resp = "<Document xmlns='urn:iso:std:iso:20022:tech:xsd:admi.002.001.01'><admi.002.001.01><Rsn><RjctgPtyRsn>Invalid Request. Error.003</RjctgPtyRsn></Rsn></admi.002.001.01>"; 
        sps_api_log($log_tx_type, $log_msg_id, $xml, $resp, $log_msg, 400, $remoteAddress, '/incoming'); 
        return response($resp, "text/xml, charset=is0-8859-1"); 
    } 
    $acmt_fp = $doc->getElementsByTagName("Id")->item(0)->nodeValue; 
    $acmt_to = $doc->getElementsByTagName("Id")->item(2)->nodeValue; 
    $acmt_fr = $doc->getElementsByTagName("Id")->item(1)->nodeValue; 
    $orgnl_id = $doc->getElementsByTagName("Id")->item(4)->nodeValue; 
    $acc_id = $doc->getElementsByTagName("Id")->item(6)->nodeValue; 
    $msg_id = $doc->getElementsByTagName("MsgId")->item(0)->nodeValue; 
    if ($signed) { 
        $acc_interface = new \App\CentralLogics\CBSInterface(); 
        //log my request 
        Log::debug(json_encode([ 
            'bank_bic' => $acmt_to1, 
            'account_id' => substr($acc_id, 4), 
            'currency' => 'USD' 
        ])); 
        $acc_details = $acc_interface->account_verification([ 
            'bank_bic' => $acmt_to1, 
            'account_id' => substr($acc_id, 4), 
            'currency' => 'USD' 
        ]); 
 
        //log cbs response 
        Log::debug(json_encode($acc_details)); 
 
        //if currency is not USD, then account is invalid 
        if ($acc_details['status'] && !str_starts_with($acc_id, 'USD')) { 
            $acc_exists = false; 
        } else { 
            $acc_exists = $acc_details['status']; 
        } 
        $acc_name = $acc_details['data']->account_name ?? ''; 
//        Log::debug(json_encode($cbs_resp_acc)); 
        $data = array("MsgDefIdr" => $doc->getElementsByTagName("MsgDefIdr")->item(0)->nodeValue, "from_institution" => $acmt_fr, "fp_institution" => $acmt_fp, "to_institution" => $acmt_to, "biz_msg_idr1" => $acmt_to . date("YmdHis") . rand(100000, 999999), "biz_msg_idr2" => $acmt_fr . date("YmdHis") . rand(100000, 999999), "credt" => date("Y-m-d\TH:i:s.000\Z"), "orgnl_msg_id" => $msg_id, "orgnl_id" => $orgnl_id, "message_id" => $acmt_to . date("YmdHis") . rand(100000, 999999), "cred_tm" => date("Y-m-d\TH:i:s.000\Z"), "sttlm_mtd" => "CLRG", "verified" => $acc_exists ? "true" : "false", "prtry" => $acc_exists ? "SUCC" : "INVA", "orgnlpaty_and_acct_id" => $acmt_fr . "405411100000087557", "acc_name" => $acc_name, "acct_id" => $acc_id, "ip" => $remoteAddress ?? "not set"); 
    } else { 
        $acc_exists = $acc_id == "USD:" . config("services.ips.test_acc_id"); 
        $data = array("MsgDefIdr" => $doc->getElementsByTagName("MsgDefIdr")->item(0)->nodeValue, "from_institution" => $acmt_fr, "fp_institution" => $acmt_fp, "to_institution" => $acmt_to, "biz_msg_idr1" => $acmt_to . date("YmdHis") . rand(100000, 999999), "biz_msg_idr2" => $acmt_fr . date("YmdHis") . rand(100000, 999999), "credt" => date("Y-m-d\TH:i:s.000\Z"), "orgnl_msg_id" => $msg_id, "orgnl_id" => $orgnl_id, "message_id" => $acmt_to . date("YmdHis") . rand(100000, 999999), "cred_tm" => date("Y-m-d\TH:i:s.000\Z"), "sttlm_mtd" => "CLRG", "verified" => $acc_exists ? "true" : "false", "prtry" => $acc_exists ? "SUCC" : "INVA", "orgnlpaty_and_acct_id" => $acmt_fr . "405411100000087557", "acc_name" => config("services.ips.test_acc_name"), "acct_id" => $acc_id, "ip" => $remoteAddress ?? "not set"); 
    } 
//    $acc_exists = $acc_id == "USD:" . config("services.ips.test_acc_id"); 
//    Log::info(json_encode($data)); 
    $req = $xml; 
    $xml = generateAcmt024XML($data, $signed); 
 
    $log_msg = $data["prtry"]; 
    sps_api_log($log_tx_type, $log_msg_id, $req, $xml, $log_msg, 200, $remoteAddress, '/incoming'); 
 
    Log::info("Response:" . $xml); 
    return response($xml)->header("Content-Type", "text/xml, charset=is0-8859-1"); 
} 
 
/** 
 * @throws \Exception 
 */ 
function bmlSoapResponseToArray($soapResponse, $namespace = null) 
{ 
    $xml = simplexml_load_string($soapResponse, 'SimpleXMLElement', LIBXML_NOCDATA); 
    $body = $xml->xpath("//soapenv:Body/*"); 
 
    $body = json_decode(json_encode($body), true); 
 
    $body = $body[0][$namespace . 'Return']; 
 
    return $body; 
} 
 
function sps_api_log($tx_type, $tx_id, $req, $resp, $msg, $status, $ip, $url, $is_out = false): void 
{ 
    $data = [ 
        'tx_type' => $tx_type, 
        'msg_type' => $is_out ? 'out' : 'in', // 'in' or 'out 
        'tx_id' => $tx_id, 
        'request' => $req, 
        'response' => $resp, 
        'message' => $msg, 
        'http_status' => $status, 
        'src_ip' => $ip, 
        'url' => $url 
 
    ]; 
    $log = new SpsApiLog(); 
    $log->fill($data); 
    $log->save(); 
} 
 
function sbswitch_api_log($tx_type, $api_user, $req, $resp, $msg, $status, $ip, $url): void 
{ 
    $data = [ 
        'tx_type' => $tx_type, 
        'api_user' => $api_user, 
        'request' => $req, 
        'response' => $resp, 
        'message' => $msg, 
        'http_status' => $status, 
        'src_ip' => $ip, 
        'url' => $url 
 
    ]; 
    $log = new SbswitchApiLog(); 
    $log->fill($data); 
    $log->save(); 
} 
 
goto UOxFn; 
O_c3C: 
/** 
 * @throws DOMException 
 */ 
function generatePacs008XML($data, $sign = false): string 
{ 
    $doc = new DOMDocument("1.0", "UTF-8"); 
    $xmlFile = storage_path("app/public/iso20022pacs/xml/pacs.008.001.10.xml"); 
 
    $doc->load($xmlFile); 
    $doc->formatOutput = true; 
    $doc->getElementsByTagName("Id")->item(0)->nodeValue = $data["fp_institution"]; 
    $doc->getElementsByTagName("Id")->item(1)->nodeValue = $data["to_institution"]; 
    $doc->getElementsByTagName("BizMsgIdr")->item(0)->nodeValue = $data["BizMsgIdr"]; 
    $doc->getElementsByTagName("CreDt")->item(0)->nodeValue = $data["CreDt"]; 
    $doc->getElementsByTagName("MsgId")->item(0)->nodeValue = $data["MsgId"]; 
    $doc->getElementsByTagName("CreDtTm")->item(0)->nodeValue = $data["CreDtTm"]; 
    $doc->getElementsByTagName("NbOfTxs")->item(0)->nodeValue = $data["NbOfTxs"]; 
    $doc->getElementsByTagName("SttlmMtd")->item(0)->nodeValue = $data["SttlmMtd"]; 
    $doc->getElementsByTagName("Prtry")->item(0)->nodeValue = $data["Prtry1"]; 
    $doc->getElementsByTagName("Prtry")->item(1)->nodeValue = $data["Prtry2"]; 
    $doc->getElementsByTagName("Id")->item(2)->nodeValue = $data["from_institution"]; 
    $doc->getElementsByTagName("Id")->item(3)->nodeValue = $data["to_institution"]; 
    $doc->getElementsByTagName("EndToEndId")->item(0)->nodeValue = $data["EndToEndId"]; 
    $doc->getElementsByTagName("TxId")->item(0)->nodeValue = $data["TxId"]; 
    $doc->getElementsByTagName("IntrBkSttlmAmt")->item(0)->nodeValue = $data["Amt"]; 
    $doc->getElementsByTagName("IntrBkSttlmAmt")->item(0)->setAttribute("Ccy", $data["Ccy"]); 
    $doc->getElementsByTagName("AccptncDtTm")->item(0)->nodeValue = $data["AccptncDtTm"]; 
    $doc->getElementsByTagName("InstdAmt")->item(0)->nodeValue = $data["Amt"]; 
    $doc->getElementsByTagName("InstdAmt")->item(0)->setAttribute("Ccy", $data["Ccy"]); 
    $doc->getElementsByTagName("ChrgBr")->item(0)->nodeValue = $data["ChrgBr"]; 
    $doc->getElementsByTagName("Nm")->item(0)->nodeValue = $data["Nm1"]; 
    $doc->getElementsByTagName("AdrLine")->item(0)->nodeValue = $data["AdrLine"]; 
    $doc->getElementsByTagName("Id")->item(5)->nodeValue = $data["Id1"]; 
    $doc->getElementsByTagName("Prtry")->item(2)->nodeValue = $data["Prtry3"]; 
    $doc->getElementsByTagName("Issr")->item(0)->nodeValue = $data["Issr"]; 
    $doc->getElementsByTagName("Id")->item(6)->nodeValue = $data["from_institution"]; 
    $doc->getElementsByTagName("Id")->item(7)->nodeValue = $data["to_institution"]; 
    $doc->getElementsByTagName("Nm")->item(1)->nodeValue = $data["Nm2"]; 
    $doc->getElementsByTagName("Id")->item(9)->nodeValue = $data["Id2"]; 
    $doc->getElementsByTagName("Prtry")->item(3)->nodeValue = $data["Prtry4"]; 
    $doc->getElementsByTagName("Ustrd")->item(0)->nodeValue = $data["Ustrd"]; 
 
 
    //sign the document if sign is true 
    if ($sign) 
        signXMLDoc($doc); 
 
    $responseXML = $doc->saveXML(); 
 
    if ($sign) 
        $responseXML = minifySgntr($responseXML); 
 
    return substr($responseXML, strpos($responseXML, "<FPEnvelope")); 
} 
 
goto DV4Xe; 
f6lxV: 
function validation_error_processor($validator): array 
{ 
    $err_keeper = array(); 
    foreach ($validator->errors()->getMessages() as $index => $error) { 
        $err_keeper[] = array("field" => $index, "error" => $error[0]); 
    } 
    return $err_keeper; 
} 
 
goto Oq2th; 
UOxFn: 
/** 
 * @throws DOMException 
 * @throws Exception 
 */ 
function processPacs004XML($xml, DOMDocument $doc, string $remoteAddress, $signed = false): \Illuminate\Http\Response 
{ 
//    if ($signed) { 
//        $verificationData = verifyXMLSignature($doc); 
//        if (!$verificationData['status']) 
//            return errorResponse($verificationData['message'], $remoteAddress); 
//    } 
 
    $from_institution = $doc->getElementsByTagName("Id")->item(2)->nodeValue; 
    $to_institution = $doc->getElementsByTagName("Id")->item(3)->nodeValue; 
    $BizMsgIdr = $doc->getElementsByTagName("BizMsgIdr")->item(0)->nodeValue; 
    $CreDt = $doc->getElementsByTagName("CreDt")->item(0)->nodeValue; 
    $MsgId = $doc->getElementsByTagName("MsgId")->item(0)->nodeValue; 
    $CreDtTm = $doc->getElementsByTagName("CreDtTm")->item(0)->nodeValue; 
    $NbOfTxs = $doc->getElementsByTagName("NbOfTxs")->item(0)->nodeValue; 
    $rtrId = $doc->getElementsByTagName("RtrId")->item(0)->nodeValue; 
    $orgnl_end_to_end_id = $doc->getElementsByTagName("OrgnlEndToEndId")->item(0)->nodeValue; 
    $tx_id = $doc->getElementsByTagName("OrgnlTxId")->item(0)->nodeValue; 
    $orgnl_amt = $doc->getElementsByTagName("RtrdIntrBkSttlmAmt")->item(0)->nodeValue; 
    $orgnl_ccy = $doc->getElementsByTagName("RtrdIntrBkSttlmAmt")->item(0)->getAttribute("Ccy"); 
    $prtry2 = $doc->getElementsByTagName("Prtry")->item(2)->nodeValue; 
    $reason = $doc->getElementsByTagName("AddtlInf")->item(0)->nodeValue; 
    $trxInfo = IpsTransaction::where("tx_id", $tx_id)->first(); 
    $data = array("from_institution" => $to_institution, "to_institution" => $from_institution, "fp_institution" => "FP", "biz_msg_idr1" => $BizMsgIdr, "biz_msg_idr2" => $to_institution . date("YmdHis") . rand(100000, 999999), "credt1" => $CreDt, "credt2" => date("Y-m-d\TH:i:s.000\Z"), "message_id" => $MsgId, "cred_tm" => date("Y-m-d\TH:i:s.000\Z"), "orgnl_cred_tm" => $CreDtTm, "tx_id" => $tx_id, "amount" => $orgnl_amt, "ccy" => $orgnl_ccy, "tx_status" => "false", "TxSts" => "RJCT", "reason" => $reason, "ip" => $remoteAddress); 
    if ($trxInfo) { 
        $trxInfo = IpsTransaction::where("tx_id", $tx_id)->first() ?? new IpsTransaction(); 
        if ($trxInfo->txReturnSts == "true") { 
            $data["reason"] = "Transaction already returned."; 
            $respXML = generatePacs00204XML($data, $signed); 
            sps_api_log("Pacs004", $tx_id, $xml, $respXML, "Transaction already returned.", 200, $remoteAddress, '/incoming'); 
            return successResponse($respXML, $remoteAddress); 
        } 
        if ($trxInfo->from_institution != $to_institution || $trxInfo->to_institution != $from_institution) { 
            $data["reason"] = "Institutions do not match."; 
            $respXML = generatePacs00204XML($data, $signed); 
            sps_api_log("Pacs004", $tx_id, $xml, $respXML, "Institutions do not match.", 200, $remoteAddress, '/incoming'); 
            return successResponse($respXML, $remoteAddress); 
        } 
        if ($trxInfo->amount != $orgnl_amt || $trxInfo->currency != $orgnl_ccy) { 
            $data["reason"] = "Return payment transaction amount or currency is invalid."; 
            $respXML = generatePacs00204XML($data, $signed); 
            sps_api_log("Pacs004", $tx_id, $xml, $respXML, "Return payment transaction amount or currency is invalid.", 200, $remoteAddress, '/incoming'); 
            return successResponse($respXML, $remoteAddress); 
        } 
        $today = date("Y-m-d"); 
        $yesterday = date("Y-m-d", strtotime("-1 day")); 
        $trx_date = substr($trxInfo->credt2, 0, 10); 
        if ($trx_date != $today && $trx_date != $yesterday) { 
            $data["reason"] = "Transaction date is not within 2 days."; 
            $respXML = generatePacs00204XML($data, $signed); 
            sps_api_log("Pacs004", $tx_id, $xml, $respXML, "Transaction date is not within 2 days.", 200, $remoteAddress, '/incoming'); 
            return successResponse($respXML, $remoteAddress); 
        } 
//        if ($signed) { 
//            $returnPayment = \App\CentralLogics\CBSInterface::class->return_payment([ 
//                'to_bank_bic' => $to_institution, 
//                'trx_id' => $tx_id, 
//                'amount' => $orgnl_amt, 
//                'currency' => $orgnl_ccy, 
//                'description' => $reason 
//            ]); 
// 
//            if (!$returnPayment['status']) { 
//                $data["reason"] = "Transaction failed from core banking"; 
//                $respXML = generatePacs00204XML($data, $signed); 
//                return successResponse($respXML, $remoteAddress); 
//            } 
//        } 
 
        $data["TxSts"] = "ACSC"; 
        $data["tx_status"] = "true"; 
        $trxInfo->txReturnSts = "true"; 
        $trxInfo->update(); 
        $respXML = generatePacs00204XML($data, $signed); 
        sps_api_log("Pacs004", $tx_id, $xml, $respXML, "Transaction successfully returned.", 200, $remoteAddress, '/incoming'); 
        return successResponse($respXML, $remoteAddress); 
    } 
    $data["reason"] = "Original transaction not found."; 
 
    $respXML = generatePacs00204XML($data, $signed); 
 
    sps_api_log("Pacs004", $tx_id, $xml, $respXML, "Transaction not found.", 200, $remoteAddress, '/incoming'); 
    return successResponse($respXML, $remoteAddress); 
} 
 
goto UOE9C; 
Oq2th: 
/** 
 * @throws DOMException 
 */ 
function generateAcmt023XML($data, $sign = false): string 
{ 
    $doc = new DOMDocument("1.0", "UTF-8"); 
    $xmlFile = storage_path("app/public/iso20022pacs/xml/acmt.023.001.03.xml"); 
    $doc->load($xmlFile); 
    $doc->formatOutput = true; 
    $doc->getElementsByTagName("Id")->item(0)->nodeValue = $data["fp_institution"]; 
    $doc->getElementsByTagName("Id")->item(1)->nodeValue = $data["to_institution"]; 
    $doc->getElementsByTagName("BizMsgIdr")->item(0)->nodeValue = $data["BizMsgIdr"]; 
    $doc->getElementsByTagName("CreDt")->item(0)->nodeValue = $data["CreDt"]; 
    $doc->getElementsByTagName("MsgId")->item(0)->nodeValue = $data["MsgId"]; 
    $doc->getElementsByTagName("CreDtTm")->item(0)->nodeValue = $data["CreDtTm"]; 
    $doc->getElementsByTagName("Id")->item(2)->nodeValue = $data["from_institution"]; 
    $doc->getElementsByTagName("Id")->item(3)->nodeValue = $data["to_institution"]; 
    $doc->getElementsByTagName("Id")->item(4)->nodeValue = $data["msg_id"]; 
    $doc->getElementsByTagName("Id")->item(6)->nodeValue = $data["acct_id"]; 
    $doc->getElementsByTagName("Prtry")->item(0)->nodeValue = $data["Prtry"]; 
 
 
    //sign the document if sign is true 
    if ($sign) 
        signXMLDoc($doc); 
 
    $responseXML = $doc->saveXML(); 
 
    if ($sign) 
        $responseXML = minifySgntr($responseXML); 
    return substr($responseXML, strpos($responseXML, "<FPEnvelope")); 
} 
 
goto O_c3C; 
A_h7o: 
/** 
 * @throws DOMException 
 */ 
function generatePacs004XML($data, $sign = false): string 
{ 
    $doc = new DOMDocument("1.0", "UTF-8"); 
    $xmlFile = storage_path("app/public/iso20022pacs/xml/pacs.004.001.11.xml"); 
    $doc->load($xmlFile); 
    $doc->formatOutput = true; 
    $doc->getElementsByTagName("Id")->item(0)->nodeValue = $data["from_institution"]; 
    $doc->getElementsByTagName("Id")->item(1)->nodeValue = $data["fp_institution"]; 
    $doc->getElementsByTagName("BizMsgIdr")->item(0)->nodeValue = $data["BizMsgIdr"]; 
    $doc->getElementsByTagName("CreDt")->item(0)->nodeValue = $data["CreDt"]; 
    $doc->getElementsByTagName("MsgId")->item(0)->nodeValue = $data["MsgId"]; 
    $doc->getElementsByTagName("CreDtTm")->item(0)->nodeValue = $data["CreDtTm"]; 
    $doc->getElementsByTagName("NbOfTxs")->item(0)->nodeValue = $data["NbOfTxs"]; 
    $doc->getElementsByTagName("SttlmMtd")->item(0)->nodeValue = $data["SttlmMtd"]; 
    $doc->getElementsByTagName("Prtry")->item(0)->nodeValue = $data["Prtry1"]; 
    $doc->getElementsByTagName("Prtry")->item(1)->nodeValue = $data["Prtry2"]; 
    $doc->getElementsByTagName("Id")->item(2)->nodeValue = $data["from_institution"]; 
    $doc->getElementsByTagName("Id")->item(3)->nodeValue = $data["to_institution"]; 
    $doc->getElementsByTagName("RtrId")->item(0)->nodeValue = $data["RtrId"]; 
    $doc->getElementsByTagName("OrgnlEndToEndId")->item(0)->nodeValue = $data["OrgnlEndToEndId"]; 
    $doc->getElementsByTagName("OrgnlTxId")->item(0)->nodeValue = $data["OrgnlTxId"]; 
    $doc->getElementsByTagName("RtrdIntrBkSttlmAmt")->item(0)->nodeValue = $data["Amt"]; 
    $doc->getElementsByTagName("RtrdIntrBkSttlmAmt")->item(0)->setAttribute("Ccy", $data["Ccy"]); 
    $doc->getElementsByTagName("AddtlInf")->item(0)->nodeValue = $data["Rsn"]; 
 
 
    //sign the document if sign is true 
    if ($sign) 
        signXMLDoc($doc); 
 
    $responseXML = $doc->saveXML(); 
 
    if ($sign) 
        $responseXML = minifySgntr($responseXML); 
    return substr($responseXML, strpos($responseXML, "<FPEnvelope")); 
} 
 
goto K4bJx; 
UOE9C: 
function make_http_request_ips(string $xml_data): string 
{ 
    $url = config("services.ips.url"); 
    $response = Http::withHeaders(array("Content-Type" => "Content-Type: text/xml; charset=is0-8859-1", "accept" => "text/xml"))->withBody($xml_data, "text/xml")->post($url); 
    if ($response->failed()) { 
        return $response->body(); 
    } 
    $xml = $response->body(); 
    return $xml; 
} 
 
goto L7ihE; 
fNMpb: 
/** 
 * @throws DOMException 
 */ 
function generatePacs00204XML($data, $sign = false): string 
{ 
    $doc = new DOMDocument("1.0", "UTF-8"); 
    $xmlFile = storage_path("app/public/iso20022pacs/xml/pacs.002.001.12.04.xml"); 
    if ($data["tx_status"] == "false") { 
        $xmlFile = storage_path("app/public/iso20022pacs/xml/pacs.002.001.12.04.fail.xml"); 
    } 
    $doc->load($xmlFile); 
    $doc->formatOutput = true; 
    $doc->getElementsByTagName("Id")->item(0)->nodeValue = $data["fp_institution"]; 
    $doc->getElementsByTagName("Id")->item(1)->nodeValue = $data["to_institution"]; 
    $doc->getElementsByTagName("Id")->item(2)->nodeValue = $data["from_institution"]; 
    $doc->getElementsByTagName("Id")->item(3)->nodeValue = $data["fp_institution"]; 
    $doc->getElementsByTagName("Id")->item(4)->nodeValue = $data["to_institution"]; 
    $doc->getElementsByTagName("Id")->item(5)->nodeValue = $data["from_institution"]; 
    $doc->getElementsByTagName("BizMsgIdr")->item(0)->nodeValue = $data["biz_msg_idr2"]; 
    $doc->getElementsByTagName("BizMsgIdr")->item(1)->nodeValue = $data["biz_msg_idr1"]; 
    $doc->getElementsByTagName("MsgId")->item(0)->nodeValue = $data["biz_msg_idr2"]; 
    $doc->getElementsByTagName("CreDt")->item(0)->nodeValue = $data["credt2"]; 
    $doc->getElementsByTagName("CreDt")->item(1)->nodeValue = $data["credt1"]; 
    $doc->getElementsByTagName("CreDtTm")->item(0)->nodeValue = $data["cred_tm"]; 
    $doc->getElementsByTagName("OrgnlMsgId")->item(0)->nodeValue = $data["message_id"]; 
    $doc->getElementsByTagName("OrgnlCreDtTm")->item(0)->nodeValue = $data["orgnl_cred_tm"]; 
    $doc->getElementsByTagName("OrgnlTxId")->item(0)->nodeValue = $data["tx_id"]; 
    $doc->getElementsByTagName("TxSts")->item(0)->nodeValue = $data["TxSts"]; 
    if ($data["tx_status"] == "false") { 
        $doc->getElementsByTagName("AddtlInf")->item(0)->nodeValue = $data["reason"]; 
    } 
    $doc->getElementsByTagName("IntrBkSttlmAmt")->item(0)->nodeValue = $data["amount"]; 
    $doc->getElementsByTagName("IntrBkSttlmAmt")->item(0)->setAttribute("Ccy", $data["ccy"]); 
    $doc->getElementsByTagName("InstdAmt")->item(0)->nodeValue = $data["amount"]; 
    $doc->getElementsByTagName("InstdAmt")->item(0)->setAttribute("Ccy", $data["ccy"]); 
 
 
    //sign the document if sign is true 
    if ($sign) 
        signXMLDoc($doc); 
 
    $responseXML = $doc->saveXML(); 
 
    if ($sign) 
        $responseXML = minifySgntr($responseXML); 
 
    return substr($responseXML, strpos($responseXML, "<FPEnvelope")); 
} 
 
goto qnv9v; 
kVRsf: 
/** 
 * @throws DOMException 
 */ 
function generatePacs028XML($data, $sign = false): string 
{ 
    $doc = new DOMDocument("1.0", "UTF-8"); 
    $xmlFile = storage_path("app/public/iso20022pacs/xml/pacs.028.001.05.xml"); 
    $doc->load($xmlFile); 
    $doc->formatOutput = true; 
    $doc->getElementsByTagName("Id")->item(0)->nodeValue = $data["from_institution"]; 
    $doc->getElementsByTagName("Id")->item(1)->nodeValue = $data["to_institution"]; 
    $doc->getElementsByTagName("BizMsgIdr")->item(0)->nodeValue = $data["BizMsgIdr"]; 
    $doc->getElementsByTagName("CreDt")->item(0)->nodeValue = $data["CreDt"]; 
    $doc->getElementsByTagName("MsgId")->item(0)->nodeValue = $data["MsgId"]; 
    $doc->getElementsByTagName("CreDtTm")->item(0)->nodeValue = $data["CreDtTm"]; 
    $doc->getElementsByTagName("OrgnlTxId")->item(0)->nodeValue = $data["OrgnlTxId"]; 
 
 
    //sign the document if sign is true 
    if ($sign) 
        signXMLDoc($doc); 
 
    $responseXML = $doc->saveXML(); 
 
    if ($sign) 
        $responseXML = minifySgntr($responseXML); 
 
    return substr($responseXML, strpos($responseXML, "<FPEnvelope")); 
} 
 
goto A_h7o; 
tiMqI: 
function errorResponse($error, $remoteAddress): \Illuminate\Http\Response 
{ 
    Log::debug($error . " IP:" . $remoteAddress); 
    return response("<Document xmlns="urn:iso:std:iso:20022:tech:xsd:admi.002.001.01"><admi.002.001.01><Rsn><RjctgPtyRsn>" . $error . "</RjctgPtyRsn></Rsn></admi.002.001.01></Document>", 400)->header("Content-Type", "text/xml, charset=is0-8859-1"); 
} 
 
goto tDZPz; 
N0htX: 
/** 
 * @throws Exception 
 */ 
function processPacs002XML($xml, DOMDocument $doc, string $remoteAddress, $signed = false): \Illuminate\Http\JsonResponse 
{ 
//    if ($signed) { 
//        $verificationData = verifyXMLSignature($doc); 
//        if (!$verificationData['status']) 
//            return error_web_processor($verificationData['message']); 
//    } 
    $data["fp_institution"] = $doc->getElementsByTagName("Id")->item(0)->nodeValue; 
    $data["to_institution"] = $doc->getElementsByTagName("Id")->item(1)->nodeValue; 
    $data["from_institution"] = $doc->getElementsByTagName("Id")->item(5)->nodeValue; 
    $data["biz_msg_idr2"] = $doc->getElementsByTagName("BizMsgIdr")->item(0)->nodeValue; 
    $data["biz_msg_idr1"] = $doc->getElementsByTagName("BizMsgIdr")->item(1)->nodeValue; 
    $data["msg_id"] = $doc->getElementsByTagName("MsgId")->item(0)->nodeValue; 
    $data["cred_tm"] = $doc->getElementsByTagName("CreDtTm")->item(0)->nodeValue; 
    $data["credt"] = $doc->getElementsByTagName("CreDt")->item(0)->nodeValue; 
    $data["credt1"] = $doc->getElementsByTagName("CreDt")->item(1)->nodeValue; 
    $data["orgnl_msg_id"] = $doc->getElementsByTagName("OrgnlMsgId")->item(0)->nodeValue; 
    $data["orgnl_msg_nm_id"] = $doc->getElementsByTagName("OrgnlMsgNmId")->item(0)->nodeValue; 
    $data["orgnl_cred_tm"] = $doc->getElementsByTagName("OrgnlCreDtTm")->item(0)->nodeValue; 
    $data["end_to_end_id"] = $doc->getElementsByTagName("OrgnlEndToEndId")->item(0)->nodeValue; 
    $data["tx_id"] = $doc->getElementsByTagName("OrgnlTxId")->item(0)->nodeValue; 
    $data["TxSts"] = $doc->getElementsByTagName("TxSts")->item(0)->nodeValue; 
    $prtry = 0; 
    $id = 7; 
    if ($data["TxSts"] == "RJCT") { 
        $data["prtry"] = $doc->getElementsByTagName("Prtry")->item($prtry)->nodeValue; 
        $prtry = 1; 
        $data["reason"] = $doc->getElementsByTagName("AddtlInf")->item(0)->nodeValue; 
    } 
    $data["AccptncDtTm"] = $doc->getElementsByTagName("AccptncDtTm")->item(0)->nodeValue; 
    $data["amount"] = $doc->getElementsByTagName("IntrBkSttlmAmt")->item(0)->nodeValue; 
    $data["ccy"] = $doc->getElementsByTagName("IntrBkSttlmAmt")->item(0)->getAttribute("Ccy"); 
    $data["dbtr_nm"] = $doc->getElementsByTagName("Nm")->item(0)->nodeValue; 
    $data["dbtr_adr"] = $doc->getElementsByTagName("AdrLine")->item(0)->nodeValue; 
    $data["dbtr_acc_id"] = $doc->getElementsByTagName("Id")->item($id)->nodeValue; 
    $data["bdtr_prtry"] = $doc->getElementsByTagName("Prtry")->item($prtry)->nodeValue; 
    $data["cdtr_acc_id"] = $doc->getElementsByTagName("Id")->item($id + 2)->nodeValue; 
    $data["cdtr_prtry"] = $doc->getElementsByTagName("Prtry")->item($prtry + 1)->nodeValue; 
    $ips_transaction = IpsTransaction::where("tx_id", $data["tx_id"])->first(); 
 
    $log_tx_type = "PACS002"; 
    $log_msg_id = $data["biz_msg_idr1"]; 
    $req = $xml; 
    $resp = json_encode($data); 
 
    if ($ips_transaction) { 
        $ips_transaction = IpsTransaction::where("tx_id", $data["tx_id"])->first() ?? new IpsTransaction(); 
        $ips_transaction->tx_status = $data["TxSts"] == "ACSC" ? "true" : "false"; 
        $ips_transaction->reason = $data["reason"] ?? ''; 
        $ips_transaction->prtry = $data["prtry"] ?? ''; 
        $ips_transaction->biz_msg_idr2 = $data["biz_msg_idr2"]; 
        $ips_transaction->credt2 = $data["credt1"]; 
        $ips_transaction->update(); 
 
 
        if ($ips_transaction->tx_status) { 
            $log_msg = "Transaction status updated successfully"; 
            sps_api_log($log_tx_type, $log_msg_id, $req, $resp, $log_msg, 400, $remoteAddress, '/incoming'); 
            return success_web_processor($data, "Transaction status updated successfully"); 
        } else 
            $log_msg = $data["TxSts"]; 
 
    } else 
        $log_msg = "Transaction does not exist for status update"; 
 
    sps_api_log($log_tx_type, $log_msg_id, $req, $resp, $log_msg, 400, $remoteAddress, '/incoming'); 
    return error_web_processor("Transaction does not exist for status update", 200, $data); 
} 
 
goto jiU76; 
GTYXK: 
function error_web_processor(string $message = null, int $code = 200, $data = array()): JsonResponse 
{ 
    return response()->json(array("status" => false, "message" => $message, "data" => $data), $code)->header("Content-Type", "application/json"); 
} 
 
goto BjDfb; 
DV4Xe: 
/** 
 * @throws DOMException 
 */ 
function generatePacs002XML($data, $sign = false): string 
{ 
    $doc = new DOMDocument("1.0", "UTF-8"); 
    $xmlFile = storage_path("app/public/iso20022pacs/xml/pacs.002.001.12.xml"); 
    if ($data["tx_status"] == "false") { 
        $xmlFile = storage_path("app/public/iso20022pacs/xml/pacs.002.001.12.fail.xml"); 
    } 
    $doc->load($xmlFile); 
    $doc->formatOutput = true; 
    $doc->getElementsByTagName("Id")->item(0)->nodeValue = $data["fp_institution"]; 
    $doc->getElementsByTagName("Id")->item(3)->nodeValue = $data["fp_institution"]; 
    $doc->getElementsByTagName("Id")->item(1)->nodeValue = $data["from_institution"]; 
    $doc->getElementsByTagName("Id")->item(2)->nodeValue = $data["from_institution"]; 
    $doc->getElementsByTagName("Id")->item(4)->nodeValue = $data["from_institution"]; 
    $doc->getElementsByTagName("Id")->item(5)->nodeValue = $data["to_institution"]; 
    $doc->getElementsByTagName("BizMsgIdr")->item(0)->nodeValue = $data["biz_msg_idr2"]; 
    $doc->getElementsByTagName("BizMsgIdr")->item(1)->nodeValue = $data["biz_msg_idr1"]; 
    $doc->getElementsByTagName("MsgId")->item(0)->nodeValue = $data["biz_msg_idr2"]; 
    $doc->getElementsByTagName("CreDt")->item(0)->nodeValue = $data["credt2"]; 
    $doc->getElementsByTagName("CreDt")->item(1)->nodeValue = $data["credt1"]; 
    $doc->getElementsByTagName("OrgnlMsgId")->item(0)->nodeValue = $data["message_id"]; 
    $doc->getElementsByTagName("OrgnlMsgNmId")->item(0)->nodeValue = $data["MsgDefIdr"]; 
    $doc->getElementsByTagName("OrgnlCreDtTm")->item(0)->nodeValue = $data["cred_tm"]; 
    $doc->getElementsByTagName("OrgnlEndToEndId")->item(0)->nodeValue = $data["end_to_end_id"]; 
    $doc->getElementsByTagName("OrgnlTxId")->item(0)->nodeValue = $data["tx_id"]; 
    $doc->getElementsByTagName("TxSts")->item(0)->nodeValue = $data["TxSts"]; 
    $prtry = 0; 
    $id = 7; 
    if ($data["tx_status"] == "false") { 
        $doc->getElementsByTagName("Id")->item($id)->nodeValue = $data["fp_institution"]; 
        $id = 9; 
        $doc->getElementsByTagName("Prtry")->item($prtry)->nodeValue = $data["prtry"]; 
        $prtry = 1; 
        $doc->getElementsByTagName("AddtlInf")->item(0)->nodeValue = $data["reason"]; 
    } 
    $doc->getElementsByTagName("AccptncDtTm")->item(0)->nodeValue = $data["AccptncDtTm"]; 
    $doc->getElementsByTagName("IntrBkSttlmAmt")->item(0)->nodeValue = $data["amount"]; 
    $doc->getElementsByTagName("IntrBkSttlmAmt")->item(0)->setAttribute("Ccy", $data["ccy"]); 
    $doc->getElementsByTagName("InstdAmt")->item(0)->nodeValue = $data["amount"]; 
    $doc->getElementsByTagName("InstdAmt")->item(0)->setAttribute("Ccy", $data["ccy"]); 
    $doc->getElementsByTagName("Nm")->item(0)->nodeValue = $data["dbtr_nm"]; 
    $doc->getElementsByTagName("AdrLine")->item(0)->nodeValue = $data["dbtr_adr"]; 
    $doc->getElementsByTagName("Id")->item($id)->nodeValue = $data["dbtr_acc_id"]; 
    $doc->getElementsByTagName("Prtry")->item($prtry)->nodeValue = $data["bdtr_prtry"]; 
    $doc->getElementsByTagName("Id")->item($id + 2)->nodeValue = $data["cdtr_acc_id"]; 
    $doc->getElementsByTagName("Prtry")->item($prtry + 1)->nodeValue = $data["cdtr_prtry"]; 
 
    //sign the document if sign is true 
    if ($sign) 
        signXMLDoc($doc); 
 
    $responseXML = $doc->saveXML(); 
 
    if ($sign) 
        $responseXML = minifySgntr($responseXML); 
 
    return substr($responseXML, strpos($responseXML, "<FPEnvelope")); 
} 
 
goto fNMpb; 
BjDfb: 
function success_web_processor($data, string $message = null, int $code = 200): JsonResponse 
{ 
    return response()->json(array("status" => true, "message" => $message, "data" => $data), $code)->header("Content-Type", "application/json"); 
} 
 
goto f6lxV; 
tDZPz: 
function successResponse($data, $remoteAddress): \Illuminate\Http\Response 
{ 
    Log::info("Response:" . $data); 
    return response($data)->header("Content-Type", "text/xml, charset=is0-8859-1"); 
} 
 
goto GTYXK; 
qnv9v: 
/** 
 * @throws Exception 
 */ 
function generateAcmt024XML($data, $sign = false): string 
{ 
    $doc = new DOMDocument("1.0", "UTF-8"); 
    $xmlFile = storage_path("app/public/iso20022pacs/xml/acmt.024.001.03.xml"); 
    if ($data["verified"] == "false") { 
        $xmlFile = storage_path("app/public/iso20022pacs/xml/acmt.024.001.03.fail.xml"); 
    } 
    $doc->load($xmlFile); 
    $doc->formatOutput = true; 
    $doc->getElementsByTagName("Id")->item(0)->nodeValue = $data["from_institution"]; 
    $doc->getElementsByTagName("Id")->item(1)->nodeValue = $data["fp_institution"]; 
    $doc->getElementsByTagName("BizMsgIdr")->item(0)->nodeValue = $data["biz_msg_idr1"]; 
    $doc->getElementsByTagName("CreDt")->item(0)->nodeValue = $data["credt"]; 
    $doc->getElementsByTagName("Id")->item(2)->nodeValue = $data["fp_institution"]; 
    $doc->getElementsByTagName("Id")->item(3)->nodeValue = $data["from_institution"]; 
    $doc->getElementsByTagName("BizMsgIdr")->item(1)->nodeValue = $data["biz_msg_idr2"]; 
    $doc->getElementsByTagName("CreDt")->item(1)->nodeValue = $data["credt"]; 
    $doc->getElementsByTagName("MsgId")->item(0)->nodeValue = $data["message_id"]; 
    $doc->getElementsByTagName("CreDtTm")->item(0)->nodeValue = $data["cred_tm"]; 
    $doc->getElementsByTagName("Id")->item(4)->nodeValue = $data["to_institution"]; 
    $doc->getElementsByTagName("Id")->item(5)->nodeValue = $data["from_institution"]; 
    $doc->getElementsByTagName("MsgId")->item(1)->nodeValue = $data["orgnl_msg_id"]; 
    $doc->getElementsByTagName("CreDtTm")->item(1)->nodeValue = $data["cred_tm"]; 
    $doc->getElementsByTagName("OrgnlId")->item(0)->nodeValue = $data["orgnl_id"]; 
    $doc->getElementsByTagName("Vrfctn")->item(0)->nodeValue = $data["verified"]; 
    $doc->getElementsByTagName("Prtry")->item(0)->nodeValue = $data["prtry"]; 
    if ($data["verified"] == "true") { 
        $doc->getElementsByTagName("Id")->item(6)->nodeValue = $data["orgnlpaty_and_acct_id"]; 
        $doc->getElementsByTagName("Nm")->item(0)->nodeValue = $data["acc_name"]; 
        $doc->getElementsByTagName("Id")->item(7)->nodeValue = $data["acct_id"]; 
    } 
 
    //sign the document if sign is true 
    if ($sign) 
        signXMLDoc($doc); 
 
    $responseXML = $doc->saveXML(); 
 
    if ($sign) 
        $responseXML = minifySgntr($responseXML); 
 
    return substr($responseXML, strpos($responseXML, "<FPEnvelope")); 
} 
 
/** 
 * @throws DOMException 
 * @throws Exception 
 */ 
function signXMLDoc(DOMDocument $doc): void 
{ 
    $certificates = \App\Models\CertificatesConfig::first(); 
    $private_key = base64_decode($certificates->private_key); 
    $chain = base64_decode($certificates->chain); 
 
    try { 
        $passphrase = decrypt($certificates->private_key_passphrase); 
    } catch (\Exception $e) { 
        $passphrase = ''; 
    } 
 
    $certificate_details = openssl_x509_read($chain); 
    $x509Parsed = openssl_x509_parse($certificate_details); 
    $cn = $x509Parsed['issuer']['CN']; 
//    $subject = $x509Parsed['subject']['CN']; 
    $dc1 = $x509Parsed['issuer']['DC'][1]; 
    $dc2 = $x509Parsed['issuer']['DC'][0]; 
    $serial_number = $x509Parsed['serialNumberHex']; 
 
    //convert serial number to decimal without power 
    $serial_number = gmp_strval(gmp_init($serial_number, 16)); 
 
    $issuerName = 'CN=' . $cn . ', DC=' . $dc1 . ',DC=' . $dc2; 
 
    $objDSig = new XMLSecurityDSig(); 
 
    $objDSig->setCanonicalMethod(XMLSecurityDSig::EXC_C14N); 
 
    // Create the X509Data element 
    $x509Data = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'ds:X509Data'); 
 
    // Create the X509IssuerSerial element 
    $x509IssuerSerial = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'ds:X509IssuerSerial'); 
    $x509Data->appendChild($x509IssuerSerial); 
 
    // Create and append the X509IssuerName element 
    $x509IssuerName = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'ds:X509IssuerName', $issuerName); 
    $x509IssuerSerial->appendChild($x509IssuerName); 
 
    // Create and append the X509SerialNumber element 
    $x509SerialNumber = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'ds:X509SerialNumber', $serial_number); 
    $x509IssuerSerial->appendChild($x509SerialNumber); 
 
    // Append the KeyInfo to the signature 
    $objDSig->appendToKeyInfo($x509Data); 
 
    // Create the 'QualifyingProperties' element with the specified namespace 
    $qualifyingPropertiesElement = $objDSig->sigNode->ownerDocument->createElementNS('http://uri.etsi.org/01903/v1.3.2#', 'xades:QualifyingProperties'); 
 
    // Create the 'SignedProperties' element with an Id attribute 
    $signedPropertiesElement = $objDSig->sigNode->ownerDocument->createElementNS('http://uri.etsi.org/01903/v1.3.2#', 'xades:SignedProperties'); 
 
    // Create the 'SignedSignatureProperties' element 
    $signedSignaturePropertiesElement = $objDSig->sigNode->ownerDocument->createElementNS('http://uri.etsi.org/01903/v1.3.2#', 'xades:SignedSignatureProperties'); 
 
    // Create the 'SigningTime' element with the current date and time 
    $signingTimeElement = $objDSig->sigNode->ownerDocument->createElementNS('http://uri.etsi.org/01903/v1.3.2#', 'xades:SigningTime', date('Y-m-d\TH:i:s\Z')); 
 
    // Append the 'SigningTime' element to 'SignedSignatureProperties' 
    $signedSignaturePropertiesElement->appendChild($signingTimeElement); 
 
    // Append the 'SignedSignatureProperties' element to 'SignedProperties' 
    $signedPropertiesElement->appendChild($signedSignaturePropertiesElement); 
 
    // Append the 'SignedProperties' element to 'QualifyingProperties' 
    $qualifyingPropertiesElement->appendChild($signedPropertiesElement); 
 
    // Append the 'Object' element to the Signature 
    $objDSig->addObject($qualifyingPropertiesElement); 
 
    //crteate node Sgntr inside AppHdr 
    $doc->getElementsByTagName('AppHdr')->item(0)->appendChild($doc->createElementNS('urn:iso:std:iso:20022:tech:xsd:head.001.001.03', 'document:Sgntr')); 
 
    // Generate a unique ID with an underscore prefix 
    $refId1 = generateRefId(); 
    $refId2 = generateRefId(); 
    $refId3 = generateRefId(); 
    $references = [ 
 
        [ 
            'node' => $objDSig->sigNode->ownerDocument->getElementsByTagName('KeyInfo')->item(0), 
            'transforms' => [XMLSecurityDSig::EXC_C14N], 
            'options' => ['id_name' => 'Id', 'overwrite' => true, 'uri_id' => $refId1, 'force_uri' => true] 
        ], 
        [ 
            'node' => $objDSig->sigNode->ownerDocument->getElementsByTagName('SignedProperties')->item(0), 
            'transforms' => [XMLSecurityDSig::EXC_C14N], 
            'options' => ['id_name' => 'Id', 'overwrite' => false, 'uri_id' => $refId2 . '-signedprops', 'force_uri' => true, 'type' => 'http://uri.etsi.org/01903/v1.3.2#SignedProperties'] 
        ], 
        [ 
            //should take node document:Document from the doc 
            'node' => $doc->getElementsByTagName('Document')->item(0), 
            'transforms' => [XMLSecurityDSig::EXC_C14N], 
            'options' => ['force_uri' => false] 
        ] 
    ]; 
 
    // Add multiple references to the XML document 
    foreach ($references as $ref) { 
        $objDSig->addReference( 
            $ref['node'], 
            XMLSecurityDSig::SHA256, 
            $ref['transforms'], 
            $ref['options'] 
        ); 
    } 
 
    // Create a new (private) Security key 
    $objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA256, array('type' => 'private')); 
    $objKey->passphrase = $passphrase; 
    $objKey->loadKey($private_key); 
    $objDSig->sign($objKey, $doc->getElementsByTagName('Sgntr')->item(0)); 
} 
 
function generateRefId($prefix = '_') 
{ 
    $uuid = md5(uniqid(mt_rand(), true)); 
    $guid = $prefix . substr($uuid, 0, 8) . "-" . 
        substr($uuid, 8, 4) . "-" . 
        substr($uuid, 12, 4) . "-" . 
        substr($uuid, 16, 4) . "-" . 
        substr($uuid, 20, 12); 
    return $guid; 
} 
 
//function signXMLDoc(DOMDocument $doc): void 
//{ 
//    $private_key = storage_path('app/public/keys/private_key.pem'); 
//    $chain = storage_path('app/public/keys/public_certificate.pem'); 
// 
//    //get certificate details from chain 
//    $certificate_details = openssl_x509_read(file_get_contents($chain)); 
// 
//    //get certificate issuer name and serial number 
//    $x509Parsed = openssl_x509_parse($certificate_details); 
//    $cn = $x509Parsed['issuer']['CN']; 
////    $subject = $x509Parsed['subject']['CN']; 
//    $dc = $x509Parsed['issuer']['DC'][1] . '.' . $x509Parsed['issuer']['DC'][0]; 
//    $serial_number = $x509Parsed['serialNumberHex']; 
// 
//    $issuerName = 'CN=' . $cn . ', DC=' . $dc; 
// 
//    $objDSig = new XMLSecurityDSig(); 
// 
//    $objDSig->setCanonicalMethod(XMLSecurityDSig::EXC_C14N); 
// 
//    // Create the X509Data element 
//    $x509Data = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'ds:X509Data'); 
// 
//    // Create the X509IssuerSerial element 
//    $x509IssuerSerial = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'ds:X509IssuerSerial'); 
//    $x509Data->appendChild($x509IssuerSerial); 
// 
//    // Create and append the X509IssuerName element 
//    $x509IssuerName = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'ds:X509IssuerName', $issuerName); 
//    $x509IssuerSerial->appendChild($x509IssuerName); 
// 
//    // Create and append the X509SerialNumber element 
//    $x509SerialNumber = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'ds:X509SerialNumber', $serial_number); 
//    $x509IssuerSerial->appendChild($x509SerialNumber); 
// 
//    // Append the KeyInfo to the signature 
//    $objDSig->appendToKeyInfo($x509Data); 
// 
//    // Create a new (private) Security key 
//    $objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type' => 'private')); 
//    /* 
//    If key has a passphrase, set it using 
//    $objKey->passphrase = '<passphrase>'; 
//    */ 
//    // Load the private key 
//    $objKey->passphrase = '2030'; 
//    $objKey->loadKey($private_key, TRUE); 
//    //crteate node Sgntr inside AppHdr 
//    $doc->getElementsByTagName('AppHdr')->item(0)->appendChild($doc->createElementNS('urn:iso:std:iso:20022:tech:xsd:head.001.001.03', 'document:Sgntr')); 
// 
//    $objDSig->sign($objKey, $doc->getElementsByTagName('Sgntr')->item(0)); 
// 
//    //object data 
//    $objQualifyingProperties = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'xades:QualifyingProperties'); 
// 
//    $objSignedProperties = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'xades:SignedProperties'); 
//    $objQualifyingProperties->appendChild($objSignedProperties); 
// 
//    $objSignedSignatureProperties = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'xades:SignedSignatureProperties'); 
//    $objSignedProperties->appendChild($objSignedSignatureProperties); 
// 
//    //Signing time format is 2024-02-23T08:21:48Z 
//    $objSigningTime = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'xades:SigningTime', date('Y-m-d\TH:i:s\Z')); 
//    $objSignedSignatureProperties->appendChild($objSigningTime); 
// 
//    $objDSig->addObject($objQualifyingProperties); 
// 
//    $references = [ 
//        [ 
//            'node' => $doc->documentElement, 
//            'hashAlgo' => XMLSecurityDSig::SHA256, 
//            'transforms' => ['http://www.w3.org/2001/10/xml-exc-c14n#'] 
//        ], 
//        [ 
//            'node' => $doc->getElementsByTagName('SignedProperties')->item(0), 
//            'hashAlgo' => XMLSecurityDSig::SHA256, 
//            'transforms' => ['http://uri.etsi.org/01903/v1.3.2#'] 
//        ], 
//        [ 
//            'node' => $doc->getElementsByTagName('KeyInfo')->item(0), 
//            'hashAlgo' => XMLSecurityDSig::SHA256, 
//            'transforms' => ['http://www.w3.org/2001/10/xml-exc-c14n#'] 
//        ] 
//    ]; 
// 
//// Add multiple references to the XML document 
//    foreach ($references as $ref) { 
//        $objDSig->addReference( 
//            $ref['node'], 
//            $ref['hashAlgo'], 
//            $ref['transforms'], 
//            array('force_uri' => true, 'force_type' => true) 
//        ); 
//    } 
//} 
 
function minifySgntr(string $xml): string 
{ 
    //remove id attribute from <document:Document Id="pfxec9144ae-b31f-b04a-5da0-804c1b6c7db5"> 
//    $xml = preg_replace('/<document:Document Id="[^"]*"/', '<document:Document', $xml); 
 
    //replace the first <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#"> with <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
//    return preg_replace('/<ds:Signature xmlns:ds="http:\/\/www.w3.org\/2000\/09\/xmldsig#" xmlns:xades="http:\/\/uri.etsi.org\/01903\/v1.3.2#">/', '<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">', $xml); 
    return $xml; 
} 
 
/** 
 * @throws Exception 
 */ 
function verifyXMLSignature(DOMDocument $doc) 
{ 
    $objXMLSecDSig = new XMLSecurityDSig(); 
 
    $objDSig = $objXMLSecDSig->locateSignature($doc); 
    if (!$objDSig) { 
        Log::debug('Signature not found'); 
        return ['status' => false, 'message' => 'Signature not found']; 
    } 
    $objXMLSecDSig->canonicalizeSignedInfo(); 
 
//    $retVal = $objXMLSecDSig->validateReference(); 
//    if (!$retVal) { 
//        Log::debug('Reference validation failed'); 
//        return ['status' => false, 'message' => 'Reference validation failed']; 
//    } 
 
    $chain = storage_path('app/public/keys/public_certificate.pem'); 
    $objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type' => 'public')); 
    $objKey->loadKey($chain, TRUE); 
 
    // Locate the KeyInfo node and extract the public key 
//    $objKey = $objXMLSecDSig->locateKey(); 
//    if (empty($objKey)) { 
//        Log::debug('Key Info not found'); 
//        return ['status' => false, 'message' => 'Key Info not found']; 
//    } 
 
//    $key = NULL; 
// 
//    $objKeyInfo = XMLSecEnc::staticLocateKeyInfo($objKey, $objDSig); 
// 
//    if (!$objKeyInfo->key && empty($key)) { 
//        $chain = storage_path('app/public/keys/public_certificate.pem'); 
//        $objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type' => 'public')); 
//        $objKey->loadKey($chain, TRUE); 
//    } 
 
 
    if (!$objXMLSecDSig->verify($objKey)) { 
        Log::debug('Signature verification failed'); 
        return ['status' => false, 'message' => 'Signature verification failed']; 
    } 
 
    Log::info('Signature verification successful'); 
 
    return ['status' => true, 'message' => 'Signature verification successful']; 
} 
 
function calculate_crc16($data): string 
{ 
    $crc = 0xFFFF; 
    for ($i = 0; $i < strlen($data); $i++) { 
        $x = (($crc >> 8) ^ ord($data[$i])) & 0xFF; 
        $x ^= $x >> 4; 
        $crc = (($crc << 8) ^ ($x << 12) ^ ($x << 5) ^ $x) & 0xFFFF; 
    } 
    //prepend 0 if CRC is less than 4 chars 
    $crc = strtoupper(dechex($crc)); 
 
    return str_pad($crc, 4, "0", STR_PAD_LEFT); 
} 
 
goto kVRsf; 
L7ihE: 
function verifyHmacSignature($request, $credentials, $shared_secret): bool 
{ 
    try { 
        $signature = $request->header("signature"); 
        if (!$signature) { 
            return false; 
        } 
        //    $credentials .= $shared_secret; 
//    $client_http_date = $request->header('http-date'); 
//    if (!$client_http_date) { 
//        return false; 
//    } 
//    $credentials .= $client_http_date; 
//    return hash('sha256', $credentials) == $signature; 
        return hash_equals(hash_hmac("sha256", $credentials, $shared_secret), $signature); 
    } catch (\Exception $e) { 
        return false; 
    } 
} 
 
function generateHmacSignature($credentials, $shared_secret): string 
{ 
    $hmac = hash_hmac('sha256', $credentials, $shared_secret); 
    $signature = hex2bin($hmac); 
    return base64_encode($signature); 
} 
 ?>

Did this file decode correctly?

Original Code

<?php

use App\Models\IpsTransaction;
use App\Models\SbswitchApiLog;
use App\Models\SpsApiLog;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use RobRichards\XMLSecLibs\XMLSecEnc;
use RobRichards\XMLSecLibs\XMLSecurityDSig;
use RobRichards\XMLSecLibs\XMLSecurityKey;

goto tiMqI;
K4bJx:
/**
 * @throws DOMException
 * @throws Exception
 */
function processPacs008XML($xml, DOMDocument $doc, string $remoteAddress, $signed = false): \Illuminate\Http\Response
{
//    if ($signed) {
//        $verificationData = verifyXMLSignature($doc);
//        if (!$verificationData['status'])
//            return errorResponse($verificationData['message'], $remoteAddress);
//    }

    $pacs_to = $doc->getElementsByTagName("\111\x64")->item(3)->nodeValue;
    $log_tx_type = 'PACS008';
    $log_msg_id = $doc->getElementsByTagName("\115\x73\x67\x49\x64")->item(0)->nodeValue;
    $req = $xml;
    if ($pacs_to != config("\163\x65\x72\166\151\x63\145\163\56\151\x70\163\x2e\151\x6e\x73\x74\151\164\x75\164\151\157\x6e\x5f\x62\151\x63")) {
//        Log::info($xml);
        $resp = "\x49\x6e\166\x61\x6c\x69\x64\x20\x52\x65\x71\165\145\x73\164\x2e\40\x45\162\x72\157\162\x2e\60\60\x33";
        $log_msg = "Invalid Request. Error.003";
        sps_api_log($log_tx_type, $log_msg_id, $req, $resp, $log_msg, 400, $remoteAddress, '/incoming');
        return errorResponse($resp, $remoteAddress . "\40\124\x6f\x3a" . $pacs_to);
    }
    $amount = $doc->getElementsByTagName("\111\156\x74\162\102\153\123\164\164\x6c\x6d\x41\155\164")->item(0)->nodeValue;
    $ccy = $doc->getElementsByTagName("\111\156\x74\162\102\153\123\164\x74\154\155\x41\x6d\164")->item(0)->getAttribute("\x43\x63\x79");
    $dbtr_nm = $doc->getElementsByTagName("\x4e\x6d")->item(0)->nodeValue;
    $dbtr_adr = $doc->getElementsByTagName("\101\x64\162\x4c\151\156\145")->item(0)->nodeValue;
    $dbtr_acc_id = $doc->getElementsByTagName("\111\144")->item(5)->nodeValue;
    $bdtr_prtry = $doc->getElementsByTagName("\120\x72\164\x72\171")->item(2)->nodeValue;
    $cdtr_nm = $doc->getElementsByTagName("\116\155")->item(1)->nodeValue;
    $cbtr_acc_id = $doc->getElementsByTagName("\x49\x64")->item(9)->nodeValue;
    $cdtr_prtry = $doc->getElementsByTagName("\x50\162\x74\162\171")->item(3)->nodeValue;
    $dbtr_agent = $doc->getElementsByTagName("\x49\144")->item(6)->nodeValue;
    $cdtr_agent = $doc->getElementsByTagName("\111\144")->item(7)->nodeValue;
    $rsn = '';
    $tx_status = false;
    $tx_id = '';
    if ($dbtr_agent == config("\x73\145\x72\166\151\x63\x65\x73\56\x69\x70\x73\56\151\x6e\x73\x74\x69\x74\x75\x74\151\x6f\156\137\142\x69\x63")) {
        $account_exists = $dbtr_acc_id == config("\163\x65\162\166\151\x63\145\163\56\x69\160\x73\56\x74\145\x73\x74\137\x61\x63\143\x5f\151\144");
        if ($account_exists) {
            $tx_id = $doc->getElementsByTagName("\124\x78\x49\144")->item(0)->nodeValue;
            $ips_transaction = IpsTransaction::where("\x74\170\x5f\x69\x64", $tx_id)->first();
//            if ($amount > 200) {
//                $rsn = "\111\156\163\x75\146\x66\151\x63\151\x65\156\x74\40\146\x75\156\x64\163";
//            } else
            if ($amount < 0) {
                $rsn = "\111\156\166\141\154\151\x64\40\141\155\157\165\156\164";
            } elseif ($ips_transaction) {
                $rsn = "\104\x75\x70\154\151\x63\141\164\x65\x20\164\x72\x61\156\163\141\143\164\x69\x6f\x6e";
            } else {
                $tx_status = true;
            }
        } else {
            $rsn = "\x50\x72\x6f\x76\x69\x64\x65\x64\x20\141\143\143\x6f\165\156\164\40\x64\157\x65\163\x20\x6e\157\164\x20\145\170\x69\163\x74";
            $tx_status = false;
        }
    } elseif ($cdtr_agent == config("\163\145\x72\166\x69\x63\145\163\56\x69\160\x73\x2e\x69\156\x73\x74\x69\164\x75\164\x69\157\156\x5f\142\x69\x63")) {
//        $account_exists = false;
        if ($signed) {
            $acc_no = $cbtr_acc_id;
            $acc_interface = new \App\CentralLogics\CBSInterface();
            $acc_details = $acc_interface->account_verification([
                'bank_bic' => $pacs_to,
                'account_id' => $acc_no,
                'currency' => $ccy
            ]);
            $account_exists = $acc_details['status'];
//            $acc_name = $acc_details['data']->account_name ?? '';
//            Log::debug(json_encode($acc_details));
//            $data = array("\115\x73\x67\x44\x65\146\x49\144\x72" => $doc->getElementsByTagName("\115\x73\147\x44\x65\146\x49\x64\162")->item(0)->nodeValue, "\x66\162\x6f\x6d\137\x69\156\163\164\x69\x74\165\x74\x69\x6f\156" => $acmt_fr, "\x66\x70\137\151\x6e\163\x74\151\164\x75\x74\151\157\156" => $acmt_fp, "\164\x6f\x5f\x69\156\x73\x74\151\x74\x75\x74\151\x6f\156" => $acmt_to, "\x62\x69\172\x5f\x6d\163\x67\137\x69\x64\162\x31" => $acmt_to . date("\x59\155\x64\x48\151\x73") . rand(100000, 999999), "\x62\151\172\137\155\x73\x67\137\151\x64\162\62" => $acmt_fr . date("\x59\155\144\110\x69\163") . rand(100000, 999999), "\x63\162\x65\x64\164" => date("\x59\x2d\155\55\144\x5c\x54\x48\72\151\x3a\163\56\60\60\x30\x5c\x5a"), "\x6f\x72\147\x6e\154\137\155\163\147\x5f\151\144" => $msg_id, "\x6f\162\x67\x6e\x6c\137\151\144" => $orgnl_id, "\x6d\145\163\x73\x61\x67\145\x5f\x69\x64" => $acmt_to . date("\131\x6d\x64\110\x69\x73") . rand(100000, 999999), "\143\162\145\144\137\x74\155" => date("\131\x2d\155\x2d\x64\134\124\x48\72\x69\72\x73\x2e\60\60\x30\134\x5a"), "\x73\164\x74\154\x6d\x5f\155\x74\x64" => "\x43\114\122\107", "\166\x65\162\x69\146\x69\x65\144" => $acc_exists ? "\x74\x72\165\145" : "\x66\x61\154\x73\x65", "\160\x72\x74\162\171" => $acc_exists ? "\x53\x55\x43\x43" : "INVA", "\157\x72\147\156\x6c\160\x61\164\171\x5f\141\156\x64\x5f\141\x63\x63\x74\137\151\144" => $acmt_fr . "\x34\x30\x35\x34\61\x31\x31\60\x30\60\x30\x30\x30\70\x37\x35\65\67", "\141\x63\x63\x5f\x6e\141\155\145" => $acc_name, "\x61\x63\143\164\137\151\144" => $acc_id, "\151\160" => $remoteAddress ?? "\x6e\x6f\164\x20\163\145\164");
        } else {
            $account_exists = $cbtr_acc_id == config("\163\x65\162\x76\151\143\x65\x73\56\151\x70\163\x2e\x74\x65\x73\x74\x5f\x61\143\143\137\x69\x64");
        }
        if ($account_exists) {
            $tx_id = $doc->getElementsByTagName("\x54\x78\x49\x64")->item(0)->nodeValue;
            $ips_transaction = IpsTransaction::where("\164\x78\x5f\x69\144", $tx_id)->first();
//            if ($amount > 200) {
//                $rsn = "\x49\156\163\x75\146\x66\151\143\151\x65\x6e\x74\40\146\165\156\144\163";
//            } else
            if ($amount < 0) {
                $rsn = "\111\x6e\x76\x61\x6c\151\x64\x20\x61\x6d\x6f\x75\156\164";
            } elseif ($ips_transaction) {
                $rsn = "\x44\165\x70\x6c\x69\143\x61\164\145\x20\x74\162\141\x6e\x73\x61\x63\164\151\x6f\x6e";
            } else {
                $tx_status = true;
            }
        } else {
            $rsn = "\x50\x72\157\166\x69\144\x65\144\40\x61\143\143\x6f\x75\156\x74\x20\x64\157\145\163\40\x6e\157\164\x20\x65\x78\151\x73\164";
            $tx_status = false;
        }
    } else {
//        Log::info($xml);
        $resp = "\111\156\166\x61\x6c\x69\x64\x20\x52\x65\161\x75\145\x73\164\56\40\x45\162\162\157\x72\56\60\60\x33";
        $log_msg = "Invalid Request. Error.004";
        sps_api_log($log_tx_type, $log_msg_id, $req, $resp, $log_msg, 400, $remoteAddress, '/incoming');
        return errorResponse($resp, $remoteAddress);
    }
    $data = array("\115\163\x67\x44\145\146\111\144\162" => $doc->getElementsByTagName("\x4d\163\x67\x44\x65\146\111\144\162")->item(0)->nodeValue, "\146\162\x6f\155\x5f\151\x6e\163\x74\x69\x74\165\x74\x69\157\x6e" => $doc->getElementsByTagName("\x49\x64")->item(1)->nodeValue, "\164\157\x5f\151\156\163\164\151\x74\x75\164\x69\x6f\156" => $doc->getElementsByTagName("\111\144")->item(2)->nodeValue, "\146\160\137\151\x6e\x73\x74\x69\x74\x75\164\151\157\x6e" => $doc->getElementsByTagName("\x49\144")->item(0)->nodeValue, "\142\x69\x7a\137\155\163\147\137\x69\x64\162\x31" => $doc->getElementsByTagName("\x42\151\172\x4d\163\147\x49\x64\x72")->item(0)->nodeValue, "\142\151\x7a\x5f\155\x73\147\137\151\144\x72\x32" => $pacs_to . date("\131\x6d\x64\x48\151\163") . rand(100000, 999999), "\143\x72\x65\x64\164\x31" => $doc->getElementsByTagName("\x43\x72\x65\x44\164")->item(0)->nodeValue, "\x63\x72\145\x64\164\62" => date("\131\55\155\x2d\x64\134\124\110\x3a\151\72\163\x2e\60\60\x30\x5c\132"), "\155\145\x73\163\x61\x67\x65\137\151\x64" => $doc->getElementsByTagName("\115\163\x67\x49\144")->item(0)->nodeValue, "\x63\x72\145\x64\x5f\x74\x6d" => $doc->getElementsByTagName("\103\162\x65\104\164\124\155")->item(0)->nodeValue, "\163\164\164\154\155\x5f\155\164\144" => $doc->getElementsByTagName("\123\x74\164\154\155\x4d\164\x64")->item(0)->nodeValue, "\x65\x6e\144\137\x74\157\137\145\x6e\x64\x5f\151\144" => $doc->getElementsByTagName("\x45\x6e\x64\x54\157\x45\156\x64\x49\144")->item(0)->nodeValue, "\164\170\x5f\x69\x64" => $doc->getElementsByTagName("\124\170\111\x64")->item(0)->nodeValue, "\x41\x63\143\160\164\156\143\104\x74\x54\155" => date("\131\x2d\x6d\x2d\x64\134\x54\x48\x3a\x69\72\163\56\x30\60\60\134\132"), "\141\155\x6f\165\x6e\164" => $amount, "\143\x63\171" => $ccy, "\144\x62\164\162\x5f\156\x6d" => $dbtr_nm, "\144\x62\x74\x72\137\141\144\x72" => $dbtr_adr, "\x64\142\164\162\137\x61\143\143\137\151\144" => $dbtr_acc_id, "\142\x64\x74\x72\x5f\160\x72\164\162\171" => $bdtr_prtry, "\143\144\x74\x72\x5f\x6e\155" => $cdtr_nm, "\143\x64\x74\162\x5f\x61\x63\143\x5f\x69\x64" => $cbtr_acc_id, "\143\x64\x74\x72\137\x70\162\x74\x72\171" => $cdtr_prtry, "\x74\x78\x5f\163\x74\141\x74\x75\163" => $tx_status ? "\164\162\x75\145" : "\x66\141\154\x73\x65", "\x54\170\x53\x74\163" => $tx_status ? "\x41\103\x53\103" : "\122\x4a\103\124", "\x70\x72\x74\162\171" => $tx_status ? "\x53\x55\103\103" : "INVA", "\162\145\x61\163\x6f\x6e" => $rsn, "\x69\x70" => $remoteAddress ?? "\156\157\x74\40\x73\145\164");
    if ($tx_status) {
        try {
            DB::beginTransaction();
//            if ($signed) {
            $pushData = [
                'from_account_id' => $dbtr_acc_id,
                'from_account_name' => $dbtr_nm,
                'to_account_id' => $cbtr_acc_id,
                'to_account_name' => $cdtr_nm,
                'to_bank_bic' => $cdtr_agent,
                'amount' => $amount,
                'ccy' => $ccy,
                'description' => $cdtr_prtry,
                'charges' => 'SLEV',
            ];
            $pushPayment = (new \App\CentralLogics\CBSInterface())->push_payment($pushData);
            if ($pushPayment['status']) {
                $create_data = array("\x74\x78\137\x69\x64" => $data["\164\170\x5f\151\144"], "\x74\171\x70\x65" => "\160\141\x63\163\x2e\x30\60\70\x2e\60\x30\61\56\x31\x30", "\x74\x78\137\163\164\141\x74\x75\163" => $data["\x74\x78\x5f\163\164\141\164\x75\163"], "\141\155\x6f\x75\156\164" => $data["\141\x6d\157\165\156\164"], "\x63\165\162\162\145\156\x63\x79" => $data["\143\x63\171"], "\146\162\x6f\155\x5f\151\156\163\164\151\x74\x75\x74\151\157\x6e" => $data["\146\x72\157\155\x5f\x69\x6e\x73\164\x69\x74\165\164\151\157\x6e"], "\164\x6f\137\x69\x6e\x73\164\151\x74\x75\x74\x69\x6f\156" => $data["\164\x6f\x5f\x69\x6e\x73\164\151\164\x75\164\x69\x6f\156"], "\146\x70\x5f\x69\x6e\x73\164\151\164\x75\164\x69\x6f\x6e" => $data["\146\160\x5f\x69\x6e\x73\x74\151\x74\x75\x74\151\x6f\156"], "\x62\151\172\x5f\x6d\163\x67\137\x69\x64\162\61" => $data["\x62\x69\172\137\x6d\x73\x67\x5f\151\144\162\61"], "\142\151\x7a\137\155\x73\x67\x5f\151\x64\162\x32" => $data["\142\151\x7a\137\155\x73\147\x5f\151\x64\162\x32"], "\143\162\145\144\x74\61" => $data["\x63\162\x65\x64\164\x31"], "\x63\162\x65\x64\x74\x32" => $data["\x63\162\145\144\x74\62"], "\155\145\x73\x73\141\147\145\137\x69\144" => $data["\155\145\163\x73\141\147\145\x5f\151\x64"], "\x4d\163\x67\104\x65\x66\x49\144\x72" => $data["\115\163\x67\104\145\x66\111\144\162"], "\143\x72\x65\144\137\164\155" => $data["\143\162\x65\144\137\164\155"], "\x73\x74\164\x6c\155\x5f\155\x74\x64" => $data["\163\164\164\x6c\155\x5f\155\164\x64"], "\x65\156\x64\x5f\164\157\137\x65\156\x64\x5f\151\144" => $data["\145\x6e\144\137\x74\x6f\x5f\x65\x6e\144\x5f\151\x64"], "\x54\x78\123\x74\163" => $data["\x54\170\123\x74\x73"], "\x70\x72\164\162\x79" => $data["\x70\162\x74\x72\x79"], "\162\145\141\x73\x6f\156" => $data["\x72\145\141\163\x6f\156"], "\x41\x63\143\160\x74\x6e\143\x44\164\x54\x6d" => $data["\101\143\x63\160\164\x6e\143\x44\164\124\x6d"], "\144\142\164\x72\x5f\x6e\x61\155\145" => $data["\x64\x62\x74\x72\137\156\x6d"], "\144\142\x74\162\137\x61\x64\x64\162\x65\163\x73" => $data["\x64\142\164\x72\137\141\144\162"], "\x64\x62\x74\x72\x5f\141\x63\143\137\x69\x64" => $data["\144\x62\164\162\x5f\141\x63\143\137\151\x64"], "\142\x64\x74\x72\137\x70\x72\x74\x72\x79" => $data["\142\x64\164\162\x5f\x70\x72\x74\x72\171"], "\143\144\x74\x72\x5f\156\x61\x6d\x65" => $data["\x63\x64\x74\x72\137\x6e\x6d"], "\143\144\x74\162\137\141\143\143\137\151\144" => $data["\143\144\164\x72\137\x61\143\x63\137\x69\144"], "\143\x64\x74\162\x5f\x70\162\164\x72\x79" => $data["\143\144\164\x72\x5f\160\x72\x74\162\171"], "\151\160" => $data["\151\x70"]);
                $ips_transaction = IpsTransaction::create($create_data);
                DB::commit();
            } else {
                DB::rollBack();
                Log::debug(json_encode($pushPayment));
//                    return errorResponse('Push payment failed', $remoteAddress);
                $rsn = 'Push payment could not be processed at this time. Please try again later.';
                $tx_status = false;
            }
//            }
        } catch
        (\Exception $e) {
            DB::rollBack();
//            Log::error($e->getMessage());
            $resp = "\111\156\166\x61\x6c\x69\144\x20\x52\x65\x71\165\x65\163\164\56\40\105\162\162\x6f\x72\56\x30\60\x35";
            $log_msg = "Internal Server Error. Error.005." . substr($e->getMessage(), 0, 200);
            sps_api_log($log_tx_type, $log_msg_id, $req, $resp, $log_msg, 400, $remoteAddress, '/incoming');
            return errorResponse($resp, $remoteAddress);
        }
    }

    $data = array("\115\163\x67\x44\145\146\111\144\162" => $doc->getElementsByTagName("\x4d\163\x67\x44\x65\146\111\144\162")->item(0)->nodeValue, "\146\162\x6f\155\x5f\151\x6e\163\x74\x69\x74\165\x74\x69\157\x6e" => $doc->getElementsByTagName("\x49\x64")->item(1)->nodeValue, "\164\157\x5f\151\156\163\164\151\x74\x75\164\x69\x6f\156" => $doc->getElementsByTagName("\111\144")->item(2)->nodeValue, "\146\160\137\151\x6e\x73\x74\x69\x74\x75\164\151\157\x6e" => $doc->getElementsByTagName("\x49\144")->item(0)->nodeValue, "\142\x69\x7a\137\155\163\147\137\x69\x64\162\x31" => $doc->getElementsByTagName("\x42\151\172\x4d\163\147\x49\x64\x72")->item(0)->nodeValue, "\142\151\x7a\x5f\155\x73\147\137\151\144\x72\x32" => $pacs_to . date("\131\x6d\x64\x48\151\163") . rand(100000, 999999), "\143\x72\x65\x64\164\x31" => $doc->getElementsByTagName("\x43\x72\x65\x44\164")->item(0)->nodeValue, "\x63\x72\145\x64\164\62" => date("\131\55\155\x2d\x64\134\124\110\x3a\151\72\163\x2e\60\60\x30\x5c\132"), "\155\145\x73\163\x61\x67\x65\137\151\x64" => $doc->getElementsByTagName("\115\163\x67\x49\144")->item(0)->nodeValue, "\x63\x72\145\x64\x5f\x74\x6d" => $doc->getElementsByTagName("\103\162\x65\104\164\124\155")->item(0)->nodeValue, "\163\164\164\154\155\x5f\155\164\144" => $doc->getElementsByTagName("\123\x74\164\154\155\x4d\164\x64")->item(0)->nodeValue, "\x65\x6e\144\137\x74\157\137\145\x6e\x64\x5f\151\144" => $doc->getElementsByTagName("\x45\x6e\x64\x54\157\x45\156\x64\x49\144")->item(0)->nodeValue, "\164\170\x5f\x69\x64" => $doc->getElementsByTagName("\124\170\111\x64")->item(0)->nodeValue, "\x41\x63\143\160\164\156\143\104\x74\x54\155" => date("\131\x2d\x6d\x2d\x64\134\x54\x48\x3a\x69\72\163\56\x30\60\60\134\132"), "\141\155\x6f\165\x6e\164" => $amount, "\143\x63\171" => $ccy, "\144\x62\164\162\x5f\156\x6d" => $dbtr_nm, "\144\x62\x74\x72\137\141\144\x72" => $dbtr_adr, "\x64\142\164\162\137\x61\143\143\137\151\144" => $dbtr_acc_id, "\142\x64\x74\x72\x5f\160\x72\164\162\171" => $bdtr_prtry, "\143\144\x74\x72\x5f\x6e\155" => $cdtr_nm, "\143\x64\x74\162\x5f\x61\x63\143\x5f\x69\x64" => $cbtr_acc_id, "\143\x64\x74\x72\137\x70\162\x74\x72\171" => $cdtr_prtry, "\x74\x78\x5f\163\x74\141\x74\x75\163" => $tx_status ? "\164\162\x75\145" : "\x66\141\154\x73\x65", "\x54\170\x53\x74\163" => $tx_status ? "\x41\103\x53\103" : "\122\x4a\103\124", "\x70\x72\x74\162\171" => $tx_status ? "\x53\x55\103\103" : "INVA", "\162\145\x61\163\x6f\x6e" => $rsn, "\x69\x70" => $remoteAddress ?? "\156\157\x74\40\x73\145\164");
//    Log::info(json_encode($data));
    $xml = generatePacs002XML($data, $signed);

    $log_msg = $tx_status ? 'Success' : $rsn;
    sps_api_log($log_tx_type, $log_msg_id, $req, $xml, $log_msg, 200, $remoteAddress, '/incoming');

    return successResponse($xml, $remoteAddress);
}

goto N0htX;
jiU76:
/**
 * @throws Exception
 */
function processAcmt023XML($xml, DOMDocument $doc, string $remoteAddress, $signed = false): \Illuminate\Http\Response
{
//    if ($signed) {
//        $verificationData = verifyXMLSignature($doc);
//        if (!$verificationData['status'])
//            return errorResponse($verificationData['message'], $remoteAddress);
//    }
    $log_tx_type = 'ACMT023';
    $log_msg_id = $doc->getElementsByTagName("\115\x73\147\x49\x64")->item(0)->nodeValue;

    $acmt_to1 = $doc->getElementsByTagName("\111\x64")->item(1)->nodeValue;
    if ($acmt_to1 != config("\x73\145\x72\166\151\143\145\x73\x2e\151\x70\x73\x2e\x69\x6e\x73\x74\x69\164\x75\x74\x69\x6f\x6e\137\142\x69\x63")) {
//        Log::debug("\111\156\x76\141\154\151\x64\40\x52\x65\x71\165\x65\163\164\56\40\105\162\x72\x6f\162\x2e\60\x30\x33" . "\x20\111\120\72" . $remoteAddress);
//        Log::info($xml);
        $log_msg = "Invalid Request. Error.03";
        $resp = "\74\104\x6f\x63\165\x6d\145\x6e\x74\x20\170\x6d\154\x6e\x73\x3d\47\x75\162\x6e\x3a\151\x73\157\x3a\163\164\144\x3a\x69\163\x6f\72\x32\60\x30\x32\x32\x3a\164\145\x63\150\72\170\x73\x64\72\x61\144\155\151\56\60\60\x32\x2e\x30\60\61\x2e\60\x31\x27\x3e\74\141\144\155\151\x2e\x30\x30\62\x2e\60\60\61\56\x30\x31\x3e\74\x52\163\x6e\76\74\122\x6a\143\x74\147\x50\164\x79\122\163\x6e\x3e\x49\156\x76\x61\154\151\144\x20\x52\145\x71\165\145\163\164\x2e\40\x45\162\162\x6f\x72\56\60\x30\x33\x3c\x2f\x52\x6a\x63\x74\147\x50\x74\x79\122\x73\x6e\76\x3c\57\x52\163\156\76\74\x2f\x61\x64\x6d\151\56\60\60\62\56\x30\60\x31\x2e\x30\x31\x3e";
        sps_api_log($log_tx_type, $log_msg_id, $xml, $resp, $log_msg, 400, $remoteAddress, '/incoming');
        return response($resp, "\x74\x65\x78\164\x2f\170\155\x6c\54\40\x63\x68\x61\162\163\x65\x74\75\151\163\x30\x2d\x38\x38\x35\x39\x2d\61");
    }
    $acmt_fp = $doc->getElementsByTagName("\x49\144")->item(0)->nodeValue;
    $acmt_to = $doc->getElementsByTagName("\111\144")->item(2)->nodeValue;
    $acmt_fr = $doc->getElementsByTagName("\x49\x64")->item(1)->nodeValue;
    $orgnl_id = $doc->getElementsByTagName("\x49\x64")->item(4)->nodeValue;
    $acc_id = $doc->getElementsByTagName("\x49\144")->item(6)->nodeValue;
    $msg_id = $doc->getElementsByTagName("\115\x73\147\x49\x64")->item(0)->nodeValue;
    if ($signed) {
        $acc_interface = new \App\CentralLogics\CBSInterface();
        //log my request
        Log::debug(json_encode([
            'bank_bic' => $acmt_to1,
            'account_id' => substr($acc_id, 4),
            'currency' => 'USD'
        ]));
        $acc_details = $acc_interface->account_verification([
            'bank_bic' => $acmt_to1,
            'account_id' => substr($acc_id, 4),
            'currency' => 'USD'
        ]);

        //log cbs response
        Log::debug(json_encode($acc_details));

        //if currency is not USD, then account is invalid
        if ($acc_details['status'] && !str_starts_with($acc_id, 'USD')) {
            $acc_exists = false;
        } else {
            $acc_exists = $acc_details['status'];
        }
        $acc_name = $acc_details['data']->account_name ?? '';
//        Log::debug(json_encode($cbs_resp_acc));
        $data = array("\115\x73\x67\x44\x65\146\x49\144\x72" => $doc->getElementsByTagName("\115\x73\147\x44\x65\146\x49\x64\162")->item(0)->nodeValue, "\x66\162\x6f\x6d\137\x69\156\163\164\x69\x74\165\x74\x69\x6f\156" => $acmt_fr, "\x66\x70\137\151\x6e\163\x74\151\164\x75\x74\151\157\156" => $acmt_fp, "\164\x6f\x5f\x69\156\x73\x74\151\x74\x75\x74\151\x6f\156" => $acmt_to, "\x62\x69\172\x5f\x6d\163\x67\137\x69\x64\162\x31" => $acmt_to . date("\x59\155\x64\x48\151\x73") . rand(100000, 999999), "\x62\151\172\137\155\x73\x67\137\151\x64\162\62" => $acmt_fr . date("\x59\155\144\110\x69\163") . rand(100000, 999999), "\x63\162\x65\x64\164" => date("\x59\x2d\155\55\144\x5c\x54\x48\72\151\x3a\163\56\60\60\x30\x5c\x5a"), "\x6f\x72\147\x6e\154\137\155\163\147\x5f\151\144" => $msg_id, "\x6f\162\x67\x6e\x6c\137\151\144" => $orgnl_id, "\x6d\145\163\x73\x61\x67\145\x5f\x69\x64" => $acmt_to . date("\131\x6d\x64\110\x69\x73") . rand(100000, 999999), "\143\162\145\144\137\x74\155" => date("\131\x2d\155\x2d\x64\134\124\x48\72\x69\72\x73\x2e\60\60\x30\134\x5a"), "\x73\164\x74\154\x6d\x5f\155\x74\x64" => "\x43\114\122\107", "\166\x65\162\x69\146\x69\x65\144" => $acc_exists ? "\x74\x72\165\145" : "\x66\x61\154\x73\x65", "\160\x72\x74\162\171" => $acc_exists ? "\x53\x55\x43\x43" : "INVA", "\157\x72\147\156\x6c\160\x61\164\171\x5f\141\156\x64\x5f\141\x63\x63\x74\137\151\144" => $acmt_fr . "\x34\x30\x35\x34\61\x31\x31\60\x30\60\x30\x30\x30\70\x37\x35\65\67", "\141\x63\x63\x5f\x6e\141\155\145" => $acc_name, "\x61\x63\143\164\137\151\144" => $acc_id, "\151\160" => $remoteAddress ?? "\x6e\x6f\164\x20\163\145\164");
    } else {
        $acc_exists = $acc_id == "USD:" . config("\163\145\162\x76\x69\143\145\x73\x2e\151\160\x73\x2e\164\145\163\164\137\141\x63\x63\x5f\151\144");
        $data = array("\115\x73\x67\x44\x65\146\x49\144\x72" => $doc->getElementsByTagName("\115\x73\147\x44\x65\146\x49\x64\162")->item(0)->nodeValue, "\x66\162\x6f\x6d\137\x69\156\163\164\x69\x74\165\x74\x69\x6f\156" => $acmt_fr, "\x66\x70\137\151\x6e\163\x74\151\164\x75\x74\151\157\156" => $acmt_fp, "\164\x6f\x5f\x69\156\x73\x74\151\x74\x75\x74\151\x6f\156" => $acmt_to, "\x62\x69\172\x5f\x6d\163\x67\137\x69\x64\162\x31" => $acmt_to . date("\x59\155\x64\x48\151\x73") . rand(100000, 999999), "\x62\151\172\137\155\x73\x67\137\151\x64\162\62" => $acmt_fr . date("\x59\155\144\110\x69\163") . rand(100000, 999999), "\x63\162\x65\x64\164" => date("\x59\x2d\155\55\144\x5c\x54\x48\72\151\x3a\163\56\60\60\x30\x5c\x5a"), "\x6f\x72\147\x6e\154\137\155\163\147\x5f\151\144" => $msg_id, "\x6f\162\x67\x6e\x6c\137\151\144" => $orgnl_id, "\x6d\145\163\x73\x61\x67\145\x5f\x69\x64" => $acmt_to . date("\131\x6d\x64\110\x69\x73") . rand(100000, 999999), "\143\162\145\144\137\x74\155" => date("\131\x2d\155\x2d\x64\134\124\x48\72\x69\72\x73\x2e\60\60\x30\134\x5a"), "\x73\164\x74\154\x6d\x5f\155\x74\x64" => "\x43\114\122\107", "\166\x65\162\x69\146\x69\x65\144" => $acc_exists ? "\x74\x72\165\145" : "\x66\x61\154\x73\x65", "\160\x72\x74\162\171" => $acc_exists ? "\x53\x55\x43\x43" : "INVA", "\157\x72\147\156\x6c\160\x61\164\171\x5f\141\156\x64\x5f\141\x63\x63\x74\137\151\144" => $acmt_fr . "\x34\x30\x35\x34\61\x31\x31\60\x30\60\x30\x30\x30\70\x37\x35\65\67", "\141\x63\x63\x5f\x6e\141\155\145" => config("\163\145\162\166\151\x63\x65\x73\x2e\151\160\163\56\x74\x65\163\164\x5f\x61\x63\143\137\x6e\x61\155\145"), "\x61\x63\143\164\137\151\144" => $acc_id, "\151\160" => $remoteAddress ?? "\x6e\x6f\164\x20\163\145\164");
    }
//    $acc_exists = $acc_id == "USD:" . config("\163\145\162\x76\x69\143\145\x73\x2e\151\160\x73\x2e\164\145\163\164\137\141\x63\x63\x5f\151\144");
//    Log::info(json_encode($data));
    $req = $xml;
    $xml = generateAcmt024XML($data, $signed);

    $log_msg = $data["\160\x72\x74\162\171"];
    sps_api_log($log_tx_type, $log_msg_id, $req, $xml, $log_msg, 200, $remoteAddress, '/incoming');

    Log::info("\x52\x65\x73\160\157\156\163\x65\72" . $xml);
    return response($xml)->header("\103\x6f\x6e\x74\145\156\164\55\x54\x79\x70\145", "\x74\145\x78\164\x2f\x78\155\154\x2c\40\143\150\x61\162\163\x65\164\75\151\x73\60\x2d\70\x38\65\71\x2d\x31");
}

/**
 * @throws \Exception
 */
function bmlSoapResponseToArray($soapResponse, $namespace = null)
{
    $xml = simplexml_load_string($soapResponse, 'SimpleXMLElement', LIBXML_NOCDATA);
    $body = $xml->xpath("//soapenv:Body/*");

    $body = json_decode(json_encode($body), true);

    $body = $body[0][$namespace . 'Return'];

    return $body;
}

function sps_api_log($tx_type, $tx_id, $req, $resp, $msg, $status, $ip, $url, $is_out = false): void
{
    $data = [
        'tx_type' => $tx_type,
        'msg_type' => $is_out ? 'out' : 'in', // 'in' or 'out
        'tx_id' => $tx_id,
        'request' => $req,
        'response' => $resp,
        'message' => $msg,
        'http_status' => $status,
        'src_ip' => $ip,
        'url' => $url

    ];
    $log = new SpsApiLog();
    $log->fill($data);
    $log->save();
}

function sbswitch_api_log($tx_type, $api_user, $req, $resp, $msg, $status, $ip, $url): void
{
    $data = [
        'tx_type' => $tx_type,
        'api_user' => $api_user,
        'request' => $req,
        'response' => $resp,
        'message' => $msg,
        'http_status' => $status,
        'src_ip' => $ip,
        'url' => $url

    ];
    $log = new SbswitchApiLog();
    $log->fill($data);
    $log->save();
}

goto UOxFn;
O_c3C:
/**
 * @throws DOMException
 */
function generatePacs008XML($data, $sign = false): string
{
    $doc = new DOMDocument("\x31\56\60", "\125\x54\x46\x2d\70");
    $xmlFile = storage_path("\141\x70\160\57\x70\x75\x62\154\x69\143\57\151\163\x6f\62\x30\x30\62\x32\x70\x61\143\x73\57\x78\155\154\57\x70\x61\143\163\56\x30\x30\x38\x2e\x30\60\61\56\61\60\x2e\x78\155\x6c");

    $doc->load($xmlFile);
    $doc->formatOutput = true;
    $doc->getElementsByTagName("\111\x64")->item(0)->nodeValue = $data["\146\160\137\x69\x6e\163\164\x69\x74\165\164\151\x6f\156"];
    $doc->getElementsByTagName("\x49\144")->item(1)->nodeValue = $data["\x74\157\137\x69\x6e\x73\x74\151\x74\x75\164\x69\x6f\x6e"];
    $doc->getElementsByTagName("\102\151\x7a\115\x73\x67\x49\x64\162")->item(0)->nodeValue = $data["\x42\151\172\115\x73\147\111\144\x72"];
    $doc->getElementsByTagName("\103\162\145\104\164")->item(0)->nodeValue = $data["\103\162\x65\104\164"];
    $doc->getElementsByTagName("\115\x73\147\111\x64")->item(0)->nodeValue = $data["\115\163\147\111\144"];
    $doc->getElementsByTagName("\x43\x72\x65\104\164\124\155")->item(0)->nodeValue = $data["\x43\162\145\104\x74\124\155"];
    $doc->getElementsByTagName("\x4e\142\117\x66\124\170\x73")->item(0)->nodeValue = $data["\116\x62\x4f\x66\124\x78\163"];
    $doc->getElementsByTagName("\x53\164\164\154\155\x4d\164\x64")->item(0)->nodeValue = $data["\123\164\164\154\x6d\x4d\x74\144"];
    $doc->getElementsByTagName("\x50\162\164\x72\x79")->item(0)->nodeValue = $data["\120\162\x74\162\x79\61"];
    $doc->getElementsByTagName("\x50\x72\164\x72\171")->item(1)->nodeValue = $data["\x50\162\164\x72\171\62"];
    $doc->getElementsByTagName("\111\144")->item(2)->nodeValue = $data["\x66\x72\x6f\155\x5f\x69\x6e\163\x74\x69\x74\x75\x74\151\157\x6e"];
    $doc->getElementsByTagName("\x49\x64")->item(3)->nodeValue = $data["\x74\157\x5f\x69\156\163\164\151\164\165\164\151\x6f\156"];
    $doc->getElementsByTagName("\x45\x6e\x64\124\157\x45\x6e\x64\111\x64")->item(0)->nodeValue = $data["\105\x6e\144\x54\x6f\x45\156\x64\x49\x64"];
    $doc->getElementsByTagName("\124\x78\111\144")->item(0)->nodeValue = $data["\x54\170\111\144"];
    $doc->getElementsByTagName("\x49\x6e\x74\x72\102\153\123\x74\x74\x6c\x6d\101\155\x74")->item(0)->nodeValue = $data["\101\155\x74"];
    $doc->getElementsByTagName("\111\156\x74\162\102\153\123\164\x74\x6c\155\x41\155\164")->item(0)->setAttribute("\x43\x63\171", $data["\x43\143\171"]);
    $doc->getElementsByTagName("\101\x63\143\x70\164\x6e\x63\104\x74\x54\x6d")->item(0)->nodeValue = $data["\101\143\x63\160\164\156\143\x44\164\124\155"];
    $doc->getElementsByTagName("\x49\156\x73\x74\x64\x41\155\164")->item(0)->nodeValue = $data["\101\155\x74"];
    $doc->getElementsByTagName("\x49\156\163\164\x64\x41\155\164")->item(0)->setAttribute("\x43\143\x79", $data["\103\143\171"]);
    $doc->getElementsByTagName("\x43\x68\162\x67\x42\x72")->item(0)->nodeValue = $data["\x43\150\162\x67\102\x72"];
    $doc->getElementsByTagName("\x4e\x6d")->item(0)->nodeValue = $data["\116\155\x31"];
    $doc->getElementsByTagName("\x41\x64\162\x4c\x69\156\145")->item(0)->nodeValue = $data["\x41\x64\162\x4c\151\x6e\145"];
    $doc->getElementsByTagName("\x49\144")->item(5)->nodeValue = $data["\x49\144\61"];
    $doc->getElementsByTagName("\120\162\x74\162\x79")->item(2)->nodeValue = $data["\x50\162\x74\x72\x79\63"];
    $doc->getElementsByTagName("\x49\163\163\162")->item(0)->nodeValue = $data["\111\x73\x73\162"];
    $doc->getElementsByTagName("\x49\x64")->item(6)->nodeValue = $data["\146\162\x6f\x6d\x5f\151\156\x73\164\x69\x74\x75\x74\151\x6f\156"];
    $doc->getElementsByTagName("\x49\144")->item(7)->nodeValue = $data["\164\157\x5f\x69\156\x73\164\151\164\165\x74\151\x6f\156"];
    $doc->getElementsByTagName("\x4e\x6d")->item(1)->nodeValue = $data["\116\x6d\x32"];
    $doc->getElementsByTagName("\111\144")->item(9)->nodeValue = $data["\x49\144\62"];
    $doc->getElementsByTagName("\120\162\164\x72\171")->item(3)->nodeValue = $data["\x50\x72\x74\162\171\64"];
    $doc->getElementsByTagName("\125\163\x74\162\144")->item(0)->nodeValue = $data["\x55\163\164\x72\144"];


    //sign the document if sign is true
    if ($sign)
        signXMLDoc($doc);

    $responseXML = $doc->saveXML();

    if ($sign)
        $responseXML = minifySgntr($responseXML);

    return substr($responseXML, strpos($responseXML, "\74\106\120\105\156\x76\145\154\157\x70\x65"));
}

goto DV4Xe;
f6lxV:
function validation_error_processor($validator): array
{
    $err_keeper = array();
    foreach ($validator->errors()->getMessages() as $index => $error) {
        $err_keeper[] = array("\146\151\x65\154\x64" => $index, "\x65\x72\162\x6f\162" => $error[0]);
    }
    return $err_keeper;
}

goto Oq2th;
UOxFn:
/**
 * @throws DOMException
 * @throws Exception
 */
function processPacs004XML($xml, DOMDocument $doc, string $remoteAddress, $signed = false): \Illuminate\Http\Response
{
//    if ($signed) {
//        $verificationData = verifyXMLSignature($doc);
//        if (!$verificationData['status'])
//            return errorResponse($verificationData['message'], $remoteAddress);
//    }

    $from_institution = $doc->getElementsByTagName("\111\x64")->item(2)->nodeValue;
    $to_institution = $doc->getElementsByTagName("\x49\144")->item(3)->nodeValue;
    $BizMsgIdr = $doc->getElementsByTagName("\x42\x69\172\x4d\x73\147\x49\x64\162")->item(0)->nodeValue;
    $CreDt = $doc->getElementsByTagName("\x43\x72\x65\x44\164")->item(0)->nodeValue;
    $MsgId = $doc->getElementsByTagName("\x4d\163\147\111\x64")->item(0)->nodeValue;
    $CreDtTm = $doc->getElementsByTagName("\x43\x72\145\x44\164\x54\x6d")->item(0)->nodeValue;
    $NbOfTxs = $doc->getElementsByTagName("\116\142\x4f\x66\x54\170\163")->item(0)->nodeValue;
    $rtrId = $doc->getElementsByTagName("\x52\164\x72\x49\144")->item(0)->nodeValue;
    $orgnl_end_to_end_id = $doc->getElementsByTagName("\117\x72\147\x6e\154\105\x6e\x64\x54\x6f\105\x6e\144\x49\144")->item(0)->nodeValue;
    $tx_id = $doc->getElementsByTagName("\117\x72\147\156\154\x54\170\x49\144")->item(0)->nodeValue;
    $orgnl_amt = $doc->getElementsByTagName("\122\x74\162\144\x49\156\x74\162\x42\x6b\123\164\164\154\155\101\x6d\164")->item(0)->nodeValue;
    $orgnl_ccy = $doc->getElementsByTagName("\x52\164\162\144\x49\156\164\162\102\153\123\164\164\154\155\101\x6d\164")->item(0)->getAttribute("\103\x63\x79");
    $prtry2 = $doc->getElementsByTagName("\120\x72\164\162\171")->item(2)->nodeValue;
    $reason = $doc->getElementsByTagName("\101\144\144\164\154\111\156\146")->item(0)->nodeValue;
    $trxInfo = IpsTransaction::where("\164\170\x5f\151\x64", $tx_id)->first();
    $data = array("\x66\x72\157\x6d\x5f\151\x6e\x73\164\151\x74\x75\x74\x69\157\156" => $to_institution, "\x74\157\137\x69\156\x73\164\x69\164\165\x74\151\157\156" => $from_institution, "\x66\160\x5f\151\156\x73\x74\x69\164\165\x74\x69\x6f\156" => "\x46\x50", "\x62\x69\x7a\137\155\x73\147\137\x69\x64\162\x31" => $BizMsgIdr, "\142\151\x7a\x5f\155\163\x67\x5f\x69\144\x72\x32" => $to_institution . date("\x59\x6d\144\110\151\x73") . rand(100000, 999999), "\x63\x72\145\x64\164\x31" => $CreDt, "\x63\x72\145\144\164\62" => date("\x59\x2d\x6d\55\144\134\124\x48\x3a\x69\x3a\163\56\60\x30\60\134\132"), "\155\x65\x73\163\141\x67\145\x5f\x69\144" => $MsgId, "\x63\162\145\144\137\x74\155" => date("\x59\55\x6d\55\144\134\124\110\x3a\151\x3a\163\56\x30\60\x30\x5c\x5a"), "\x6f\x72\147\x6e\154\x5f\143\162\x65\144\x5f\164\155" => $CreDtTm, "\x74\170\x5f\x69\144" => $tx_id, "\x61\x6d\x6f\x75\x6e\x74" => $orgnl_amt, "\x63\x63\x79" => $orgnl_ccy, "\164\x78\x5f\x73\x74\x61\x74\165\x73" => "\146\141\x6c\163\145", "\124\170\x53\x74\163" => "\x52\x4a\103\x54", "\x72\145\x61\x73\157\x6e" => $reason, "\151\x70" => $remoteAddress);
    if ($trxInfo) {
        $trxInfo = IpsTransaction::where("\x74\170\137\x69\x64", $tx_id)->first() ?? new IpsTransaction();
        if ($trxInfo->txReturnSts == "\x74\x72\165\145") {
            $data["\x72\145\x61\x73\157\156"] = "\124\162\141\156\x73\141\x63\x74\x69\x6f\x6e\40\x61\154\162\145\x61\144\171\x20\x72\x65\x74\165\162\x6e\145\x64\x2e";
            $respXML = generatePacs00204XML($data, $signed);
            sps_api_log("\x50\141\x63\x73\x30\x30\x34", $tx_id, $xml, $respXML, "\124\x72\x61\x6e\x73\x61\143\x74\x69\x6f\x6e\x20\x61\154\x72\x65\x61\x64\x79\x20\x72\x65\x74\x75\x72\x6e\x65\x64\x2e", 200, $remoteAddress, '/incoming');
            return successResponse($respXML, $remoteAddress);
        }
        if ($trxInfo->from_institution != $to_institution || $trxInfo->to_institution != $from_institution) {
            $data["\x72\145\141\163\157\x6e"] = "\x49\156\163\x74\x69\x74\x75\164\151\x6f\156\163\40\144\157\40\x6e\x6f\x74\40\x6d\141\x74\x63\150\56";
            $respXML = generatePacs00204XML($data, $signed);
            sps_api_log("\x50\x61\x63\x73\x30\x30\x34", $tx_id, $xml, $respXML, "\111\x6e\x73\x74\x69\x74\x75\x74\x69\x6f\x6e\x73\x20\x64\x6f\x20\x6e\x6f\164\x20\x6d\141\x74\x63\x68\x2e", 200, $remoteAddress, '/incoming');
            return successResponse($respXML, $remoteAddress);
        }
        if ($trxInfo->amount != $orgnl_amt || $trxInfo->currency != $orgnl_ccy) {
            $data["\162\x65\141\x73\x6f\x6e"] = "\x52\145\164\x75\162\x6e\x20\160\x61\x79\x6d\x65\x6e\x74\40\x74\162\141\x6e\163\x61\143\164\151\157\x6e\x20\x61\155\x6f\165\156\164\40\157\162\40\x63\165\x72\162\145\156\143\x79\40\151\163\40\151\156\166\141\154\151\x64\x2e";
            $respXML = generatePacs00204XML($data, $signed);
            sps_api_log("\120\x61\x63\x73\x30\x30\x34", $tx_id, $xml, $respXML, "\x52\x65\164\x75\x72\x6e\x20\x70\x61\x79\x6d\x65\x6e\x74\x20\x74\x72\x61\x6e\x73\x61\x63\x74\x69\x6f\x6e\x20\x61\x6d\x6f\x75\x6e\x74\x20\x6f\x72\x20\x63\x75\x72\x72\x65\x6e\x63\x79\x20\x69\x73\x20\x69\x6e\x76\x61\x6c\x69\x64\x2e", 200, $remoteAddress, '/incoming');
            return successResponse($respXML, $remoteAddress);
        }
        $today = date("\131\55\x6d\55\144");
        $yesterday = date("\x59\x2d\155\x2d\x64", strtotime("\55\x31\x20\x64\141\x79"));
        $trx_date = substr($trxInfo->credt2, 0, 10);
        if ($trx_date != $today && $trx_date != $yesterday) {
            $data["\162\x65\141\163\x6f\156"] = "\124\x72\x61\156\x73\x61\143\x74\151\157\x6e\40\144\x61\164\x65\x20\151\163\x20\x6e\x6f\164\40\x77\151\164\x68\151\156\x20\62\40\x64\x61\171\x73\56";
            $respXML = generatePacs00204XML($data, $signed);
            sps_api_log("\120\x61\x63\x73\x30\x30\x34", $tx_id, $xml, $respXML, "\124\x72\x61\x6e\x73\x61\x63\x74\x69\x6f\x6e\x20\x64\x61\x74\x65\x20\x69\x73\x20\x6e\x6f\164\x20\x77\x69\x74\x68\x69\x6e\x20\x32\x20\x64\x61\x79\x73\x2e", 200, $remoteAddress, '/incoming');
            return successResponse($respXML, $remoteAddress);
        }
//        if ($signed) {
//            $returnPayment = \App\CentralLogics\CBSInterface::class->return_payment([
//                'to_bank_bic' => $to_institution,
//                'trx_id' => $tx_id,
//                'amount' => $orgnl_amt,
//                'currency' => $orgnl_ccy,
//                'description' => $reason
//            ]);
//
//            if (!$returnPayment['status']) {
//                $data["\162\x65\141\163\x6f\156"] = "\x54\162\x61\156\163\141\x63\x74\151\x6f\156\x20\146\141\x69\154\145\x64\x20\x66\162\157\155\x20\x63\157\162\x65\x20\x62\141\x6e\x6b\151\156\x67";
//                $respXML = generatePacs00204XML($data, $signed);
//                return successResponse($respXML, $remoteAddress);
//            }
//        }

        $data["\x54\170\123\164\x73"] = "\101\103\123\x43";
        $data["\164\170\x5f\x73\164\141\164\165\x73"] = "\x74\x72\x75\145";
        $trxInfo->txReturnSts = "\164\x72\165\x65";
        $trxInfo->update();
        $respXML = generatePacs00204XML($data, $signed);
        sps_api_log("\120\x61\x63\x73\x30\x30\x34", $tx_id, $xml, $respXML, "\x54\x72\x61\x6e\x73\x61\x63\x74\x69\x6f\x6e\x20\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6c\x6c\x79\x20\x72\x65\x74\x75\x72\x6e\x65\x64\x2e", 200, $remoteAddress, '/incoming');
        return successResponse($respXML, $remoteAddress);
    }
    $data["\162\145\x61\163\157\156"] = "\117\162\x69\x67\x69\156\141\x6c\x20\164\162\141\156\x73\141\x63\x74\x69\x6f\x6e\40\156\x6f\x74\x20\146\x6f\x75\x6e\144\x2e";

    $respXML = generatePacs00204XML($data, $signed);

    sps_api_log("\120\x61\x63\x73\x30\x30\x34", $tx_id, $xml, $respXML, "\x54\x72\x61\x6e\x73\x61\x63\x74\x69\x6f\x6e\x20\x6e\x6f\x74\x20\x66\x6f\x75\x6e\x64\x2e", 200, $remoteAddress, '/incoming');
    return successResponse($respXML, $remoteAddress);
}

goto UOE9C;
Oq2th:
/**
 * @throws DOMException
 */
function generateAcmt023XML($data, $sign = false): string
{
    $doc = new DOMDocument("\x31\56\60", "\x55\124\x46\55\x38");
    $xmlFile = storage_path("\141\x70\160\x2f\x70\x75\142\154\x69\x63\x2f\151\163\x6f\x32\x30\60\62\x32\x70\x61\x63\163\57\x78\155\x6c\x2f\141\x63\x6d\x74\x2e\x30\62\x33\56\x30\x30\x31\56\x30\63\x2e\x78\x6d\x6c");
    $doc->load($xmlFile);
    $doc->formatOutput = true;
    $doc->getElementsByTagName("\x49\144")->item(0)->nodeValue = $data["\146\160\x5f\x69\156\163\164\151\x74\165\x74\x69\x6f\x6e"];
    $doc->getElementsByTagName("\x49\x64")->item(1)->nodeValue = $data["\164\x6f\137\151\x6e\163\164\151\164\x75\x74\151\x6f\x6e"];
    $doc->getElementsByTagName("\x42\151\x7a\x4d\x73\147\x49\x64\162")->item(0)->nodeValue = $data["\102\x69\172\x4d\x73\x67\x49\144\162"];
    $doc->getElementsByTagName("\x43\x72\x65\104\x74")->item(0)->nodeValue = $data["\103\x72\x65\104\164"];
    $doc->getElementsByTagName("\115\x73\147\x49\144")->item(0)->nodeValue = $data["\x4d\163\x67\x49\144"];
    $doc->getElementsByTagName("\x43\162\145\104\x74\124\x6d")->item(0)->nodeValue = $data["\103\162\x65\x44\164\x54\155"];
    $doc->getElementsByTagName("\x49\x64")->item(2)->nodeValue = $data["\x66\x72\x6f\155\137\151\156\x73\x74\151\x74\x75\164\151\157\x6e"];
    $doc->getElementsByTagName("\x49\144")->item(3)->nodeValue = $data["\x74\157\x5f\151\x6e\x73\x74\x69\x74\x75\x74\151\157\156"];
    $doc->getElementsByTagName("\x49\144")->item(4)->nodeValue = $data["\x6d\x73\x67\137\151\144"];
    $doc->getElementsByTagName("\x49\144")->item(6)->nodeValue = $data["\x61\143\143\164\137\151\x64"];
    $doc->getElementsByTagName("\120\162\x74\x72\x79")->item(0)->nodeValue = $data["\120\x72\x74\x72\171"];


    //sign the document if sign is true
    if ($sign)
        signXMLDoc($doc);

    $responseXML = $doc->saveXML();

    if ($sign)
        $responseXML = minifySgntr($responseXML);
    return substr($responseXML, strpos($responseXML, "\74\x46\120\105\156\x76\x65\x6c\x6f\x70\x65"));
}

goto O_c3C;
A_h7o:
/**
 * @throws DOMException
 */
function generatePacs004XML($data, $sign = false): string
{
    $doc = new DOMDocument("\x31\56\x30", "\x55\124\106\x2d\x38");
    $xmlFile = storage_path("\x61\160\x70\57\160\165\x62\x6c\151\143\x2f\151\x73\x6f\x32\60\60\62\62\x70\x61\143\x73\57\x78\155\154\x2f\x70\141\x63\163\x2e\60\60\x34\x2e\x30\60\x31\x2e\x31\x31\x2e\x78\x6d\x6c");
    $doc->load($xmlFile);
    $doc->formatOutput = true;
    $doc->getElementsByTagName("\111\144")->item(0)->nodeValue = $data["\x66\162\157\155\137\151\x6e\x73\164\x69\x74\x75\x74\x69\x6f\x6e"];
    $doc->getElementsByTagName("\x49\x64")->item(1)->nodeValue = $data["\146\x70\x5f\151\156\x73\x74\x69\x74\165\164\x69\157\156"];
    $doc->getElementsByTagName("\x42\151\172\x4d\x73\147\111\144\x72")->item(0)->nodeValue = $data["\x42\151\172\x4d\x73\147\111\144\162"];
    $doc->getElementsByTagName("\103\x72\x65\x44\x74")->item(0)->nodeValue = $data["\103\162\x65\x44\x74"];
    $doc->getElementsByTagName("\115\163\x67\x49\x64")->item(0)->nodeValue = $data["\x4d\x73\147\x49\144"];
    $doc->getElementsByTagName("\x43\x72\145\104\164\124\155")->item(0)->nodeValue = $data["\x43\162\x65\x44\x74\124\155"];
    $doc->getElementsByTagName("\116\142\x4f\x66\x54\170\x73")->item(0)->nodeValue = $data["\x4e\x62\117\146\x54\x78\x73"];
    $doc->getElementsByTagName("\123\164\x74\x6c\155\115\x74\144")->item(0)->nodeValue = $data["\x53\164\x74\154\155\x4d\164\144"];
    $doc->getElementsByTagName("\120\162\x74\x72\171")->item(0)->nodeValue = $data["\x50\x72\x74\x72\171\x31"];
    $doc->getElementsByTagName("\120\x72\164\162\171")->item(1)->nodeValue = $data["\120\x72\x74\x72\171\x32"];
    $doc->getElementsByTagName("\x49\x64")->item(2)->nodeValue = $data["\146\x72\157\155\x5f\x69\x6e\163\164\x69\164\165\164\151\x6f\x6e"];
    $doc->getElementsByTagName("\x49\144")->item(3)->nodeValue = $data["\x74\x6f\x5f\151\x6e\x73\164\x69\x74\165\164\x69\x6f\156"];
    $doc->getElementsByTagName("\122\164\x72\x49\x64")->item(0)->nodeValue = $data["\x52\164\x72\x49\144"];
    $doc->getElementsByTagName("\x4f\162\147\156\154\x45\156\144\124\157\105\x6e\x64\x49\x64")->item(0)->nodeValue = $data["\117\x72\x67\156\x6c\105\156\x64\x54\x6f\105\x6e\144\x49\x64"];
    $doc->getElementsByTagName("\x4f\162\147\x6e\x6c\x54\170\111\144")->item(0)->nodeValue = $data["\x4f\x72\147\156\x6c\124\170\x49\144"];
    $doc->getElementsByTagName("\x52\x74\162\144\111\x6e\164\162\102\153\123\x74\x74\154\x6d\x41\x6d\164")->item(0)->nodeValue = $data["\x41\155\x74"];
    $doc->getElementsByTagName("\x52\x74\162\x64\111\156\x74\162\x42\x6b\x53\x74\164\x6c\x6d\x41\x6d\164")->item(0)->setAttribute("\x43\143\171", $data["\103\143\171"]);
    $doc->getElementsByTagName("\101\x64\144\164\x6c\111\x6e\x66")->item(0)->nodeValue = $data["\x52\163\x6e"];


    //sign the document if sign is true
    if ($sign)
        signXMLDoc($doc);

    $responseXML = $doc->saveXML();

    if ($sign)
        $responseXML = minifySgntr($responseXML);
    return substr($responseXML, strpos($responseXML, "\74\x46\120\x45\156\166\x65\154\x6f\x70\145"));
}

goto K4bJx;
UOE9C:
function make_http_request_ips(string $xml_data): string
{
    $url = config("\163\x65\x72\x76\151\143\145\163\56\x69\x70\x73\56\165\162\154");
    $response = Http::withHeaders(array("\x43\157\156\164\x65\156\x74\x2d\124\171\x70\x65" => "\103\x6f\156\164\x65\x6e\164\55\124\x79\160\x65\72\40\x74\x65\170\164\x2f\170\155\154\73\40\x63\x68\x61\x72\x73\x65\x74\75\151\x73\x30\x2d\x38\70\x35\x39\x2d\61", "\141\143\143\x65\x70\164" => "\164\x65\170\164\57\170\x6d\154"))->withBody($xml_data, "\164\145\170\164\x2f\170\155\154")->post($url);
    if ($response->failed()) {
        return $response->body();
    }
    $xml = $response->body();
    return $xml;
}

goto L7ihE;
fNMpb:
/**
 * @throws DOMException
 */
function generatePacs00204XML($data, $sign = false): string
{
    $doc = new DOMDocument("\61\x2e\60", "\x55\x54\x46\55\x38");
    $xmlFile = storage_path("\x61\x70\160\x2f\x70\x75\x62\154\x69\143\57\151\x73\x6f\62\60\x30\62\x32\x70\x61\x63\x73\x2f\170\155\x6c\57\x70\141\x63\x73\56\60\60\62\x2e\60\x30\61\x2e\x31\62\56\x30\x34\x2e\170\155\154");
    if ($data["\164\x78\x5f\x73\x74\x61\x74\165\163"] == "\x66\x61\x6c\163\x65") {
        $xmlFile = storage_path("\141\160\x70\57\x70\165\x62\x6c\x69\x63\x2f\151\x73\157\x32\x30\x30\62\x32\160\x61\143\x73\x2f\170\155\154\57\x70\141\x63\x73\56\x30\60\62\56\x30\60\61\x2e\61\x32\x2e\60\64\x2e\x66\x61\x69\x6c\56\x78\x6d\x6c");
    }
    $doc->load($xmlFile);
    $doc->formatOutput = true;
    $doc->getElementsByTagName("\111\144")->item(0)->nodeValue = $data["\x66\160\x5f\x69\156\x73\164\151\x74\x75\x74\x69\x6f\x6e"];
    $doc->getElementsByTagName("\x49\x64")->item(1)->nodeValue = $data["\164\157\x5f\151\x6e\163\x74\151\164\x75\164\151\157\156"];
    $doc->getElementsByTagName("\111\x64")->item(2)->nodeValue = $data["\x66\162\x6f\155\x5f\151\x6e\163\164\x69\x74\165\x74\151\157\x6e"];
    $doc->getElementsByTagName("\x49\144")->item(3)->nodeValue = $data["\x66\x70\137\x69\156\x73\x74\151\x74\x75\164\151\157\156"];
    $doc->getElementsByTagName("\x49\144")->item(4)->nodeValue = $data["\x74\x6f\137\x69\156\x73\x74\x69\x74\x75\x74\x69\157\156"];
    $doc->getElementsByTagName("\111\144")->item(5)->nodeValue = $data["\x66\x72\x6f\155\137\151\x6e\163\x74\151\164\x75\x74\x69\157\x6e"];
    $doc->getElementsByTagName("\x42\151\x7a\115\163\x67\x49\x64\x72")->item(0)->nodeValue = $data["\142\151\x7a\137\155\x73\147\x5f\x69\x64\162\62"];
    $doc->getElementsByTagName("\102\x69\x7a\x4d\163\147\111\144\162")->item(1)->nodeValue = $data["\142\x69\x7a\137\x6d\163\147\x5f\x69\x64\x72\x31"];
    $doc->getElementsByTagName("\x4d\163\147\111\x64")->item(0)->nodeValue = $data["\142\151\172\137\155\163\147\137\151\144\x72\62"];
    $doc->getElementsByTagName("\x43\x72\x65\x44\x74")->item(0)->nodeValue = $data["\143\162\x65\x64\x74\x32"];
    $doc->getElementsByTagName("\103\162\145\104\164")->item(1)->nodeValue = $data["\143\x72\x65\x64\x74\61"];
    $doc->getElementsByTagName("\x43\x72\145\104\164\124\x6d")->item(0)->nodeValue = $data["\x63\x72\145\x64\x5f\164\x6d"];
    $doc->getElementsByTagName("\x4f\x72\147\156\x6c\x4d\163\147\111\x64")->item(0)->nodeValue = $data["\155\x65\163\x73\141\147\x65\x5f\151\144"];
    $doc->getElementsByTagName("\x4f\x72\x67\156\x6c\103\162\145\104\x74\x54\155")->item(0)->nodeValue = $data["\x6f\x72\x67\x6e\x6c\137\143\x72\x65\144\137\164\x6d"];
    $doc->getElementsByTagName("\x4f\162\147\156\x6c\x54\170\111\144")->item(0)->nodeValue = $data["\164\x78\137\x69\144"];
    $doc->getElementsByTagName("\x54\x78\x53\x74\x73")->item(0)->nodeValue = $data["\124\170\x53\164\163"];
    if ($data["\x74\170\137\163\164\x61\164\x75\163"] == "\146\141\x6c\x73\x65") {
        $doc->getElementsByTagName("\101\x64\144\164\154\111\x6e\146")->item(0)->nodeValue = $data["\162\145\x61\163\x6f\156"];
    }
    $doc->getElementsByTagName("\111\156\x74\162\102\x6b\x53\164\x74\154\155\101\155\164")->item(0)->nodeValue = $data["\141\x6d\157\x75\x6e\x74"];
    $doc->getElementsByTagName("\x49\x6e\164\x72\x42\x6b\123\164\164\x6c\155\x41\155\x74")->item(0)->setAttribute("\x43\143\171", $data["\x63\x63\171"]);
    $doc->getElementsByTagName("\x49\156\x73\x74\x64\101\x6d\x74")->item(0)->nodeValue = $data["\x61\x6d\x6f\x75\156\x74"];
    $doc->getElementsByTagName("\111\x6e\x73\x74\144\101\155\164")->item(0)->setAttribute("\x43\x63\x79", $data["\x63\x63\171"]);


    //sign the document if sign is true
    if ($sign)
        signXMLDoc($doc);

    $responseXML = $doc->saveXML();

    if ($sign)
        $responseXML = minifySgntr($responseXML);

    return substr($responseXML, strpos($responseXML, "\x3c\x46\x50\x45\x6e\166\x65\154\x6f\x70\x65"));
}

goto qnv9v;
kVRsf:
/**
 * @throws DOMException
 */
function generatePacs028XML($data, $sign = false): string
{
    $doc = new DOMDocument("\x31\56\60", "\125\124\x46\55\70");
    $xmlFile = storage_path("\x61\x70\160\x2f\160\165\142\x6c\151\x63\x2f\151\x73\x6f\x32\60\60\62\x32\x70\141\x63\x73\57\x78\x6d\x6c\x2f\x70\141\x63\163\56\60\62\x38\56\x30\x30\x31\56\60\x35\56\170\155\x6c");
    $doc->load($xmlFile);
    $doc->formatOutput = true;
    $doc->getElementsByTagName("\111\144")->item(0)->nodeValue = $data["\146\x72\157\155\137\151\156\163\164\151\164\165\x74\x69\157\156"];
    $doc->getElementsByTagName("\111\x64")->item(1)->nodeValue = $data["\x74\x6f\x5f\151\x6e\163\x74\151\164\165\x74\151\x6f\156"];
    $doc->getElementsByTagName("\102\151\172\115\x73\147\111\144\x72")->item(0)->nodeValue = $data["\102\x69\172\x4d\x73\x67\111\144\162"];
    $doc->getElementsByTagName("\103\x72\x65\x44\164")->item(0)->nodeValue = $data["\103\x72\x65\104\164"];
    $doc->getElementsByTagName("\115\163\x67\x49\x64")->item(0)->nodeValue = $data["\x4d\x73\x67\111\x64"];
    $doc->getElementsByTagName("\x43\162\x65\x44\x74\124\155")->item(0)->nodeValue = $data["\x43\162\x65\x44\164\124\155"];
    $doc->getElementsByTagName("\x4f\162\x67\x6e\x6c\124\x78\111\x64")->item(0)->nodeValue = $data["\x4f\x72\147\x6e\154\124\x78\x49\x64"];


    //sign the document if sign is true
    if ($sign)
        signXMLDoc($doc);

    $responseXML = $doc->saveXML();

    if ($sign)
        $responseXML = minifySgntr($responseXML);

    return substr($responseXML, strpos($responseXML, "\74\106\x50\x45\156\x76\x65\154\157\x70\x65"));
}

goto A_h7o;
tiMqI:
function errorResponse($error, $remoteAddress): \Illuminate\Http\Response
{
    Log::debug($error . "\40\111\120\72" . $remoteAddress);
    return response("\x3c\x44\157\x63\165\x6d\145\x6e\164\40\170\155\x6c\x6e\x73\75\x22\x75\x72\156\72\151\x73\157\x3a\x73\164\x64\72\x69\x73\x6f\72\62\x30\x30\x32\x32\x3a\164\145\143\150\x3a\170\163\x64\x3a\x61\144\155\x69\56\60\60\x32\56\x30\x30\x31\x2e\x30\x31\42\x3e\x3c\x61\x64\155\151\x2e\60\60\62\56\x30\60\61\x2e\x30\61\x3e\x3c\x52\x73\x6e\76\x3c\122\x6a\x63\x74\147\x50\164\x79\x52\x73\156\76" . $error . "\74\57\122\152\x63\164\147\x50\x74\x79\122\163\156\76\74\x2f\x52\163\156\x3e\74\x2f\141\x64\x6d\151\56\60\60\62\x2e\x30\x30\x31\56\x30\x31\x3e\74\57\x44\x6f\x63\x75\155\x65\x6e\x74\76", 400)->header("\x43\157\156\x74\145\156\x74\55\x54\x79\160\145", "\x74\x65\170\164\57\x78\155\x6c\54\x20\x63\150\x61\x72\x73\145\x74\75\x69\x73\x30\x2d\x38\x38\x35\71\x2d\x31");
}

goto tDZPz;
N0htX:
/**
 * @throws Exception
 */
function processPacs002XML($xml, DOMDocument $doc, string $remoteAddress, $signed = false): \Illuminate\Http\JsonResponse
{
//    if ($signed) {
//        $verificationData = verifyXMLSignature($doc);
//        if (!$verificationData['status'])
//            return error_web_processor($verificationData['message']);
//    }
    $data["\x66\x70\x5f\x69\x6e\x73\x74\x69\x74\x75\164\151\x6f\156"] = $doc->getElementsByTagName("\x49\144")->item(0)->nodeValue;
    $data["\x74\157\x5f\x69\x6e\x73\x74\151\164\x75\164\x69\157\x6e"] = $doc->getElementsByTagName("\111\144")->item(1)->nodeValue;
    $data["\x66\x72\157\x6d\137\151\156\163\164\151\x74\x75\164\x69\157\156"] = $doc->getElementsByTagName("\x49\144")->item(5)->nodeValue;
    $data["\142\x69\172\137\155\x73\147\x5f\x69\144\x72\62"] = $doc->getElementsByTagName("\102\151\x7a\x4d\x73\147\111\x64\162")->item(0)->nodeValue;
    $data["\x62\x69\x7a\x5f\x6d\163\147\x5f\x69\144\162\61"] = $doc->getElementsByTagName("\x42\151\172\115\163\x67\x49\144\x72")->item(1)->nodeValue;
    $data["\x6d\163\x67\137\x69\144"] = $doc->getElementsByTagName("\115\x73\x67\111\x64")->item(0)->nodeValue;
    $data["\x63\162\145\x64\x5f\x74\155"] = $doc->getElementsByTagName("\103\162\145\x44\164\x54\x6d")->item(0)->nodeValue;
    $data["\143\x72\145\144\164"] = $doc->getElementsByTagName("\x43\x72\x65\104\x74")->item(0)->nodeValue;
    $data["\143\162\145\x64\x74\x31"] = $doc->getElementsByTagName("\103\x72\x65\x44\164")->item(1)->nodeValue;
    $data["\x6f\162\x67\156\154\x5f\155\x73\x67\137\151\144"] = $doc->getElementsByTagName("\x4f\162\147\156\154\x4d\163\x67\111\x64")->item(0)->nodeValue;
    $data["\x6f\162\x67\156\154\137\155\163\x67\137\x6e\x6d\137\151\144"] = $doc->getElementsByTagName("\117\x72\147\156\154\115\163\x67\116\x6d\x49\x64")->item(0)->nodeValue;
    $data["\157\162\x67\156\154\137\x63\162\x65\144\137\x74\155"] = $doc->getElementsByTagName("\117\162\147\156\x6c\x43\x72\x65\x44\x74\x54\155")->item(0)->nodeValue;
    $data["\145\x6e\x64\137\164\157\x5f\145\156\x64\137\x69\x64"] = $doc->getElementsByTagName("\117\x72\x67\156\x6c\105\156\x64\124\x6f\105\x6e\x64\x49\x64")->item(0)->nodeValue;
    $data["\164\170\137\x69\144"] = $doc->getElementsByTagName("\117\162\147\x6e\x6c\124\x78\111\x64")->item(0)->nodeValue;
    $data["\x54\170\x53\x74\x73"] = $doc->getElementsByTagName("\124\x78\123\x74\163")->item(0)->nodeValue;
    $prtry = 0;
    $id = 7;
    if ($data["\124\x78\x53\164\163"] == "\x52\112\x43\x54") {
        $data["\160\x72\x74\x72\x79"] = $doc->getElementsByTagName("\120\162\x74\x72\x79")->item($prtry)->nodeValue;
        $prtry = 1;
        $data["\x72\145\141\x73\x6f\156"] = $doc->getElementsByTagName("\101\144\144\164\x6c\111\x6e\146")->item(0)->nodeValue;
    }
    $data["\101\x63\x63\x70\x74\156\143\104\x74\124\155"] = $doc->getElementsByTagName("\101\x63\143\x70\164\x6e\x63\104\x74\124\x6d")->item(0)->nodeValue;
    $data["\141\155\x6f\165\x6e\x74"] = $doc->getElementsByTagName("\111\156\164\162\x42\x6b\123\164\x74\x6c\x6d\x41\155\164")->item(0)->nodeValue;
    $data["\143\x63\171"] = $doc->getElementsByTagName("\111\156\x74\x72\x42\x6b\123\164\164\154\155\x41\x6d\x74")->item(0)->getAttribute("\x43\143\171");
    $data["\x64\142\164\162\x5f\x6e\x6d"] = $doc->getElementsByTagName("\x4e\155")->item(0)->nodeValue;
    $data["\x64\x62\x74\162\137\x61\144\162"] = $doc->getElementsByTagName("\x41\x64\162\114\x69\x6e\145")->item(0)->nodeValue;
    $data["\x64\x62\164\x72\137\x61\143\143\x5f\x69\x64"] = $doc->getElementsByTagName("\x49\x64")->item($id)->nodeValue;
    $data["\x62\x64\164\x72\137\160\162\x74\x72\x79"] = $doc->getElementsByTagName("\x50\x72\x74\162\171")->item($prtry)->nodeValue;
    $data["\x63\144\x74\x72\x5f\x61\143\x63\137\151\144"] = $doc->getElementsByTagName("\x49\144")->item($id + 2)->nodeValue;
    $data["\143\144\164\x72\137\160\x72\164\162\171"] = $doc->getElementsByTagName("\120\162\x74\162\171")->item($prtry + 1)->nodeValue;
    $ips_transaction = IpsTransaction::where("\x74\x78\137\x69\x64", $data["\164\170\x5f\x69\x64"])->first();

    $log_tx_type = "\x50\x41\103\x53\x30\x30\x32";
    $log_msg_id = $data["\x62\x69\x7a\x5f\x6d\x73\x67\x5f\x69\x64\x72\x31"];
    $req = $xml;
    $resp = json_encode($data);

    if ($ips_transaction) {
        $ips_transaction = IpsTransaction::where("\x74\170\137\x69\x64", $data["\x74\x78\x5f\151\x64"])->first() ?? new IpsTransaction();
        $ips_transaction->tx_status = $data["\x54\170\123\164\163"] == "\101\x43\123\103" ? "\x74\x72\165\145" : "\146\x61\x6c\x73\x65";
        $ips_transaction->reason = $data["\162\x65\141\163\x6f\156"] ?? '';
        $ips_transaction->prtry = $data["\160\x72\164\x72\x79"] ?? '';
        $ips_transaction->biz_msg_idr2 = $data["\142\151\x7a\137\x6d\163\x67\x5f\151\144\162\x32"];
        $ips_transaction->credt2 = $data["\143\x72\x65\144\164\x31"];
        $ips_transaction->update();


        if ($ips_transaction->tx_status) {
            $log_msg = "\x54\x72\141\x6e\163\x61\143\164\x69\x6f\x6e\x20\x73\164\x61\x74\x75\x73\x20\x75\x70\x64\x61\x74\x65\x64\x20\x73\165\x63\x63\x65\163\163\x66\165\x6c\154\171";
            sps_api_log($log_tx_type, $log_msg_id, $req, $resp, $log_msg, 400, $remoteAddress, '/incoming');
            return success_web_processor($data, "\x54\162\x61\156\163\x61\143\x74\x69\x6f\156\40\163\164\141\164\x75\x73\40\x75\160\144\x61\164\x65\x64\x20\x73\165\143\x63\x65\163\x73\x66\x75\x6c\154\171");
        } else
            $log_msg = $data["\x54\170\123\164\163"];

    } else
        $log_msg = "\x54\162\141\x6e\163\141\x63\x74\151\157\156\40\144\157\145\163\40\x6e\157\x74\40\x65\x78\151\x73\164\x20\146\157\162\x20\x73\164\141\x74\165\163\40\165\160\x64\141\164\x65";

    sps_api_log($log_tx_type, $log_msg_id, $req, $resp, $log_msg, 400, $remoteAddress, '/incoming');
    return error_web_processor("\x54\162\141\x6e\163\141\x63\x74\151\157\156\40\144\157\145\163\40\x6e\157\x74\40\x65\x78\151\x73\164\x20\146\157\162\x20\x73\164\141\x74\165\163\40\165\160\x64\141\164\x65", 200, $data);
}

goto jiU76;
GTYXK:
function error_web_processor(string $message = null, int $code = 200, $data = array()): JsonResponse
{
    return response()->json(array("\163\x74\141\164\x75\x73" => false, "\155\x65\x73\163\141\x67\145" => $message, "\144\141\x74\141" => $data), $code)->header("\x43\x6f\156\164\145\x6e\x74\55\x54\x79\x70\x65", "\141\x70\160\x6c\x69\143\141\x74\151\x6f\x6e\57\152\x73\x6f\156");
}

goto BjDfb;
DV4Xe:
/**
 * @throws DOMException
 */
function generatePacs002XML($data, $sign = false): string
{
    $doc = new DOMDocument("\x31\x2e\60", "\125\x54\x46\x2d\70");
    $xmlFile = storage_path("\141\x70\160\x2f\160\165\x62\x6c\x69\x63\57\151\x73\x6f\62\60\60\62\62\160\141\143\163\x2f\x78\155\x6c\57\x70\141\143\x73\x2e\x30\x30\x32\x2e\60\60\x31\x2e\61\x32\x2e\170\155\x6c");
    if ($data["\x74\170\137\163\164\141\164\x75\x73"] == "\146\141\x6c\x73\145") {
        $xmlFile = storage_path("\141\160\160\x2f\160\x75\x62\154\151\143\57\151\x73\157\x32\60\60\x32\62\160\x61\143\x73\x2f\170\155\x6c\57\160\x61\x63\x73\56\x30\x30\x32\56\60\x30\61\x2e\x31\x32\x2e\146\x61\x69\x6c\x2e\x78\x6d\154");
    }
    $doc->load($xmlFile);
    $doc->formatOutput = true;
    $doc->getElementsByTagName("\x49\x64")->item(0)->nodeValue = $data["\146\160\137\151\156\163\x74\x69\164\165\x74\151\157\156"];
    $doc->getElementsByTagName("\x49\x64")->item(3)->nodeValue = $data["\x66\160\137\151\156\163\x74\x69\164\x75\164\x69\157\x6e"];
    $doc->getElementsByTagName("\x49\x64")->item(1)->nodeValue = $data["\x66\x72\157\155\137\x69\156\x73\164\151\164\x75\x74\151\x6f\156"];
    $doc->getElementsByTagName("\x49\x64")->item(2)->nodeValue = $data["\146\162\x6f\x6d\x5f\x69\156\x73\x74\x69\x74\x75\x74\x69\157\156"];
    $doc->getElementsByTagName("\111\x64")->item(4)->nodeValue = $data["\x66\162\157\x6d\x5f\x69\x6e\163\x74\151\x74\x75\164\151\157\156"];
    $doc->getElementsByTagName("\111\144")->item(5)->nodeValue = $data["\x74\157\137\x69\156\x73\x74\x69\164\x75\164\151\157\x6e"];
    $doc->getElementsByTagName("\102\x69\172\115\163\147\111\x64\162")->item(0)->nodeValue = $data["\142\151\x7a\137\155\x73\x67\x5f\x69\x64\x72\x32"];
    $doc->getElementsByTagName("\102\151\x7a\x4d\163\147\111\x64\162")->item(1)->nodeValue = $data["\x62\x69\172\137\155\x73\x67\137\151\144\162\x31"];
    $doc->getElementsByTagName("\x4d\163\x67\111\x64")->item(0)->nodeValue = $data["\142\x69\172\137\x6d\163\x67\137\151\144\162\62"];
    $doc->getElementsByTagName("\103\162\145\104\164")->item(0)->nodeValue = $data["\x63\x72\x65\x64\x74\62"];
    $doc->getElementsByTagName("\103\x72\x65\104\164")->item(1)->nodeValue = $data["\143\x72\145\144\164\61"];
    $doc->getElementsByTagName("\x4f\162\147\156\x6c\x4d\x73\147\111\144")->item(0)->nodeValue = $data["\155\145\x73\163\x61\147\x65\x5f\x69\x64"];
    $doc->getElementsByTagName("\x4f\162\x67\x6e\x6c\115\x73\147\x4e\x6d\x49\x64")->item(0)->nodeValue = $data["\115\163\147\x44\x65\x66\111\x64\x72"];
    $doc->getElementsByTagName("\x4f\162\x67\x6e\x6c\x43\162\145\104\164\x54\155")->item(0)->nodeValue = $data["\143\x72\145\144\137\164\x6d"];
    $doc->getElementsByTagName("\117\162\x67\x6e\154\x45\156\144\124\x6f\105\156\x64\x49\144")->item(0)->nodeValue = $data["\145\x6e\x64\x5f\x74\157\x5f\x65\156\144\137\x69\144"];
    $doc->getElementsByTagName("\117\162\x67\156\x6c\x54\170\111\x64")->item(0)->nodeValue = $data["\x74\170\137\x69\x64"];
    $doc->getElementsByTagName("\124\x78\123\x74\x73")->item(0)->nodeValue = $data["\124\x78\123\x74\163"];
    $prtry = 0;
    $id = 7;
    if ($data["\164\170\137\x73\x74\141\x74\x75\163"] == "\x66\x61\154\x73\x65") {
        $doc->getElementsByTagName("\x49\x64")->item($id)->nodeValue = $data["\146\x70\x5f\151\156\163\164\151\164\165\164\x69\x6f\x6e"];
        $id = 9;
        $doc->getElementsByTagName("\120\x72\x74\162\171")->item($prtry)->nodeValue = $data["\x70\162\x74\x72\x79"];
        $prtry = 1;
        $doc->getElementsByTagName("\x41\144\x64\x74\154\x49\156\x66")->item(0)->nodeValue = $data["\162\145\x61\163\x6f\x6e"];
    }
    $doc->getElementsByTagName("\101\143\x63\x70\164\156\143\x44\164\x54\x6d")->item(0)->nodeValue = $data["\x41\x63\143\160\164\156\143\104\x74\124\x6d"];
    $doc->getElementsByTagName("\x49\156\164\x72\102\153\x53\164\x74\x6c\155\x41\x6d\x74")->item(0)->nodeValue = $data["\141\155\157\165\156\164"];
    $doc->getElementsByTagName("\x49\156\x74\x72\x42\153\x53\164\x74\x6c\x6d\101\x6d\164")->item(0)->setAttribute("\103\x63\x79", $data["\143\x63\x79"]);
    $doc->getElementsByTagName("\x49\156\163\x74\144\101\x6d\164")->item(0)->nodeValue = $data["\x61\x6d\157\165\x6e\164"];
    $doc->getElementsByTagName("\111\156\163\164\144\x41\155\164")->item(0)->setAttribute("\103\143\171", $data["\143\x63\171"]);
    $doc->getElementsByTagName("\116\155")->item(0)->nodeValue = $data["\144\x62\164\162\137\x6e\155"];
    $doc->getElementsByTagName("\x41\144\162\x4c\151\156\145")->item(0)->nodeValue = $data["\144\x62\x74\x72\x5f\141\144\162"];
    $doc->getElementsByTagName("\111\x64")->item($id)->nodeValue = $data["\x64\142\x74\162\x5f\141\x63\143\137\151\x64"];
    $doc->getElementsByTagName("\120\162\164\162\171")->item($prtry)->nodeValue = $data["\142\144\164\x72\137\160\x72\x74\x72\171"];
    $doc->getElementsByTagName("\111\144")->item($id + 2)->nodeValue = $data["\143\144\x74\x72\x5f\x61\x63\143\137\151\x64"];
    $doc->getElementsByTagName("\120\162\164\x72\171")->item($prtry + 1)->nodeValue = $data["\143\x64\x74\162\137\x70\162\x74\x72\171"];

    //sign the document if sign is true
    if ($sign)
        signXMLDoc($doc);

    $responseXML = $doc->saveXML();

    if ($sign)
        $responseXML = minifySgntr($responseXML);

    return substr($responseXML, strpos($responseXML, "\74\x46\120\105\x6e\x76\x65\154\157\160\x65"));
}

goto fNMpb;
BjDfb:
function success_web_processor($data, string $message = null, int $code = 200): JsonResponse
{
    return response()->json(array("\x73\x74\141\x74\x75\x73" => true, "\155\145\x73\x73\141\147\145" => $message, "\x64\x61\x74\141" => $data), $code)->header("\x43\x6f\156\x74\145\x6e\164\x2d\124\171\160\145", "\x61\160\160\x6c\x69\x63\x61\x74\x69\x6f\156\x2f\152\x73\x6f\x6e");
}

goto f6lxV;
tDZPz:
function successResponse($data, $remoteAddress): \Illuminate\Http\Response
{
    Log::info("\122\145\x73\160\157\x6e\x73\x65\x3a" . $data);
    return response($data)->header("\x43\x6f\x6e\x74\x65\x6e\164\x2d\x54\x79\160\145", "\164\145\170\x74\x2f\x78\155\x6c\54\40\143\x68\141\162\163\145\x74\x3d\151\x73\x30\55\70\70\65\71\55\x31");
}

goto GTYXK;
qnv9v:
/**
 * @throws Exception
 */
function generateAcmt024XML($data, $sign = false): string
{
    $doc = new DOMDocument("\x31\x2e\x30", "\x55\x54\106\55\70");
    $xmlFile = storage_path("\141\x70\160\57\160\165\x62\x6c\x69\143\57\x69\163\157\62\60\60\x32\x32\160\141\143\163\x2f\170\x6d\154\57\141\143\x6d\164\56\60\62\x34\56\60\x30\61\56\60\63\56\x78\x6d\x6c");
    if ($data["\x76\145\x72\151\x66\151\x65\144"] == "\146\x61\x6c\163\x65") {
        $xmlFile = storage_path("\x61\160\160\x2f\160\165\142\x6c\151\143\x2f\x69\x73\x6f\x32\x30\x30\x32\x32\x70\141\143\x73\57\x78\155\x6c\x2f\x61\143\x6d\164\x2e\x30\62\x34\56\x30\x30\61\56\60\x33\x2e\146\141\x69\x6c\x2e\x78\155\154");
    }
    $doc->load($xmlFile);
    $doc->formatOutput = true;
    $doc->getElementsByTagName("\111\144")->item(0)->nodeValue = $data["\146\162\x6f\x6d\137\x69\156\x73\164\x69\x74\x75\x74\x69\x6f\x6e"];
    $doc->getElementsByTagName("\111\144")->item(1)->nodeValue = $data["\x66\x70\x5f\151\x6e\163\164\151\164\165\164\151\x6f\x6e"];
    $doc->getElementsByTagName("\x42\151\172\115\163\147\111\144\162")->item(0)->nodeValue = $data["\x62\x69\172\x5f\x6d\x73\x67\x5f\x69\144\x72\x31"];
    $doc->getElementsByTagName("\103\x72\x65\x44\164")->item(0)->nodeValue = $data["\x63\162\x65\x64\x74"];
    $doc->getElementsByTagName("\x49\x64")->item(2)->nodeValue = $data["\146\x70\137\x69\156\x73\x74\x69\x74\x75\x74\151\157\x6e"];
    $doc->getElementsByTagName("\111\x64")->item(3)->nodeValue = $data["\146\x72\157\x6d\137\151\x6e\163\164\x69\164\165\x74\x69\157\156"];
    $doc->getElementsByTagName("\102\151\172\115\x73\x67\111\x64\x72")->item(1)->nodeValue = $data["\x62\x69\172\137\155\163\x67\137\151\144\162\x32"];
    $doc->getElementsByTagName("\x43\x72\x65\x44\x74")->item(1)->nodeValue = $data["\x63\x72\145\144\164"];
    $doc->getElementsByTagName("\115\163\x67\x49\144")->item(0)->nodeValue = $data["\x6d\145\163\x73\x61\147\x65\x5f\x69\x64"];
    $doc->getElementsByTagName("\103\162\145\x44\164\124\x6d")->item(0)->nodeValue = $data["\x63\162\x65\x64\x5f\164\x6d"];
    $doc->getElementsByTagName("\x49\144")->item(4)->nodeValue = $data["\164\x6f\x5f\x69\x6e\163\164\151\x74\165\x74\151\x6f\x6e"];
    $doc->getElementsByTagName("\111\144")->item(5)->nodeValue = $data["\146\x72\157\x6d\x5f\151\x6e\x73\x74\151\164\x75\164\x69\157\x6e"];
    $doc->getElementsByTagName("\x4d\163\x67\111\144")->item(1)->nodeValue = $data["\x6f\x72\x67\156\154\137\x6d\x73\147\137\151\x64"];
    $doc->getElementsByTagName("\x43\x72\x65\x44\164\124\155")->item(1)->nodeValue = $data["\143\162\x65\x64\137\x74\155"];
    $doc->getElementsByTagName("\x4f\162\x67\x6e\x6c\111\x64")->item(0)->nodeValue = $data["\x6f\x72\x67\x6e\154\137\x69\x64"];
    $doc->getElementsByTagName("\x56\162\x66\143\x74\156")->item(0)->nodeValue = $data["\x76\x65\x72\x69\146\x69\x65\x64"];
    $doc->getElementsByTagName("\x50\x72\164\162\x79")->item(0)->nodeValue = $data["\x70\x72\x74\162\171"];
    if ($data["\x76\145\162\151\x66\x69\x65\144"] == "\164\x72\165\x65") {
        $doc->getElementsByTagName("\111\144")->item(6)->nodeValue = $data["\157\162\147\x6e\x6c\x70\141\164\x79\x5f\141\x6e\x64\x5f\141\x63\143\164\x5f\x69\144"];
        $doc->getElementsByTagName("\x4e\x6d")->item(0)->nodeValue = $data["\x61\x63\x63\x5f\x6e\x61\155\145"];
        $doc->getElementsByTagName("\x49\144")->item(7)->nodeValue = $data["\141\x63\x63\164\x5f\151\144"];
    }

    //sign the document if sign is true
    if ($sign)
        signXMLDoc($doc);

    $responseXML = $doc->saveXML();

    if ($sign)
        $responseXML = minifySgntr($responseXML);

    return substr($responseXML, strpos($responseXML, "\x3c\x46\120\x45\x6e\166\x65\154\157\x70\x65"));
}

/**
 * @throws DOMException
 * @throws Exception
 */
function signXMLDoc(DOMDocument $doc): void
{
    $certificates = \App\Models\CertificatesConfig::first();
    $private_key = base64_decode($certificates->private_key);
    $chain = base64_decode($certificates->chain);

    try {
        $passphrase = decrypt($certificates->private_key_passphrase);
    } catch (\Exception $e) {
        $passphrase = '';
    }

    $certificate_details = openssl_x509_read($chain);
    $x509Parsed = openssl_x509_parse($certificate_details);
    $cn = $x509Parsed['issuer']['CN'];
//    $subject = $x509Parsed['subject']['CN'];
    $dc1 = $x509Parsed['issuer']['DC'][1];
    $dc2 = $x509Parsed['issuer']['DC'][0];
    $serial_number = $x509Parsed['serialNumberHex'];

    //convert serial number to decimal without power
    $serial_number = gmp_strval(gmp_init($serial_number, 16));

    $issuerName = 'CN=' . $cn . ', DC=' . $dc1 . ',DC=' . $dc2;

    $objDSig = new XMLSecurityDSig();

    $objDSig->setCanonicalMethod(XMLSecurityDSig::EXC_C14N);

    // Create the X509Data element
    $x509Data = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'ds:X509Data');

    // Create the X509IssuerSerial element
    $x509IssuerSerial = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'ds:X509IssuerSerial');
    $x509Data->appendChild($x509IssuerSerial);

    // Create and append the X509IssuerName element
    $x509IssuerName = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'ds:X509IssuerName', $issuerName);
    $x509IssuerSerial->appendChild($x509IssuerName);

    // Create and append the X509SerialNumber element
    $x509SerialNumber = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'ds:X509SerialNumber', $serial_number);
    $x509IssuerSerial->appendChild($x509SerialNumber);

    // Append the KeyInfo to the signature
    $objDSig->appendToKeyInfo($x509Data);

    // Create the 'QualifyingProperties' element with the specified namespace
    $qualifyingPropertiesElement = $objDSig->sigNode->ownerDocument->createElementNS('http://uri.etsi.org/01903/v1.3.2#', 'xades:QualifyingProperties');

    // Create the 'SignedProperties' element with an Id attribute
    $signedPropertiesElement = $objDSig->sigNode->ownerDocument->createElementNS('http://uri.etsi.org/01903/v1.3.2#', 'xades:SignedProperties');

    // Create the 'SignedSignatureProperties' element
    $signedSignaturePropertiesElement = $objDSig->sigNode->ownerDocument->createElementNS('http://uri.etsi.org/01903/v1.3.2#', 'xades:SignedSignatureProperties');

    // Create the 'SigningTime' element with the current date and time
    $signingTimeElement = $objDSig->sigNode->ownerDocument->createElementNS('http://uri.etsi.org/01903/v1.3.2#', 'xades:SigningTime', date('Y-m-d\TH:i:s\Z'));

    // Append the 'SigningTime' element to 'SignedSignatureProperties'
    $signedSignaturePropertiesElement->appendChild($signingTimeElement);

    // Append the 'SignedSignatureProperties' element to 'SignedProperties'
    $signedPropertiesElement->appendChild($signedSignaturePropertiesElement);

    // Append the 'SignedProperties' element to 'QualifyingProperties'
    $qualifyingPropertiesElement->appendChild($signedPropertiesElement);

    // Append the 'Object' element to the Signature
    $objDSig->addObject($qualifyingPropertiesElement);

    //crteate node Sgntr inside AppHdr
    $doc->getElementsByTagName('AppHdr')->item(0)->appendChild($doc->createElementNS('urn:iso:std:iso:20022:tech:xsd:head.001.001.03', 'document:Sgntr'));

    // Generate a unique ID with an underscore prefix
    $refId1 = generateRefId();
    $refId2 = generateRefId();
    $refId3 = generateRefId();
    $references = [

        [
            'node' => $objDSig->sigNode->ownerDocument->getElementsByTagName('KeyInfo')->item(0),
            'transforms' => [XMLSecurityDSig::EXC_C14N],
            'options' => ['id_name' => 'Id', 'overwrite' => true, 'uri_id' => $refId1, 'force_uri' => true]
        ],
        [
            'node' => $objDSig->sigNode->ownerDocument->getElementsByTagName('SignedProperties')->item(0),
            'transforms' => [XMLSecurityDSig::EXC_C14N],
            'options' => ['id_name' => 'Id', 'overwrite' => false, 'uri_id' => $refId2 . '-signedprops', 'force_uri' => true, 'type' => 'http://uri.etsi.org/01903/v1.3.2#SignedProperties']
        ],
        [
            //should take node document:Document from the doc
            'node' => $doc->getElementsByTagName('Document')->item(0),
            'transforms' => [XMLSecurityDSig::EXC_C14N],
            'options' => ['force_uri' => false]
        ]
    ];

    // Add multiple references to the XML document
    foreach ($references as $ref) {
        $objDSig->addReference(
            $ref['node'],
            XMLSecurityDSig::SHA256,
            $ref['transforms'],
            $ref['options']
        );
    }

    // Create a new (private) Security key
    $objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA256, array('type' => 'private'));
    $objKey->passphrase = $passphrase;
    $objKey->loadKey($private_key);
    $objDSig->sign($objKey, $doc->getElementsByTagName('Sgntr')->item(0));
}

function generateRefId($prefix = '_')
{
    $uuid = md5(uniqid(mt_rand(), true));
    $guid = $prefix . substr($uuid, 0, 8) . "-" .
        substr($uuid, 8, 4) . "-" .
        substr($uuid, 12, 4) . "-" .
        substr($uuid, 16, 4) . "-" .
        substr($uuid, 20, 12);
    return $guid;
}

//function signXMLDoc(DOMDocument $doc): void
//{
//    $private_key = storage_path('app/public/keys/private_key.pem');
//    $chain = storage_path('app/public/keys/public_certificate.pem');
//
//    //get certificate details from chain
//    $certificate_details = openssl_x509_read(file_get_contents($chain));
//
//    //get certificate issuer name and serial number
//    $x509Parsed = openssl_x509_parse($certificate_details);
//    $cn = $x509Parsed['issuer']['CN'];
////    $subject = $x509Parsed['subject']['CN'];
//    $dc = $x509Parsed['issuer']['DC'][1] . '.' . $x509Parsed['issuer']['DC'][0];
//    $serial_number = $x509Parsed['serialNumberHex'];
//
//    $issuerName = 'CN=' . $cn . ', DC=' . $dc;
//
//    $objDSig = new XMLSecurityDSig();
//
//    $objDSig->setCanonicalMethod(XMLSecurityDSig::EXC_C14N);
//
//    // Create the X509Data element
//    $x509Data = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'ds:X509Data');
//
//    // Create the X509IssuerSerial element
//    $x509IssuerSerial = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'ds:X509IssuerSerial');
//    $x509Data->appendChild($x509IssuerSerial);
//
//    // Create and append the X509IssuerName element
//    $x509IssuerName = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'ds:X509IssuerName', $issuerName);
//    $x509IssuerSerial->appendChild($x509IssuerName);
//
//    // Create and append the X509SerialNumber element
//    $x509SerialNumber = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'ds:X509SerialNumber', $serial_number);
//    $x509IssuerSerial->appendChild($x509SerialNumber);
//
//    // Append the KeyInfo to the signature
//    $objDSig->appendToKeyInfo($x509Data);
//
//    // Create a new (private) Security key
//    $objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type' => 'private'));
//    /*
//    If key has a passphrase, set it using
//    $objKey->passphrase = '<passphrase>';
//    */
//    // Load the private key
//    $objKey->passphrase = '2030';
//    $objKey->loadKey($private_key, TRUE);
//    //crteate node Sgntr inside AppHdr
//    $doc->getElementsByTagName('AppHdr')->item(0)->appendChild($doc->createElementNS('urn:iso:std:iso:20022:tech:xsd:head.001.001.03', 'document:Sgntr'));
//
//    $objDSig->sign($objKey, $doc->getElementsByTagName('Sgntr')->item(0));
//
//    //object data
//    $objQualifyingProperties = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'xades:QualifyingProperties');
//
//    $objSignedProperties = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'xades:SignedProperties');
//    $objQualifyingProperties->appendChild($objSignedProperties);
//
//    $objSignedSignatureProperties = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'xades:SignedSignatureProperties');
//    $objSignedProperties->appendChild($objSignedSignatureProperties);
//
//    //Signing time format is 2024-02-23T08:21:48Z
//    $objSigningTime = $objDSig->sigNode->ownerDocument->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'xades:SigningTime', date('Y-m-d\TH:i:s\Z'));
//    $objSignedSignatureProperties->appendChild($objSigningTime);
//
//    $objDSig->addObject($objQualifyingProperties);
//
//    $references = [
//        [
//            'node' => $doc->documentElement,
//            'hashAlgo' => XMLSecurityDSig::SHA256,
//            'transforms' => ['http://www.w3.org/2001/10/xml-exc-c14n#']
//        ],
//        [
//            'node' => $doc->getElementsByTagName('SignedProperties')->item(0),
//            'hashAlgo' => XMLSecurityDSig::SHA256,
//            'transforms' => ['http://uri.etsi.org/01903/v1.3.2#']
//        ],
//        [
//            'node' => $doc->getElementsByTagName('KeyInfo')->item(0),
//            'hashAlgo' => XMLSecurityDSig::SHA256,
//            'transforms' => ['http://www.w3.org/2001/10/xml-exc-c14n#']
//        ]
//    ];
//
//// Add multiple references to the XML document
//    foreach ($references as $ref) {
//        $objDSig->addReference(
//            $ref['node'],
//            $ref['hashAlgo'],
//            $ref['transforms'],
//            array('force_uri' => true, 'force_type' => true)
//        );
//    }
//}

function minifySgntr(string $xml): string
{
    //remove id attribute from <document:Document Id="pfxec9144ae-b31f-b04a-5da0-804c1b6c7db5">
//    $xml = preg_replace('/<document:Document Id="[^"]*"/', '<document:Document', $xml);

    //replace the first <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#"> with <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
//    return preg_replace('/<ds:Signature xmlns:ds="http:\/\/www.w3.org\/2000\/09\/xmldsig#" xmlns:xades="http:\/\/uri.etsi.org\/01903\/v1.3.2#">/', '<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">', $xml);
    return $xml;
}

/**
 * @throws Exception
 */
function verifyXMLSignature(DOMDocument $doc)
{
    $objXMLSecDSig = new XMLSecurityDSig();

    $objDSig = $objXMLSecDSig->locateSignature($doc);
    if (!$objDSig) {
        Log::debug('Signature not found');
        return ['status' => false, 'message' => 'Signature not found'];
    }
    $objXMLSecDSig->canonicalizeSignedInfo();

//    $retVal = $objXMLSecDSig->validateReference();
//    if (!$retVal) {
//        Log::debug('Reference validation failed');
//        return ['status' => false, 'message' => 'Reference validation failed'];
//    }

    $chain = storage_path('app/public/keys/public_certificate.pem');
    $objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type' => 'public'));
    $objKey->loadKey($chain, TRUE);

    // Locate the KeyInfo node and extract the public key
//    $objKey = $objXMLSecDSig->locateKey();
//    if (empty($objKey)) {
//        Log::debug('Key Info not found');
//        return ['status' => false, 'message' => 'Key Info not found'];
//    }

//    $key = NULL;
//
//    $objKeyInfo = XMLSecEnc::staticLocateKeyInfo($objKey, $objDSig);
//
//    if (!$objKeyInfo->key && empty($key)) {
//        $chain = storage_path('app/public/keys/public_certificate.pem');
//        $objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type' => 'public'));
//        $objKey->loadKey($chain, TRUE);
//    }


    if (!$objXMLSecDSig->verify($objKey)) {
        Log::debug('Signature verification failed');
        return ['status' => false, 'message' => 'Signature verification failed'];
    }

    Log::info('Signature verification successful');

    return ['status' => true, 'message' => 'Signature verification successful'];
}

function calculate_crc16($data): string
{
    $crc = 0xFFFF;
    for ($i = 0; $i < strlen($data); $i++) {
        $x = (($crc >> 8) ^ ord($data[$i])) & 0xFF;
        $x ^= $x >> 4;
        $crc = (($crc << 8) ^ ($x << 12) ^ ($x << 5) ^ $x) & 0xFFFF;
    }
    //prepend 0 if CRC is less than 4 chars
    $crc = strtoupper(dechex($crc));

    return str_pad($crc, 4, "0", STR_PAD_LEFT);
}

goto kVRsf;
L7ihE:
function verifyHmacSignature($request, $credentials, $shared_secret): bool
{
    try {
        $signature = $request->header("\163\151\x67\156\141\x74\x75\x72\x65");
        if (!$signature) {
            return false;
        }
        //    $credentials .= $shared_secret;
//    $client_http_date = $request->header('http-date');
//    if (!$client_http_date) {
//        return false;
//    }
//    $credentials .= $client_http_date;
//    return hash('sha256', $credentials) == $signature;
        return hash_equals(hash_hmac("\163\x68\x61\x32\65\66", $credentials, $shared_secret), $signature);
    } catch (\Exception $e) {
        return false;
    }
}

function generateHmacSignature($credentials, $shared_secret): string
{
    $hmac = hash_hmac('sha256', $credentials, $shared_secret);
    $signature = hex2bin($hmac);
    return base64_encode($signature);
}

Function Calls

None

Variables

None

Stats

MD5 0c11528e1fd94e7d086350dba23aeb00
Eval Count 0
Decode Time 135 ms