8 define (
"PACKET_FULL", 1);
9 define (
"PACKET_PER_ACCOUNT", 2);
11 define (
"PACKET_REQUEST_VERIFY_PIN",
"PIN");
12 define (
"PACKET_REQUEST_INQUIRY",
"INQ");
13 define (
"PACKET_REQUEST_BAL",
"BAL");
14 define (
"PACKET_REQUEST_HIS",
"HISTORY");
15 define (
"PACKET_REQUEST_XAC",
"XAC");
16 define (
"PACKET_REQUEST_TRN",
"TRN");
17 define (
"PACKET_REQUEST_NEWAPP",
"NEWAPP");
18 define (
"PACKET_REQUEST_INQAPP",
"INQAPP");
19 define (
"PACKET_REQUEST_MIR",
"MIR");
20 define (
"PACKET_REQUEST_MA",
"MA");
21 define (
"PACKET_REQUEST_ES",
"ES");
22 define (
"PACKET_REQUEST_ES_TOC",
"TOC");
25 define (
"PACKET_DEFAULT_CUTOFF_DAYS", 366);
26 define (
"PACKET_DEFAULT_INQ_CUTOFF",
'20000101');
27 define (
"PACKET_DEFAULT_NEW_CUTOFF",
'20060101');
28 define (
"PACKET_MIN_FETCH_DAYS", 7);
29 define (
"PACKET_SECONDS_DAY", 86400);
33 define (
"CURL_CONN_TO_CORE_DEFAULT_RETRIES", 2);
35 define (
"CURL_CONN_TO_CORE_RETRY_DELAY", 2);
38 require_once (dirname(__FILE__) .
'/../../shared/library/xml_processing.i');
170 function GetMemberInfo($pHbEnv, $pMbrData) {
172 $retVal = Array(
"code" =>
'000',
"data" => Array());
179 $cuConnResp = _ReturnCUSettings($pHbEnv);
180 if ($cuConnResp[
'code'] !=
'000') {
181 throw new Exception (
"Unable to Load CU Settings");
183 $cuConnSet = HCU_array_key_value(
'data', $cuConnResp);
186 $mbrRequest = HCU_array_key_value(
'member', $pMbrData);
188 _ApplPrintLogger($pHbEnv, $cuConnSet,
"\n** Get Member Info **\n");
195 $mirResp = _RetrieveMemberInfo($pHbEnv, $cuConnSet, HCU_array_key_value(
'member', $pMbrData));
197 if ($mirResp[
'code'] !=
'000') {
198 throw new Exception (
"Unable to retrieve MIR Packet - " . $mirResp[
'error']);
201 $retVal[
'code'] =
'000';
202 $retVal[
'data'] = $mirResp[
'data'];
204 }
catch (Exception $e) {
205 _ApplPrintLogger($pHbEnv, $cuConnSet,
"\n** Mbr Info Error Caught ** \n" .
"({$e->getCode()})" . $e->getMessage() );
206 $retVal[
'code'] =
'999';
207 $retVal[
'error'] =
"Unable to retrieve data";
237 function GetMemberES($pHbEnv, $pMbrData) {
238 $retVal = Array(
"code" =>
'000',
"data" => Array());
245 $cuConnResp = _ReturnCUSettings($pHbEnv);
246 if ($cuConnResp[
'code'] !=
'000') {
247 throw new Exception (
"Unable to Load CU Settings");
249 $cuConnSet = HCU_array_key_value(
'data', $cuConnResp);
252 $mbrRequest = HCU_array_key_value(
'member', $pMbrData);
254 _ApplPrintLogger($pHbEnv, $cuConnSet,
"\n** Get Estatement **\n");
260 if (HCU_array_key_value(
'statement-id', $pMbrData) !=
'') {
261 $esType = PACKET_REQUEST_ES;
262 $eStatementId = HCU_array_key_value(
'statement-id', $pMbrData);
264 $esType = PACKET_REQUEST_ES_TOC;
268 $esResp = _RetrieveMemberES($pHbEnv, $cuConnSet, HCU_array_key_value(
'member', $pMbrData), HCU_array_key_value(
'email', $pMbrData), $esType, $eStatementId);
270 if ($esResp[
'code'] !=
'000') {
271 $retVal[
'code'] =
'999';
272 $retVal[
'error'] = $esResp[
'error'];
274 $retVal[
'code'] =
'000';
275 $retVal[
'data'] = $esResp[
'data'];
277 }
catch (Exception $e) {
278 _ApplPrintLogger($pHbEnv, $cuConnSet,
"\n** ES Request Error Caught ** \n" .
"({$e->getCode()})" . $e->getMessage() );
279 $retVal[
'code'] =
'999';
280 $retVal[
'error'] =
"Unable to retrieve data";
308 function LoadCrossAcctData($pHbEnv, $pUserId, $pUserData) {
309 $retVal = Array(
"code" =>
"000",
"data" => Array());
311 $mbrReqType = PACKET_REQUEST_XAC;
314 $pktDateStamp = date(
"U");
322 throw new Exception(
"Already requested this session", 50211);
329 $cuConnResp = _ReturnCUSettings($pHbEnv);
330 if ($cuConnResp[
'code'] !=
'000') {
331 throw new Exception (
"Unable to Load CU Settings");
333 $cuConnSet = HCU_array_key_value(
'data', $cuConnResp);
335 _ApplPrintLogger($pHbEnv, $cuConnSet,
"\n** Load User Data **\n");
347 $showAutoAddOnly = (($pHbEnv[
'flagset3'] & GetFlagsetValue(
"CU3_CREATE_ACCESS_CONTROL_FROM_XAC")) > 0);
349 $mbrAcctList = _ReturnMemberAcctList($pHbEnv, $pUserId, $showAutoAddOnly);
350 if ($mbrAcctList[
'code'] !=
'000') {
351 throw new Exception (
"No Accounts Found");
361 foreach ($mbrAcctList[
'data'] as $idx => $subAcctItem) {
365 $reqMemberAcctNbr = $subAcctItem[
'accountnumber'];
372 $paramEmail = HCU_array_key_value(
'email', $pUserData);
373 $mbrEmail = (($paramEmail ==
'' || $paramEmail ==
'no@email.com') ?
"NULL" : trim($paramEmail));
385 "member" => $reqMemberAcctNbr,
389 _ApplPrintLogger($pHbEnv, $cuConnSet, print_r($dataArray,
true));
393 $acctResp = _RetrieveMemberCrossAccount($pHbEnv, $cuConnSet, $dataArray);
395 if ($acctResp[
'code'] !=
'000') {
396 if (in_array($acctResp[
'code'], array(
'001',
'002',
'003'))) {
397 throw new Exception ($acctResp[
'error'], 50102);
399 throw new Exception (
"Unable to retrieve list of accounts - " . $acctResp[
'error']);
401 $xmlPacket = $acctResp[
'data'][
'packet-xml'];
408 'type' => PACKET_REQUEST_XAC,
409 'user_id' => $pUserId,
410 'member' => $reqMemberAcctNbr
412 $dataResp = _SaveMemberXAData($pHbEnv, $cuConnSet, $mbrData, $xmlPacket);
413 if ($dataResp[
'code'] !==
'000') {
415 _ApplPrintLogger($pHbEnv, $cuConnSet,
" *** **** ***** ERROR UPDATING TABLES ");
416 throw new Exception (
"Update Failure", 999);
418 if (($pHbEnv[
'flagset3'] & GetFlagsetValue(
"CU3_CREATE_ACCESS_CONTROL_FROM_XAC")) != 0 && intval(HCU_array_key_value(
'memberacct-added', $dataResp[
'data'])) > 0) {
428 $localDataResp = LoadUserData($pHbEnv, $pUserId, $userData);
434 $retVal = Array(
'code' =>
'000',
'data' => array(
'requestDate' => $pktDateStamp,
'requestDesc' =>
'Success'));
435 }
catch (Exception $e) {
436 _ApplPrintLogger($pHbEnv, $cuConnSet,
"\n Load Cross Account Data -- Catch Error :: ({$e->getCode()}) {$e->getMessage()}");
438 if ($e->getCode() == 50211) {
441 $retVal = Array(
'code' =>
'900',
'data' => array(
'requestDate' => $e->getMessage(),
'requestDesc' =>
'Too soon to ask again'));
444 $retVal = Array(
'code' =>
'999',
'data' => array(
'requestDate' => 1,
'requestDesc' =>
'Unable to retrieve data'));
517 function PostTransactionRequest($pHbEnv, $pData, $pSendAsPost=
false) {
518 $retVal = array(
"code" =>
"000",
"data" => array());
521 $origPktStatCode =
"";
522 $origPktStatDesc =
"";
523 $origPktStatExtra =
"";
528 "tran_code" =>
"NULL",
544 $cuConnResp = _ReturnCUSettings($pHbEnv);
545 if ($cuConnResp[
'code'] !=
'000') {
546 throw new Exception (
"Unable to Load CU Settings");
548 $cuConnSet = HCU_array_key_value(
'data', $cuConnResp);
550 _ApplPrintLogger($pHbEnv, $cuConnSet,
"\n** Make Transaction Request **\n");
553 if (!is_array($pData)) {
554 throw new Exception (
"Invalid data");
560 $setTransValues = array_intersect_key($pData, $transTempl);
562 $setTransValues = array_merge($setTransValues, array_diff_key($transTempl, $setTransValues));
569 $packetQuery = http_build_query($setTransValues);
573 $sendPost = $packetQuery;
576 $sendGet = $packetQuery;
581 $sendDataResp = _SendDataRequest($pHbEnv, $cuConnSet, $sendGet, $sendPost);
582 $cucorereqAfter = HCU_array_key_value(
"cucorereq_after", $sendDataResp);
586 if ($sendDataResp[
'code'] ==
'999') {
589 throw new Exception (
'Data Request Error');
595 "type" => HCU_array_key_value(
"pkt-type", $pData),
596 "member" => (HCU_array_key_exists(
"tauth", $pData) ? HCU_array_key_value(
"tauth", $pData) : HCU_array_key_value(
"member", $pData))
599 $packetContent = HCU_array_key_value(
'packet', $sendDataResp);
600 $packetsize = strlen($packetContent);
601 $xmlParse = _ParsePacketData($pHbEnv, $cuConnSet, $mbrData, $packetContent);
603 if ($xmlParse[
'code'] !=
'000') {
605 throw new Exception (
"General Error");
621 $origPktStatCode = HCU_array_key_value(
"pktStatCode", $xmlParse[
'data'][
'packet-status']);
622 $origPktStatDesc = HCU_array_key_value(
"pktStatDesc", $xmlParse[
'data'][
'packet-status']);
623 $origPktStatExtra = HCU_array_key_value(
"pktStatExtra", $xmlParse[
'data'][
'packet-status']);
625 $retVal[
'data'][
'seg1'] = HCU_array_key_value(
"pktStatMember", $xmlParse[
'data'][
'packet-status']);
626 $retVal[
'data'][
'code'] = $origPktStatCode;
627 $retVal[
'data'][
'desc'] = $origPktStatDesc;
629 _ApplPrintLogger($pHbEnv, $cuConnSet,
"\n* Packet Resp Status *\n" . print_r($xmlParse[
'data'][
'packet-status'],
true) .
"\n");
632 }
catch (Exception $e) {
634 $retVal[
'data'] = Array();
635 $retVal[
'code'] =
'999';
636 $retVal[
'error'] = ($e->getMessage() !=
'' ? $e->getMessage() :
"General Error");
637 $cucorereqAfter[
"errors"][] = $e->getMessage();
639 _UpdateRequestStatus($pHbEnv, $cuConnSet, $cucorereqAfter, $packetsize, $origPktStatCode, $origPktStatDesc, $origPktStatExtra);
664 function FindMemberAccounts($pHbEnv, $pMbrData) {
665 $retVal = array(
"code" =>
"000",
"data" => array());
670 $subAcctListAry = Array(
"deposit" => Array(),
"loan" => Array());
671 $balTemplates = GetBalanceTemplates();
679 $cuConnResp = _ReturnCUSettings($pHbEnv);
680 if ($cuConnResp[
'code'] !=
'000') {
681 throw new Exception (
"Unable to Load CU Settings");
683 $cuConnSet = HCU_array_key_value(
'data', $cuConnResp);
685 _ApplPrintLogger($pHbEnv, $cuConnSet,
"\n** Find Member Accounts **\n");
687 if (($pHbEnv[
"flagset3"] & GetFlagsetValue(
"CU3_MIR_PACKET_NOT_SUPPORTED")) === 0) {
692 $mirResp = _RetrieveMemberInfo($pHbEnv, $cuConnSet, HCU_array_key_value(
'member', $pMbrData));
694 if ($mirResp[
'code'] !=
'000') {
695 if ($mirResp[
'code'] ==
'001') {
696 throw new Exception ($mirResp[
'error'], 50101);
698 throw new Exception (
"Unable to retrieve MIR Packet - " . $mirResp[
'error']);
702 $retVal[
'data'][
'mir'] = $mirResp[
'data'];
716 $mbrLastLogin =
'NULL';
722 $packetCutoff = date(
'Ymd', time() + 86400);
724 $lastPktStamp =
'NULL';
729 "member" => HCU_array_key_value(
'member', $pMbrData),
730 "if_mod_since" => $lastPktStamp,
732 "cutoff" => $packetCutoff
738 $acctResp = _RetrieveMemberInquiry($pHbEnv, $cuConnSet, $dataArray);
740 if ($acctResp[
'code'] !=
'000') {
741 if (in_array($acctResp[
'code'], array(
'001',
'002',
'003'))) {
742 throw new Exception ($acctResp[
'error'], 50102);
744 throw new Exception (
"Unable to retrieve list of accounts - " . $acctResp[
'error']);
750 foreach ($balTemplates as $tmplKey => $tmplValue) {
752 if (HCU_array_key_exists($tmplValue[
'inquiry-key'], $acctResp[
'data'][
'packet-data'])) {
754 $inqAcctList = $acctResp[
'data'][
'packet-data'][$tmplValue[
'inquiry-key']];
755 if (is_array($inqAcctList)) {
756 foreach ($inqAcctList as $listIdx => $listArray) {
757 $subAcctListAry[$tmplKey][] = array_intersect_key($listArray, array_flip($tmplValue[
'field-list']));
769 if (($pHbEnv[
'flagset3'] & GetFlagsetValue(
'CU3_API_XAC'))) {
772 "member" => HCU_array_key_value(
'member', $pMbrData),
780 $acctResp = _RetrieveMemberCrossAccount($pHbEnv, $cuConnSet, $dataArray);
782 if ($acctResp[
'code'] !=
'000') {
783 if (in_array($acctResp[
'code'], array(
'001',
'002',
'003'))) {
784 throw new Exception ($acctResp[
'error'], 50102);
786 throw new Exception (
"Unable to retrieve list of accounts - " . $acctResp[
'error']);
790 $crossAcctFieldList = Array(
801 if (HCU_array_key_exists(
"crossaccounts", $acctResp[
'data'][
'packet-data'])) {
803 $inqAcctList = $acctResp[
'data'][
'packet-data'][
'crossaccounts'];
804 if (is_array($inqAcctList)) {
805 foreach ($inqAcctList as $listIdx => $listArray) {
806 $subAcctListAry[
'xa'][] = array_intersect_key($listArray, array_flip($crossAcctFieldList));
816 $retVal[
'data'][
'accounts'] = $subAcctListAry;
818 }
catch (Exception $e) {
820 $retVal[
'data'] = Array();
821 switch ($e->getCode()) {
824 $retVal[
'code'] =
'001';
826 $retVal[
'error'] =
"Invalid Account Number";
829 $retVal[
'code'] =
'999';
830 $retVal[
'error'] =
"Unable to retrieve data";
871 function VerifyMemberPin($pHbEnv, $pMbrData) {
872 $retVal = array(
"code" =>
"000",
"data" => array());
874 $subAcctListAry = Array(
"deposit" => Array(),
"loan" => Array());
875 $balTemplates = GetBalanceTemplates();
882 $cuConnResp = _ReturnCUSettings($pHbEnv);
883 if ($cuConnResp[
'code'] !=
'000') {
884 throw new Exception (
"Unable to Load CU Settings");
886 $cuConnSet = HCU_array_key_value(
'data', $cuConnResp);
888 _ApplPrintLogger($pHbEnv, $cuConnSet,
"\n** Verify Member PIN **\n");
904 $mbrLastLogin =
'NULL';
910 $packetCutoff = date(
'Ymd', time() + 86400);
917 "member" => HCU_array_key_value(
'member', $pMbrData),
918 "if_mod_since" => $lastPktStamp,
920 "cutoff" => $packetCutoff,
921 "pass" => HCU_array_key_value(
'pin', $pMbrData)
927 $acctResp = _RetrieveMemberInquiry($pHbEnv, $cuConnSet, $dataArray);
929 if ($acctResp[
'code'] !=
'000') {
933 if (in_array($acctResp[
'code'], array(
'001',
'002',
'003'))) {
934 throw new Exception ($acctResp[
'code'], 50102);
936 throw new Exception (
"Unable to retrieve list of accounts - " . $acctResp[
'error']);
942 foreach ($balTemplates as $tmplKey => $tmplValue) {
944 if (HCU_array_key_exists($tmplValue[
'inquiry-key'], $acctResp[
'data'][
'packet-data'])) {
946 $inqAcctList = $acctResp[
'data'][
'packet-data'][$tmplValue[
'inquiry-key']];
947 if (is_array($inqAcctList)) {
948 foreach ($inqAcctList as $listIdx => $listArray) {
949 $subAcctListAry[$tmplKey][] = array_intersect_key($listArray, array_flip($tmplValue[
'field-list']));
962 if (($pHbEnv[
'flagset3'] & GetFlagsetValue(
'CU3_API_XAC'))) {
965 "member" => HCU_array_key_value(
'member', $pMbrData),
973 $acctResp = _RetrieveMemberCrossAccount($pHbEnv, $cuConnSet, $dataArray);
975 if ($acctResp[
'code'] !=
'000') {
976 if (in_array($acctResp[
'code'], array(
'001',
'002',
'003'))) {
977 throw new Exception ($acctResp[
'error'], 50102);
979 throw new Exception (
"Unable to retrieve list of accounts - " . $acctResp[
'error']);
983 $crossAcctFieldList = Array(
994 if (HCU_array_key_exists(
"crossaccounts", $acctResp[
'data'][
'packet-data'])) {
996 $inqAcctList = $acctResp[
'data'][
'packet-data'][
'crossaccounts'];
997 if (is_array($inqAcctList)) {
998 foreach ($inqAcctList as $listIdx => $listArray) {
999 $subAcctListAry[
'xa'][] = array_intersect_key($listArray, array_flip($crossAcctFieldList));
1009 $retVal[
'data'][
'accounts'] = $subAcctListAry;
1013 }
catch (Exception $e) {
1015 switch ($e->getCode()) {
1018 $retVal[
'code'] = $e->getMessage();
1019 switch ($e->getMessage()) {
1021 $retVal[
'error'] =
"Invalid Account Number";
1024 $retVal[
'error'] =
"Invalid Password";
1027 $retVal[
'error'] =
"Closed Account";
1032 $retVal[
'code'] =
'999';
1033 $retVal[
'error'] =
"Unable to retrieve data";
1078 function FetchMemberDataTRON( $pHbEnv, $pMbrData ) {
1081 $mbrReqType = PACKET_REQUEST_INQUIRY;
1086 $cuConnResp = _ReturnCUSettings( $pHbEnv );
1087 if ( $cuConnResp[
'code'] !=
'000' ) {
1088 throw new Exception (
"Unable to Load CU Settings");
1090 $cuConnSet = HCU_array_key_value(
'data', $cuConnResp );
1092 $Cu = $pHbEnv[
"Cu"];
1094 _ApplPrintLogger( $pHbEnv, $cuConnSet,
"\n** Load User Data **\n" );
1096 $reqMemberAcctNbr = HCU_array_key_value(
'account', $pMbrData );
1099 $paramStamp = HCU_array_key_value(
'packetstamp', $pMbrData );
1100 $dataStamp = (($paramStamp ==
'') ? date(
"Ymd" ) : trim($paramStamp));
1103 $paramCutoff = HCU_array_key_value(
'cutoff', $pMbrData );
1104 $dataCutoff = (($paramCutoff ==
'') ? date(
"Ymd" ) : trim($paramCutoff));
1108 $paramEmail = HCU_array_key_value(
'email', $pMbrData );
1109 $dataEmail = (($paramEmail ==
'') ?
"NULL" : trim($paramEmail));
1115 "member" => $reqMemberAcctNbr,
1117 "if_mod_since" => $dataStamp,
1118 "ref3" => $dataEmail,
1119 "cutoff" => $dataCutoff
1121 _ApplPrintLogger($pHbEnv, $cuConnSet, print_r($dataArray,
true));
1125 $acctResp = _RetrieveMemberInquiry( $pHbEnv, $cuConnSet, $dataArray );
1128 $packetStatus = HCU_array_key_value(
"packet-status", $acctResp[
'data']);
1129 $statusCode = HCU_array_key_value(
'pktStatCode', $packetStatus);
1131 if ($acctResp[
'code'] !=
'000') {
1132 if (in_array($acctResp[
'code'], array(
'001',
'002',
'003'))) {
1133 throw new Exception ( $acctResp[
'error'], $acctResp[
'code'] );
1135 throw new Exception (
"Unable to retrieve list of accounts - " . $acctResp[
'error']);
1139 $xmlPacket = $acctResp[
'data'][
'packet-xml'];
1142 if ( !is_a($xmlPacket,
"SimpleXMLElement") ) {
1144 throw new Exception (
"Data Packet Error");
1148 $retVal = array(
'code' =>
'000',
"status" => $statusCode,
'data' => array(
'requestData' => $xmlPacket,
'requestDesc' =>
'Success'));
1149 }
catch (Exception $e) {
1150 _ApplPrintLogger($pHbEnv, $cuConnSet,
"\n Load User Data -- Catch Error :: ({$e->getCode()}) {$e->getMessage()}");
1152 $errorCodeTest = $e->getCode();
1153 $errorMessage = $e->getMessage();
1155 if ( $errorCodeTest > 0 ) {
1156 $errorCode = ( strlen( $errorCodeTest ) > 3 ) ? $errorCodeTest : substr(
"000" . $errorCodeTest, -3 );
1161 $retVal = array(
'code' => $errorCode,
"status" => $statusCode,
'data' => array(
'requestData' =>
"",
'requestDesc' => $errorMessage ) );
1176 function IncludeApplPlugin($pHbEnv) {
1184 require_once (dirname(__FILE__) .
'/../../shared/library/sAPIAppl.std.i');
1187 require_once (dirname(__FILE__) .
'/../../shared/library/sAPIAppl.plus.i');
1214 function _ProcessAPIResponse($pDataPacket) {
1216 $retVal = array(
"code"=>
"000",
"data"=>Array());
1217 $isXmlParseError = False;
1220 if ($pDataPacket !=
'') {
1224 libxml_use_internal_errors(
true);
1227 $xml = simplexml_load_string($pDataPacket);
1230 if ($xml ===
false) {
1231 $libXmlErrors = libxml_get_errors();
1233 $isXmlParseError) = modifyXmlErrorsForLogging($libXmlErrors, $pDataPacket);
1235 $xmlErrors = HCU_JsonEncode($libXmlErrors);
1236 throw new Exception ($xmlErrors, -712);
1239 $retVal[
'homecu-packet'] = $xml;
1242 throw new Exception(
'Empty Data Packet', -710);
1245 }
catch (Exception $e ) {
1249 $retVal[
'code'] =
'999';
1250 $retVal[
'error'] =
"Unable to retrieve data " . $e->getMessage();
1253 return array($retVal, $isXmlParseError);
1276 function _ParsePacketData($pHbEnv, $pConnSet, $pMbrData, $pPktData) {
1277 $retVal = array(
"code" =>
"000",
"data" => array());
1284 list($xmlParse, $isXmlParseError) = _ProcessAPIResponse($pPktData);
1285 if ($xmlParse[
'code'] !=
'000') {
1286 if ($isXmlParseError) {
1287 _ApplPrintLogger($pHbEnv,
1289 "_ParsePacketData Error (" . __FILE__ .
":" . __LINE__ .
") :: ". $xmlParse[
"error"],
1293 throw new Exception (
"XML Parse " . $xmlParse[
'error'], 50010);
1299 $xmlPacket = $xmlParse[
'homecu-packet'];
1303 $statResp = _GetPacketStatus(HCU_array_key_value(
'type', $pMbrData), $xmlPacket);
1304 if ($statResp[
'code'] !=
'000') {
1305 throw new Exception (
"Unknown Status Returned", 50020);
1307 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* Packet Resp Status *\n" . print_r($statResp,
true) .
"\n");
1312 if (_CheckSyncMember(HCU_array_key_value(
"type", $pMbrData), HCU_array_key_value(
'pktStatCode', $statResp[
'data']))) {
1318 if (HCU_array_key_exists(
"pktMember", $statResp[
'data'])) {
1319 $syncMember = HCU_array_key_value(
"pktMember", $statResp[
'data']);
1321 $syncMember = trim($xmlPacket->{_GetRequestNodeName(HCU_array_key_value(
"type", $pMbrData))}->Member);
1325 if ($syncMember != $pMbrData[
'member']) {
1326 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n ** out of sync * requested ({$pMbrData['member']}) received ($syncMember)");
1329 throw new Exception (
'Data Request Out of Sync', 50030);
1335 $retVal[
'data'][
'packet-status'] = $statResp[
'data'];
1336 $retVal[
'data'][
'packet-xml'] = $xmlPacket;
1339 }
catch (Exception $e) {
1340 $retVal[
'code'] =
'999';
1341 switch ($e->getCode()) {
1345 $retVal[
'error'] = $e->getMessage();
1348 $retVal[
'error'] =
"Unable to retrieve data";
1373 function _GetPacketStatus($pReqType, $pXMLPacket) {
1374 $retVal = Array(
'code' =>
'000',
'data' => array());
1377 $statKeyAry = Array(
'pktStatMember',
'pktStatCode',
'pktStatDesc',
'pktStatExtra');
1381 if (!($pXMLPacket instanceof SimpleXMLElement)) {
1383 throw new Exception (
'XML Packet Not an xml object');
1390 switch ($pReqType) {
1391 case PACKET_REQUEST_INQUIRY:
1392 case PACKET_REQUEST_VERIFY_PIN:
1393 case PACKET_REQUEST_TRN:
1394 case PACKET_REQUEST_MIR:
1395 case PACKET_REQUEST_MA:
1396 case PACKET_REQUEST_XAC:
1397 case PACKET_REQUEST_ES:
1398 case PACKET_REQUEST_ES_TOC:
1399 $xpathLoc =
'//status';
1401 case PACKET_REQUEST_NEWAPP:
1402 case PACKET_REQUEST_INQAPP:
1403 $xpathLoc =
'//Status';
1406 throw new Exception (
'Packet Response Type Not Found');
1409 $nodeSearch = $pXMLPacket->xpath($xpathLoc);
1410 if (count($nodeSearch)) {
1413 $statValAry = explode (
"\t", trim($nodeSearch[0][0],
"\n"));
1416 if (count($statValAry) < count($statKeyAry)) {
1417 $newItemCount = (count($statKeyAry) - count($statValAry));
1418 for ($idx = 0; $idx < $newItemCount; $idx++) {
1422 $retVal[
'data'] = array_combine($statKeyAry, $statValAry);
1426 $xpathLoc =
'//Member';
1428 $nodeSearch = $pXMLPacket->xpath($xpathLoc);
1429 if (count($nodeSearch) > 0) {
1433 $tmpMember = trim($nodeSearch[0][0]);
1435 if (strpos($tmpMember,
"\t")) {
1437 $tmpMember = trim(substr($tmpMember, 0, strpos($tmpMember,
"\t")));
1441 $retVal[
'data'][
'pktMember'] = $tmpMember;
1445 $xpathLoc =
'//time';
1446 if ($pXMLPacket->time) {
1447 $timeNode = trim($pXMLPacket->time->__toString());
1448 if ($timeNode !=
'') {
1450 list ($retVal[
'data'][
'pktTime'], $retVal[
'data'][
'pktDate']) = explode (
"\t", $timeNode);
1455 }
catch (Exception $e) {
1456 $retVal[
'code'] =
'999';
1457 $retVal[
'error'] =
'Packet Status Not Found';
1477 function _PopulateCUCoreRequestsTable($pHbEnv, $pConnSet, $when, $cucoreRequestRec) {
1479 if (array_key_exists(
'id', $cucoreRequestRec)) {
1480 if($cucoreRequestRec[
"id"] == NULL) {
1481 throw new Exception(
"cucorerequests.id value not set -- possibly preceding next_val('cucorerequests_id_seq') call failed!.");
1483 $dbh = HCU_array_key_value(
'dbh', $pHbEnv);
1484 $lMc = HCU_array_key_value(
'MC', $pHbEnv);
1485 $pTableName =
"cucorerequests";
1487 if ($when ==
"before_request") {
1488 $cucoreRequestRec[
"appliance_ip"] = array_key_exists(
'appliance_ip', $cucoreRequestRec) ? $cucoreRequestRec[
"appliance_ip"] :
"NULL";
1489 $cucoreRequestRec[
"request_url"] = array_key_exists(
'request_url', $cucoreRequestRec) ? $cucoreRequestRec[
"request_url"] :
"NULL";
1490 $cucoreRequestRec[
"request_type"] = array_key_exists(
'request_type', $cucoreRequestRec) ? $cucoreRequestRec[
"request_type"] :
"NULL";
1491 $cucoreRequestRec[
"remote_ip"] = array_key_exists(
'remote_ip', $cucoreRequestRec) ? $cucoreRequestRec[
"remote_ip"] :
"NULL";
1492 $cucoreRequestRec[
"cu"] = array_key_exists(
'cu', $cucoreRequestRec) ? $cucoreRequestRec[
"cu"] :
"NULL";
1493 $cucoreRequestRec[
"accountnumber"] = array_key_exists(
'accountnumber', $cucoreRequestRec) ? $cucoreRequestRec[
"accountnumber"] :
"NULL";
1494 $cucoreRequestRec[
"request_start"] = DBTIMESTAMP_USETS;
1496 # Insert record to cucorerequests table 1497 $cucoreRequestRec[
'_action'] =
"insert";
1498 $insTableResp = SetDataTableUpdate($dbh, $pHbEnv, $lMc, $pTableName, $cucoreRequestRec,
false);
1500 if ($insTableResp[
'code'] !=
'000') {
1501 throw new exception (
'Data Insert Error',
'901');
1504 # $when = after_request 1506 $updateArr = Array();
1507 $updateArr[
"request_status"] = $cucoreRequestRec[
"request_status"];
1508 $updateArr[
"id"] = $cucoreRequestRec[
"id"];
1509 $updateArr[
"request_end"] = DBTIMESTAMP_USETS;
1511 $updateArr[
"request_elapsed"] =
"EXTRACT(EPOCH FROM (CURRENT_TIMESTAMP - request_start))::int";
1513 # Update record to cucorerequests table for a specific id with 1514 # additional information after the completion of request 1516 $updateArr[
'_action'] =
"update";
1517 $updTableResp = SetDataTableUpdate($dbh, $pHbEnv, $lMc, $pTableName, $updateArr,
false);
1519 if ($updTableResp[
'code'] !=
'000') {
1520 throw new exception (
'Data Update Error',
'902');
1527 catch (Exception $e) {
1528 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n Error :: {$e->getMessage()} ({$e->getCode()})");
1545 function _SkipCucorerequestsEntry($activeCu) {
1579 function _UpdateRequestStatus($pHbEnv, $pConnSet, $cucorereqAfter, $packetsize, $origStatCode, $origStatDesc, $origStatExtra) {
1581 $activeCu = HCU_array_key_value(
"cu", $pHbEnv);
1582 if (!_SkipCucorerequestsEntry($activeCu)) {
1584 $recordAssoc = $cucorereqAfter[
"record"];
1585 $curlHttpMsgs = $cucorereqAfter[
"curl_http"];
1586 $errorMsgs = $cucorereqAfter[
"errors"];
1588 $requestStatus = Array();
1590 # populate status code and description returned by appliance 1592 $status[
"packetsize"] = $packetsize;
1593 if (is_null($origStatCode)) {$origStatCode =
"";}
1594 if (is_null($origStatDesc)) {$origStatDesc =
"";}
1595 if (is_null($origStatExtra)) {$origStatExtra =
"";}
1596 $status[
"code"] = $origStatCode;
1597 $status[
"desc"] = $origStatDesc;
1598 $status[
"extra"] = $origStatExtra;
1599 # add curl_errno and http_code to status array 1600 $status[
"curl_errno"] = HCU_array_key_value(
"curl_errno", $curlHttpMsgs);
1601 $status[
"http_code"] = HCU_array_key_value(
"http_code", $curlHttpMsgs);
1602 $status[
"attempted_core_conns"] = $cucorereqAfter[
"attempted_core_conns"];
1604 $requestStatus[
"status"] = $status;
1606 # populate error messages 1608 $error[
"messages"] = join(
" -> ", $errorMsgs);
1609 $requestStatus[
"error"] = $error;
1611 # populate note: db_error 1613 $note[
"dberror"] = db_last_error();
1614 if (is_null($note[
"dberror"])) {$note[
"dberror"] =
"";}
1615 $requestStatus[
"note"] = $note;
1617 # prepare a final json object to be stored in `cucorerequests.request_status` 1618 $recordAssoc[
"request_status"] = json_encode($requestStatus);
1619 _PopulateCUCoreRequestsTable($pHbEnv, $pConnSet,
"after_request", $recordAssoc);
1631 function _GetRemoteIp() {
1632 if (array_key_exists(
'REMOTE_ADDR', $_SERVER)) {
1633 $remoteAddr = trim($_SERVER[
'REMOTE_ADDR']);
1650 function _GetAdditionalQueryStr($cucorerequestsSeqId) {
1651 if (array_key_exists(
'HTTP_HOST', $_SERVER)) {
1652 # eg. www4.homecu.net 1653 $serverHost = trim(explode(
".", trim($_SERVER[
'HTTP_HOST']))[0]);
1655 $serverHost =
'localhost';
1657 return "corerespid=$cucorerequestsSeqId$serverHost";
1672 function _HideSensitiveContent($urlPortion, $queryStrArray, $extraQueryStr) {
1673 $replace_str =
"HIDDEN";
1674 $type = trim($queryStrArray[
"type"]);
1678 if (array_key_exists(
"pass", $queryStrArray)) {
1679 $queryStrArray[
"pass"] = $replace_str;
1687 if (array_key_exists(
"ref1", $queryStrArray)) {
1688 $queryStrArray[
"ref1"] = $replace_str;
1690 if (array_key_exists(
"ref3", $queryStrArray)) {
1691 $queryStrArray[
"ref3"] = $replace_str;
1700 $querySep = (strstr($urlPortion,
'?') ?
'&' :
'?');
1701 $returnUrl = $urlPortion . $querySep . http_build_query($queryStrArray);
1703 $querySep = (strstr($returnUrl,
'?') ?
'&' :
'?');
1704 $returnUrl .= $querySep . $extraQueryStr;
1725 function _PopulateApplianceId($pHbEnv, $cuConnSet, $hculiveURL, $cucorerequestsRec) {
1726 $appliance_id = NULL;
1728 $split_res = parse_url($hculiveURL, PHP_URL_HOST);
1730 throw new Exception(
"Something went wrong while extracting appliance ip/dns for fetcher: $hculiveURL");
1732 $appliance_id = $split_res;
1733 }
catch (Exception $e) {
1734 _ApplPrintLogger($pHbEnv, $cuConnSet,
"\n Error :: {$e->getMessage()}");
1737 if ($appliance_id == NULL) {
1738 $cucorerequestsRec[
"appliance_ip"] =
"Couldn't be extracted";
1740 $cucorerequestsRec[
"appliance_ip"] = $appliance_id;
1742 return $cucorerequestsRec;
1758 function _GetNextCucorerequestsSeqId($pHbEnv, $cuConnSet){
1761 $dbh = HCU_array_key_value(
'dbh', $pHbEnv);
1763 $cucorerequestsSql =
"select nextval('cucorerequests_id_seq'::regclass);";
1764 $cucorerequestsSth = db_query($cucorerequestsSql, $dbh);
1766 if (!$cucorerequestsSth) {
1767 throw new Exception(
"cucorerequests_id_seq query failed ($cucorerequestsSql). DB error: " . db_last_error());
1769 # get the next sequence number from `cucorerequests_id_seq` object 1770 $nextSeqId = intval(db_fetch_row($cucorerequestsSth,0)[0]);
1771 }
catch (Exception $e) {
1772 _ApplPrintLogger($pHbEnv, $cuConnSet,
"\n Error :: {$e->getMessage()}");
1791 function _PrepareCucoreInfoBeforeRequest($pHbEnv, $pConnSet, $hculiveURL, $queryStr) {
1792 $cucorerequestsRecord = Array();
1793 $extraQueryStr =
"";
1794 $activeCu = HCU_array_key_value(
"cu", $pHbEnv);
1797 if (!_SkipCucorerequestsEntry($activeCu)){
1798 $cucorerequestsId = _GetNextCucorerequestsSeqId($pHbEnv, $pConnSet);
1799 $cucorerequestsRecord[
"id"] = $cucorerequestsId;
1801 if($cucorerequestsRecord[
"id"] != NULL) {
1803 $extraQueryStr = _GetAdditionalQueryStr($cucorerequestsRecord[
"id"]);
1805 parse_str($queryStr, $queryStrArray);
1806 $cucorerequestsRecord[
"request_url"] = _HideSensitiveContent($hculiveURL, $queryStrArray, $extraQueryStr);
1808 $cucorerequestsRecord[
"accountnumber"] = HCU_array_key_value(
"member", $queryStrArray);
1809 $cucorerequestsRecord[
"request_type"] = HCU_array_key_value(
"type", $queryStrArray);
1810 $cucorerequestsRecord[
"remote_ip"] = _GetRemoteIp();
1811 $cucorerequestsRecord[
"cu"] = $activeCu;
1812 $cucorerequestsRecord = _PopulateApplianceId($pHbEnv, $pConnSet, $hculiveURL, $cucorerequestsRecord);
1814 # populate request information to cucorerequests table before getting the packets 1815 _PopulateCUCoreRequestsTable($pHbEnv, $pConnSet,
"before_request", $cucorerequestsRecord);
1819 }
catch (Exception $e) {
1820 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n** Send Data Error Caught ** \n" .
"({$e->getCode()})" . $e->getMessage() );
1822 return Array($cucorerequestsRecord, $extraQueryStr);
1849 function _SendDataRequest($pHbEnv, $pConnSet, $pGetData, $pPostData=
null) {
1851 $cucorerequestsErrors = Array();
1852 $reqStatCurlHttpInfo = Array(
"curl_errno" =>
"",
"http_code" =>
"");
1855 $retVal = array(
"code" =>
"000",
"packet" =>
"");
1859 $startTime = time();
1861 $envLogger = HCU_array_key_value(
'logger', $pHbEnv[
'SYSENV']);
1865 $hculiveURL = _CreateAPIUrl($pConnSet);
1866 if ($hculiveURL ==
'') {
1867 throw new exception (
'Unable to retrieve data', -700);
1872 $curlHndl = curl_init($hculiveURL);
1875 throw new Exception (
'Unable to retrieve data', -701);
1879 $curlOptions = _ReturnCurlDefaults();
1882 $querySep = (strstr($hculiveURL,
'?') ?
'&' :
'?');
1883 $curlOptions[CURLOPT_URL] = $hculiveURL . $querySep . $pGetData;
1884 $queryDataStr = $pGetData;
1886 if (HCU_array_key_exists(
'platform', $pHbEnv)) {
1888 $querySep = (strstr($curlOptions[CURLOPT_URL],
'?') ?
'&' :
'?');
1889 $curlOptions[CURLOPT_URL] .= $querySep .
'src=' . $pHbEnv[
'platform'];
1893 if ($pPostData !==
null && $pPostData !==
'') {
1894 $curlOptions[CURLOPT_POST] = 1;
1895 $curlOptions[CURLOPT_POSTFIELDS] = $pPostData;
1896 $queryDataStr = $pPostData;
1899 # php passes arguments with pass by value, no need to worry about 1900 # accidental changes in hculiveURL and $queryDataStr 1901 list($cucorerequestsRecord, $extraQueryStr) = _PrepareCucoreInfoBeforeRequest($pHbEnv, $pConnSet, $hculiveURL, $queryDataStr);
1902 # if applicable, append extra query string to the actual url for book-keeping 1903 if ($extraQueryStr !=
"") {
1904 if ($pPostData !==
null && $pPostData !==
'') {
1905 $curlOptions[CURLOPT_POSTFIELDS] .=
"&$extraQueryStr";
1907 $querySep = (strstr($curlOptions[CURLOPT_URL],
'?') ?
'&' :
'?');
1908 $curlOptions[CURLOPT_URL] .= $querySep . $extraQueryStr;
1912 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n** CURL OPTIONS **\n" . print_r($curlOptions,
true));
1916 curl_setopt_array ($curlHndl, $curlOptions);
1919 $coreConnAttempts = 0;
1920 $curlErrs = array();
1929 if ($coreConnAttempts > 0 && CURL_CONN_TO_CORE_RETRY_DELAY > 0) {
1930 sleep(CURL_CONN_TO_CORE_RETRY_DELAY);
1934 $applResponse = Array(
1935 'content' => curl_exec($curlHndl),
1936 'errno' => curl_errno($curlHndl),
1937 'errmsg' => curl_error($curlHndl),
1938 'header' => curl_getinfo($curlHndl)
1940 $curlErrNo = HCU_array_key_value(
"errno", $applResponse);
1941 ++$coreConnAttempts;
1945 $curlErrs[] =
"Attempt#" . $coreConnAttempts .
" : " . $curlErrNo;
1947 }
while ($curlErrNo == CURLE_OPERATION_TIMEDOUT &&
1948 $coreConnAttempts < CURL_CONN_TO_CORE_DEFAULT_RETRIES);
1950 if ($coreConnAttempts == 1) {
1951 $reqStatCurlHttpInfo[
"curl_errno"] = $curlErrNo;
1953 $reqStatCurlHttpInfo[
"curl_errno"] = implode(
', ', $curlErrs);
1956 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* Appliance Response *\n" . print_r($curlOptions,
true));
1959 curl_close($curlHndl);
1962 if ($applResponse[
'errno'] != 0) {
1963 throw new Exception ($applResponse[
'errmsg'], -703);
1969 if (HCU_array_key_exists(
'http_code', $applResponse[
'header'])) {
1970 $httpCode = HCU_array_key_value(
'http_code', $applResponse[
'header']);
1971 $reqStatCurlHttpInfo[
"http_code"] = $httpCode;
1973 if ($httpCode !=
'200') {
1982 throw new Exception (
"HTTP Request Failure", -704);
1988 $retVal[
'packet'] = $applResponse[
'content'];
1990 }
catch (Exception $e) {
1991 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n** Send Data Error Caught ** \n" .
"({$e->getCode()})" . $e->getMessage() );
1994 $retVal[
'code'] =
'999';
1996 $retVal[
'error'] = Array($e->getMessage());
1998 $retVal[
'packet'] =
'<?xml version="1.0" encoding="UTF-8"?><homecu-packet></homecu-packet>';
2001 $cucorerequestsErrors[] = $e->getMessage() .
" ({$e->getCode()})";
2004 $retVal[
"cucorereq_after"] = Array();
2005 $retVal[
"cucorereq_after"][
"attempted_core_conns"] = $coreConnAttempts;
2006 $retVal[
"cucorereq_after"][
"curl_http"] = $reqStatCurlHttpInfo;
2007 $retVal[
"cucorereq_after"][
"record"] = $cucorerequestsRecord;
2008 $retVal[
"cucorereq_after"][
"errors"] = $cucorerequestsErrors;
2012 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* Return From _SendDataRequest ** time :: " . ($endTime - $startTime) .
" *\n" . print_r($retVal,
true));
2028 function _CreateAPIUrl ($pConnSet) {
2032 $liveserver = trim(HCU_array_key_value(
'liveserver', $pConnSet));
2033 if ($liveserver ==
'' || $liveserver ==
'#') {
2034 throw new exception (
'Server Configuration Empty');
2036 $retVal = $liveserver;
2040 }
catch (Exception $e) {
2062 function _RetrieveMemberInfo($pHbEnv, $pConnSet, $pMbrRequest) {
2064 $retVal = Array(
"code" =>
'000',
"data" => Array());
2087 $origPktStatCode =
"";
2088 $origPktStatDesc =
"";
2089 $origPktStatExtra =
"";
2103 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n** Get Member Info **\n");
2106 if ($pMbrRequest ==
'') {
2107 throw new Exception (
"Unknown Account Number", 50050);
2111 "member" => $pMbrRequest,
2114 $packetQuery = http_build_query($dataArray);
2116 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* Packet Query *\n$packetQuery\n");
2117 $sendDataResp = _SendDataRequest($pHbEnv, $pConnSet, $packetQuery);
2118 $cucorereqAfter = HCU_array_key_value(
"cucorereq_after", $sendDataResp);
2120 if ($sendDataResp[
'code'] !=
'000') {
2123 throw new Exception (
'Data Request Error');
2144 "type" => PACKET_REQUEST_MIR,
2145 "member" => $pMbrRequest
2148 $packetContent = HCU_array_key_value(
'packet', $sendDataResp);
2149 $packetsize = strlen($packetContent);
2150 $xmlParse = _ParsePacketData($pHbEnv, $pConnSet, $mbrData, $packetContent);
2151 if ($xmlParse[
'code'] !=
'000') {
2153 throw new Exception (
"XML Parse " . $xmlParse[
'error'], 50060);
2156 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* Packet Resp Status *\n" . print_r($xmlParse[
'data'][
'packet-status'],
true) .
"\n");
2181 $origPktStatCode = HCU_array_key_value(
"pktStatCode", $xmlParse[
'data'][
'packet-status']);
2182 $origPktStatDesc = HCU_array_key_value(
"pktStatDesc", $xmlParse[
'data'][
'packet-status']);
2183 $origPktStatExtra = HCU_array_key_value(
"pktStatExtra", $xmlParse[
'data'][
'packet-status']);
2185 switch ($xmlParse[
'data'][
'packet-status'][
'pktStatCode']) {
2189 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* Parse API Response *\n$packetQuery\n" . print_r($xmlParse,
true));
2191 $xmlPacket = $xmlParse[
'data'][
'packet-xml'];
2193 $mirInfo = trim($xmlPacket->MemberInfo->Info,
"\n");
2195 $recordValues = explode(
"\t", $mirInfo);
2197 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* Response Values *\n" . print_r($recordValues,
true));
2200 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* Column Count : tblCol " . count($mirFields) .
" :: pktRec " . count($recordValues) .
" *\n");
2203 if ( count($mirFields) != count($recordValues) ) {
2204 $recordValues[count( $mirFields ) - 1] =
"";
2207 if (count($mirFields) != count($recordValues)) {
2208 throw new Exception (
"Column Count Mismatch");
2210 $mirInfoData = array_combine($mirFields, $recordValues);
2212 if ( isset( $pHbEnv[
'SYSENV'][
'devmode'] ) && $pHbEnv[
'SYSENV'][
'devmode']) {
2214 $mirInfoData[
'ssn'] = str_replace(
'*',
'0', $mirInfoData[
'ssn']);
2219 if (trim($mirInfoData[
'dob']) !=
'') {
2227 $mirInfoData[
'dob'] = date(
'm/d/Y', strtotime($mirInfoData[
'dob']));
2231 $retVal[
'code'] =
'000';
2232 $retVal[
'data'] = $mirInfoData;
2237 $retVal[
'code'] =
'001';
2238 $retVal[
'error'] =
'INVALID ACCOUNT NUMBER';
2243 $retVal[
'code'] = $xmlParse[
'data'][
'packet-status'][
'pktStatCode'];
2244 $retVal[
'error'] = $xmlParse[
'data'][
'packet-status'][
'pktStatDesc'];
2252 throw new Exception(
"Packet Request Failed" . $xmlParse[
'data'][
'packet-status'][
'pktStatCode'], 50070);
2254 }
catch (Exception $e) {
2255 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n** Mbr Info Error Caught ** \n" .
"({$e->getCode()})" . $e->getMessage() );
2256 $retVal[
'code'] =
'999';
2257 $retVal[
'error'] =
"Unable to retrieve data";
2258 $cucorereqAfter[
"errors"][] = $e->getMessage();
2261 _UpdateRequestStatus($pHbEnv, $pConnSet, $cucorereqAfter, $packetsize, $origPktStatCode, $origPktStatDesc, $origPktStatExtra);
2287 function _RetrieveMemberES($pHbEnv, $pConnSet, $pMbrRequest, $pMbrEmail, $pMbrCmd, $pMbrStmtId=
'') {
2289 $retVal = Array(
"code" =>
'000',
"data" => Array());
2302 $origPktStatCode =
"";
2303 $origPktStatDesc =
"";
2304 $origPktStatExtra =
"";
2308 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n** Get E-Statement [$pMbrCmd] **\n");
2311 if ($pMbrRequest ==
'') {
2312 throw new Exception (
"Unknown Account Number", 50150);
2316 if ($pMbrCmd == PACKET_REQUEST_ES && $pMbrStmtId ==
'') {
2317 throw new Exception (
"Unknown Statement ID" , 50170);
2321 "member" => $pMbrRequest,
2322 "type" => ($pMbrCmd == PACKET_REQUEST_ES ?
"ESTM" :
"ETOC")
2324 if ($pMbrEmail !=
'') {
2325 $dataArray[
'ref3'] = $pMbrEmail;
2327 if ($pMbrCmd == PACKET_REQUEST_ES) {
2328 $dataArray[
'ref1'] = $pMbrStmtId;
2330 $packetQuery = http_build_query($dataArray);
2332 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* Packet Query *\n$packetQuery\n");
2333 $sendDataResp = _SendDataRequest($pHbEnv, $pConnSet, $packetQuery);
2334 $cucorereqAfter = HCU_array_key_value(
"cucorereq_after", $sendDataResp);
2336 if ($sendDataResp[
'code'] !=
'000') {
2339 throw new Exception (
'Data Request Error');
2383 "member" => $pMbrRequest
2385 $packetContent = HCU_array_key_value(
'packet', $sendDataResp);
2386 $packetsize = strlen($packetContent);
2387 $xmlParse = _ParsePacketData($pHbEnv, $pConnSet, $mbrData, $packetContent);
2388 if ($xmlParse[
'code'] !=
'000') {
2390 throw new Exception (
"XML Parse " . $xmlParse[
'error'], 50160);
2393 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* Packet Resp Status *\n" . print_r($xmlParse[
'data'][
'packet-status'],
true) .
"\n");
2417 $origPktStatCode = HCU_array_key_value(
"pktStatCode", $xmlParse[
'data'][
'packet-status']);
2418 $origPktStatDesc = HCU_array_key_value(
"pktStatDesc", $xmlParse[
'data'][
'packet-status']);
2419 $origPktStatExtra = HCU_array_key_value(
"pktStatExtra", $xmlParse[
'data'][
'packet-status']);
2421 switch ($xmlParse[
'data'][
'packet-status'][
'pktStatCode']) {
2424 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* Parse API Response *\n$packetQuery\n" . print_r($xmlParse,
true));
2426 $xmlPacket = $xmlParse[
'data'][
'packet-xml'];
2428 if ($pMbrCmd == PACKET_REQUEST_ES_TOC) {
2430 $mbrToc = trim($xmlPacket->EStatementTOC->TOC);
2432 $mbrToc = trim($xmlPacket->EStatement->Member);
2435 $dataRow = strtok($mbrToc,
"\n");
2436 while ($dataRow !==
false) {
2438 if ($dataRow !=
'') {
2442 $dataRow = rtrim($dataRow);
2443 $recordValues = explode(
"\t", $dataRow);
2444 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* TOC Response Values *\n" . print_r($recordValues,
true));
2450 if (count($tocFields) == count($recordValues)) {
2451 $updateRow = array_combine($tocFields, $recordValues);
2453 if (count($updateRow) > 0) {
2454 $dataToc[] = $updateRow;
2458 $dataRow = strtok(
"\n");
2463 if ($pMbrCmd == PACKET_REQUEST_ES) {
2464 $esData = trim($xmlPacket->EStatement->Data);
2467 $retVal[
'code'] =
'000';
2468 $retVal[
'data'][
'TOC'] = $dataToc;
2469 $retVal[
'data'][
'statement'] = $esData;
2474 $retVal[
'code'] =
'001';
2475 $retVal[
'error'] =
'INVALID ACCOUNT NUMBER';
2481 $retVal[
'code'] = $xmlParse[
'data'][
'packet-status'][
'pktStatCode'];
2482 $retVal[
'error'] = $xmlParse[
'data'][
'packet-status'][
'pktStatDesc'];
2490 throw new Exception(
"Packet Request Failed" . $xmlParse[
'data'][
'packet-status'][
'pktStatCode'], 50170);
2492 }
catch (Exception $e) {
2493 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n** ES Request Error Caught ** \n" .
"({$e->getCode()})" . $e->getMessage() );
2494 $retVal[
'code'] =
'999';
2495 $retVal[
'error'] =
"Unable to retrieve data";
2496 $cucorereqAfter[
"errors"][] = $e->getMessage();
2499 _UpdateRequestStatus($pHbEnv, $pConnSet, $cucorereqAfter, $packetsize, $origPktStatCode, $origPktStatDesc, $origPktStatExtra);
2525 function _RetrieveMemberCrossAccount ($pHbEnv, $pConnSet, $pReqData) {
2527 $retVal = Array(
"code" =>
'000',
"data" => Array());
2528 $packetData = Array();
2530 $origPktStatCode =
"";
2531 $origPktStatDesc =
"";
2532 $origPktStatExtra =
"";
2536 $dataArray = array_merge ($pReqData, array(
"type" =>
"X"));
2537 $packetQuery = http_build_query($dataArray);
2539 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n** Packet XAC Query ** \n$packetQuery\n");
2543 $sendDataResp = _SendDataRequest($pHbEnv, $pConnSet, $packetQuery);
2544 $cucorereqAfter = HCU_array_key_value(
"cucorereq_after", $sendDataResp);
2546 if ($sendDataResp[
'code'] !=
'000') {
2549 throw new Exception (
'Data Request Error');
2553 "type" => PACKET_REQUEST_XAC,
2554 "member" => $pReqData[
'member']
2556 $packetContent = HCU_array_key_value(
'packet', $sendDataResp);
2557 $packetsize = strlen($packetContent);
2558 $xmlParse = _ParsePacketData($pHbEnv, $pConnSet, $mbrData, HCU_array_key_value(
'packet', $sendDataResp));
2559 if ($xmlParse[
'code'] !=
'000') {
2561 throw new Exception (
"XML Parse " . $xmlParse[
'error'], 50060);
2563 $dataPacket = $xmlParse[
'data'][
'packet-xml'];
2565 $origPktStatCode = HCU_array_key_value(
"pktStatCode", $xmlParse[
'data'][
'packet-status']);
2566 $origPktStatDesc = HCU_array_key_value(
"pktStatDesc", $xmlParse[
'data'][
'packet-status']);
2567 $origPktStatExtra = HCU_array_key_value(
"pktStatExtra", $xmlParse[
'data'][
'packet-status']);
2569 switch ($xmlParse[
'data'][
'packet-status'][
'pktStatCode']) {
2571 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* STATCODE 101 *\n");
2577 $tableName =
'crossaccounts';
2578 $tableDef = _GetPacketColumnList($pHbEnv, $tableName);
2579 $pktInquiryNode = $dataPacket->CrossAccount;
2583 $tblPktData = $pktInquiryNode->{HCU_array_key_value(
'node', $tableDef)};
2584 $convResp = _ConvertPacketLineToArray($pHbEnv, $pConnSet, $tableName, $tblPktData);
2586 if ($convResp[
'code'] ==
'000') {
2587 if (count($convResp[
'data']) > 0) {
2588 $packetData[$tableName] = $convResp[
'data'];
2591 $retVal[
'data'] = $xmlParse[
'data'];
2592 $retVal[
'data'][
'packet-data'] = $packetData;
2596 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* STATCODE 100 *\n");
2597 $retVal[
'data'] = $xmlParse[
'data'];
2606 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* STATCODE 003 *\n");
2607 $retVal[
'code'] =
'003';
2608 $retVal[
'error'] =
'Closed Account';
2612 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* STATCODE 001 *\n");
2613 $retVal[
'code'] =
'001';
2614 $retVal[
'error'] =
'Invalid Account Number';
2618 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* STATCODE 999 *\n");
2620 $retVal[
'code'] =
'999';
2621 $retVal[
'error'] = $xmlParse[
'data'][
'packet-status'][
'pktStatDesc'];
2627 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* DEPRECATED STATCODE *\n");
2630 throw new Exception (
'Unexpected Result');
2633 }
catch (Exception $e) {
2634 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n_RetrieveMemberInquiry Catch Error ({$e->getCode()}) :: {$e->getMessage()}");
2635 $retVal[
'code'] =
'999';
2636 $retVal[
'error'] =
"Unable to retrieve data";
2637 $cucorereqAfter[
"errors"][] = $e->getMessage();
2640 _UpdateRequestStatus($pHbEnv, $pConnSet, $cucorereqAfter, $packetsize, $origPktStatCode, $origPktStatDesc, $origPktStatExtra);
2666 function _RetrieveMemberInquiry ($pHbEnv, $pConnSet, $pReqData) {
2668 $retVal = Array(
"code" =>
'000',
"data" => Array());
2669 $packetData = Array();
2671 $origPktStatCode =
"";
2672 $origPktStatDesc =
"";
2673 $origPktStatExtra =
"";
2678 $dataArray = array_merge ($pReqData, array(
"type" =>
"I"));
2679 $packetQuery = http_build_query($dataArray);
2681 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n** Packet Query ** \n$packetQuery\n");
2690 $sendDataResp = _SendDataRequest($pHbEnv, $pConnSet, $packetQuery);
2691 $cucorereqAfter = HCU_array_key_value(
"cucorereq_after", $sendDataResp);
2694 if ($sendDataResp[
'code'] !=
'000') {
2697 throw new Exception (
'Data Request Error');
2713 "type" => PACKET_REQUEST_INQUIRY,
2714 "member" => $pReqData[
'member']
2717 $packetContent = HCU_array_key_value(
'packet', $sendDataResp);
2718 $packetsize = strlen($packetContent);
2719 $xmlParse = _ParsePacketData($pHbEnv, $pConnSet, $mbrData, $packetContent);
2720 if ($xmlParse[
'code'] !=
'000') {
2722 throw new Exception (
"XML Parse " . $xmlParse[
'error'], 50060);
2724 $dataPacket = $xmlParse[
'data'][
'packet-xml'];
2726 $origPktStatCode = HCU_array_key_value(
"pktStatCode", $xmlParse[
'data'][
'packet-status']);
2727 $origPktStatDesc = HCU_array_key_value(
"pktStatDesc", $xmlParse[
'data'][
'packet-status']);
2728 $origPktStatExtra = HCU_array_key_value(
"pktStatExtra", $xmlParse[
'data'][
'packet-status']);
2731 switch ($xmlParse[
'data'][
'packet-status'][
'pktStatCode']) {
2733 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* STATCODE 101 *\n");
2737 $pktInquiryNode = $dataPacket->Inquiry;
2738 $tableList = Array(
"accountbalance",
"loanbalance");
2740 foreach ($tableList as $tableName) {
2741 $tableDef = _GetPacketColumnList($pHbEnv, $tableName);
2743 $tblPktData = $pktInquiryNode->{HCU_array_key_value(
'node', $tableDef)};
2745 $convResp = _ConvertPacketLineToArray($pHbEnv, $pConnSet, $tableName, $tblPktData);
2747 if ($convResp[
'code'] ==
'000') {
2748 if (count($convResp[
'data']) > 0) {
2749 $packetData[$tableName] = $convResp[
'data'];
2753 $retVal[
'data'] = $xmlParse[
'data'];
2754 $retVal[
'data'][
'packet-data'] = $packetData;
2758 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* STATCODE 100 *\n");
2759 $retVal[
'data'] = $xmlParse[
'data'];
2768 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* STATCODE 002 *\n");
2769 $retVal[
'data'] = $xmlParse[
'data'];
2770 $retVal[
'code'] =
'002';
2771 $retVal[
'error'] =
'Invalid Password';
2775 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* STATCODE 003 *\n");
2776 $retVal[
'data'] = $xmlParse[
'data'];
2777 $retVal[
'code'] =
'003';
2778 $retVal[
'error'] =
'Closed Account';
2782 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* STATCODE 001 *\n");
2783 $retVal[
'data'] = $xmlParse[
'data'];
2784 $retVal[
'code'] =
'001';
2785 $retVal[
'error'] =
'Invalid Account Number';
2789 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* STATCODE 999 *\n");
2791 $retVal[
'code'] =
'999';
2792 $retVal[
'error'] = $xmlParse[
'data'][
'packet-status'][
'pktStatDesc'];
2798 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n* DEPRECATED STATCODE *\n");
2801 throw new Exception (
'Unexpected Result');
2804 }
catch (Exception $e) {
2805 _ApplPrintLogger($pHbEnv, $pConnSet,
"\n_RetrieveMemberInquiry Catch Error ({$e->getCode()}) :: {$e->getMessage()}");
2806 $retVal[
'code'] =
'999';
2807 $retVal[
'error'] =
"Unable to retrieve data";
2808 $cucorereqAfter[
"errors"][] = $e->getMessage();
2811 _UpdateRequestStatus($pHbEnv, $pConnSet, $cucorereqAfter, $packetsize, $origPktStatCode, $origPktStatDesc, $origPktStatExtra);
2822 function _ReturnCurlDefaults() {
2823 $retVal = Array(
"code" =>
'000',
"data" => Array());
2843 CURLOPT_RETURNTRANSFER => 1,
2844 CURLOPT_SSL_VERIFYHOST => 0,
2845 CURLOPT_SSL_VERIFYPEER =>
false,
2846 CURLOPT_CONNECTTIMEOUT => 5,
2847 CURLOPT_TIMEOUT => 180
2850 }
catch (Exception $e) {
2892 function _ReturnCUSettings ($pHbEnv) {
2894 $retVal = array(
"code"=>
"000",
"data"=>Array());
2896 $lDbh = HCU_array_key_value(
'dbh', $pHbEnv);
2900 $lCu = HCU_array_key_value(
'Cu', $pHbEnv);
2902 throw new Exception (
'Credit Union Not Set');
2904 if (db_connection_status($lDbh) === PGSQL_CONNECTION_OK) {
2905 $sql =
"SELECT liveserver, liveport, livewait, retrylimit, 2906 gracelimit, flagset, flagset2, flagset3, histdays, 2907 offlinestat, offlineblurb, ahdropdays, lhdropdays 2909 WHERE cu = '" . prep_save($lCu, 10) .
"'; ";
2910 $settingsRs = db_query($sql, $lDbh);
2911 if ($settingsRs && db_num_rows($settingsRs) > 0) {
2912 $settingsRow = db_fetch_assoc($settingsRs);
2917 $settingsRow[
'retrylimit'] = (intval($settingsRow[
'retrylimit']) <= 0 ? 5 : $settingsRow[
'retrylimit']);
2918 $settingsRow[
'gracelimit'] = (intval($settingsRow[
'gracelimit']) <= 0 ? 5 : $settingsRow[
'gracelimit']);
2919 $settingsRow[
'livewait'] = (intval($settingsRow[
'livewait']) <= 0 ? 300 : $settingsRow[
'livewait']);
2920 $settingsRow[
'histdays'] = (intval($settingsRow[
'histdays']) <= 0 ? 33 : $settingsRow[
'histdays']);
2924 if (HCU_array_key_exists(
"SYSENV", $pHbEnv)) {
2925 $debugMode = HCU_array_key_value(
"devmode", $pHbEnv[
'SYSENV']);
2927 $settingsRow[
'debugMode'] = $debugMode;
2930 $retVal[
'data'] = $settingsRow;
2934 throw new Exception (
'Database Request Error');
2938 throw new Exception (
'Database Not Connected');
2940 }
catch (Exception $e ) {
2941 $retVal[
'code'] =
'999';
2942 $retVal[
'error'] = Array($e->getMessage());
2968 function _ReturnCutoffDate($pCuSet, $pPktStamps, $pPktType) {
2969 $cuAcctDropDays = HCU_array_key_value(
'ahdropdays', $pCuSet);
2970 $cuLoanDropDays = HCU_array_key_value(
'lhdropdays', $pCuSet);
2971 $cuPktHistDays = intval(HCU_array_key_value(
'histdays', $pCuSet));
2972 $cuWaitSeconds = intval(HCU_array_key_value(
'livewait', $pCuSet));
2981 $cutoffHistDays = max(($cuAcctDropDays ==
'HOLD' ? 0 : $cuAcctDropDays), ($cuLoanDropDays ==
'HOLD' ? 0 : $cuLoanDropDays), PACKET_DEFAULT_CUTOFF_DAYS);
2983 $cutoffHist = date(
'Ymd', date(
'U') - ($cutoffHistDays * PACKET_SECONDS_DAY));
2992 $retCutoffDate = ($pPktType == PACKET_REQUEST_VERIFY_PIN ? PACKET_DEFAULT_NEW_CUTOFF : ($pPktType == PACKET_REQUEST_INQUIRY ? PACKET_DEFAULT_INQ_CUTOFF : $cutoffHist));
2993 $lastPacketStamp = intval(HCU_array_key_value(
'laststamp', $pPktStamps));
2994 $lastPacketAttempt = intval(HCU_array_key_value(
'lastattempt', $pPktStamps));
2999 if ($lastPacketStamp > date(
'U', strtotime($retCutoffDate)) && $cuPktHistDays > 0 ) {
3006 $calcMinTime = time() - (3 * $cuWaitSeconds);
3007 if ($lastPacketStamp > $calcMinTime) {
3008 $retCutoffDate = date(
"Ymd", time() - (PACKET_SECONDS_DAY * PACKET_MIN_FETCH_DAYS));
3010 $retCutoffDate = date(
"Ymd",$lastPacketStamp - (PACKET_SECONDS_DAY * $cuPktHistDays));
3014 return $retCutoffDate;
3028 function _ApplPrintLogger($pHbEnv, $pConnSet, $pText, $error=False) {
3032 if (HCU_array_key_value(
'logger', $pHbEnv[
'SYSENV'])) {
3033 $logger = HCU_array_key_value(
'logger', $pHbEnv[
'SYSENV']);
3034 $logger->error($pText);
3038 $pText =
"<appl-logger><line>" . str_replace(
"\n" ,
" </line><line> ", $pText) .
"</line></appl-logger>";
3039 if (HCU_array_key_value(
'debugMode', $pConnSet)) {
3040 if (HCU_array_key_value(
'logger', $pHbEnv[
'SYSENV'])) {
3042 $logger = HCU_array_key_value(
'logger', $pHbEnv[
'SYSENV']);
3043 $logger->debug($pText);
3061 function _CheckSyncMember($pPacketType, $pPacketStatusCode) {
3064 switch ($pPacketType) {
3065 case PACKET_REQUEST_VERIFY_PIN:
3066 case PACKET_REQUEST_INQUIRY:
3067 case PACKET_REQUEST_BAL:
3068 case PACKET_REQUEST_HIS:
3069 case PACKET_REQUEST_XAC:
3070 case PACKET_REQUEST_TRN:
3071 case PACKET_REQUEST_MIR:
3072 if (in_array($pPacketStatusCode, array(
'101'))) {
3088 function _GetRequestNodeName($pPacketType) {
3091 switch ($pPacketType) {
3092 case PACKET_REQUEST_VERIFY_PIN:
3093 case PACKET_REQUEST_INQUIRY:
3094 $retVal =
"Inquiry";
3096 case PACKET_REQUEST_BAL:
3097 case PACKET_REQUEST_HIS:
3099 case PACKET_REQUEST_XAC:
3100 $retVal =
"CrossAccount";
3102 case PACKET_REQUEST_TRN:
3103 case PACKET_REQUEST_MIR:
3104 $retVal =
"MemberInfo";
3106 case PACKET_REQUEST_ES:
3107 $retVal =
"EStatement";
3109 case PACKET_REQUEST_ES_TOC:
3110 $retVal =
"EStatementTOC";
3125 function GetBalanceTemplates() {
3128 "inquiry-key" =>
"accountbalance",
3129 "field-list" => Array(
3141 "inquiry-key" =>
"loanbalance",
3142 "field-list" => Array(