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 |
Stats
MD5 | 0c11528e1fd94e7d086350dba23aeb00 |
Eval Count | 0 |
Decode Time | 135 ms |