Odyssey
rdcEnsenta.i
1 <?php
2 
3 
4 function RDCconfig($dbh, &$parms) {
5  $parms['UAT'] = (!isset($parms['UAT']) ? 0 : $parms['UAT'] );
6  $parms['certfile'] = ($parms['UAT'] == 0 ? $parms['certfile'] : $parms['UATCert']);
7  $parms['ssourl'] = ($parms['UAT'] == 0 ? $parms['PRODsso'] : $parms['UATsso']);
8  $parms['serviceurl'] = ($parms['UAT'] == 0 ? $parms['PRODurl'] : $parms['UATurl']);
9  $parms['partnerid'] = ($parms['UAT'] == 1 && isset($parms['UATpartnerid']) ? $parms['UATpartnerid'] : $parms['partnerid']);
10 }
11 
12 function RDCauth($dbh, $HB_ENV, $MC, $parms) {
13 # requires: $parms['Cu']
14 # $parms['rdcvendor']
15 # Additional values rdcvendor retrieved and decoded from cutrusteddetail
16 #
17 # returns:
18  # assume we are going to succeed...
19  $return['status']['response'] = 'true';
20  $return['status']['code'] = '000';
21  $return['status']['message'] = 'Success';
22 
23  try {
24  # If authorizing at HomeCU, is member authorized?
25  if ($parms['HomeCUAuth']) {
26  $mbr_rdc = Get_RDCSetting($dbh, $HB_ENV, 'RDCENSENTA', $parms['MBRACCT']);
27  if ($mbr_rdc['status']['code'] != '000') {
28  throw new Exception($mbr_rdc['status']['message'], $mbr_rdc['status']['code']);
29  }
30  $dl = abs( intval( $mbr_rdc['rdcsetting'] ) );
31 
32  if ( isset( $parms['HomeCUAuthVal'] ) && strlen( $parms['HomeCUAuthVal'] ) > 0 ) {
33  // check to see if current setting is one of the allowed settings
34  $authVals = explode( ",", $parms['HomeCUAuthVal'] );
35  if ( !in_array( $dl, $authVals ) ) {
36  // treat it as if no setting
37  $dl = 0;
38  }
39  }
40 
41  if ( $dl == 0 ) {
42  $HB_Notices_ary = Get_NoticeInfo($dbh, $HB_ENV, $MC, 'M', "mblNoRDC", true);
43  if ($HB_Notices_ary['status']['code'] == '000') {
44  $noticeData = $HB_Notices_ary["notice"][0]["notice_text"];
45  } else {
46  $noticeData = "";
47  }
48  if (strlen($noticeData)) {
49  $message = $noticeData;
50  $code = 111;
51  } else {
52  $message = "Account not permitted for Remote Deposit. Please contact the Credit Union for more information";
53  $code = 110;
54  }
55  throw new Exception($message, $code);
56  }
57  }
58  # member authorized, or not authorizing at HomeCU.
59  # check if they have any valid accounts
60  $parms['Fset2'] = $HB_ENV['Fset2']; # HB_ENV
61  $parms['Fset3'] = $HB_ENV['Fset3']; # HB_ENV
62  $hculist = RDCGetAccts($dbh, $parms);
63 
64  if ($hculist['status']['response'] == 'false') {
65  throw new Exception($hculist['status']['message'], $hculist['status']['code']);
66  }
67 
68  # got a valid RDC account list
69 
70  $parms['RDCAcctList'] = $hculist['data'];
71  $parms['deplimit'] = $dl;
72 
73  # Check first for valid session key, if found, start a new curdcstatus record with it
74  $session = curdc_read($dbh, array("Cu" => $HB_ENV['Cu'], "Uid" => $HB_ENV['Uid'], "MBRACCT" => $parms["MBRACCT"]));
75  $vtime = mktime();
76  if ($session['status']['response'] == 'true' &&
77  isset($session['data']['vendorinfo']['Vendortime']) &&
78  ($vtime - $session['data']['vendorinfo']['Vendortime']) < 720) { # less than 12 minutes)
79 
80  $parms['SessionStateId'] = $session['data']['vendorinfo']['SessionStateId'];
81  if ($session['data']['status'] == 'T') {
82  $rdcterms = ensentaGetTerms($parms);
83  if ($rdcterms['status']['response'] == 'false' || $rdcterms['data']['ResponseCode'] != '00') {
84  $e = ($rdcterms['status']['response'] == 'false' ? 'Ensenta GetTerms call failed ' . $rdcterms['status']['message'] :
85  "Terms - " . $rdcterms['data']['ResponseCode'] . ' ' . $rdcterms['data']['ErrorResponseText'] . ' ' . $rdcterms['data']['LocalizedMessageText']);
86  throw new Exception($e, 301);
87  }
88  $parms['rdcstatus'] = 'T';
89  $return['data']['terms'] = $rdcterms['data']['TermsXhtml'];
90  } else {
91  $rdcterms = array();
92  $parms['rdcstatus'] = 'S';
93  $return['data']['terms'] = '';
94  }
95  $parms['vendorinfo'] = array("SessionStateId" => $session['data']['vendorinfo']['SessionStateId'],
96  "Vendortime" => $session['data']['vendorinfo']['Vendortime'],
97  "userAgent" => $_SERVER['HTTP_USER_AGENT'],
98  "userIP" => $_SERVER['REMOTE_ADDR'],
99  "accounts" => $session['data']['vendorinfo']['accounts']);
100  $return['data']['accounts'] = $parms['vendorinfo']['accounts'];
101  # return basic info only if we are recycling a session
102 
103  } else {
104  # no session to recycle, or only old sessions
105  # format StartSession Request
106  $rdcresult = ensentaStartSession($parms);
107 
108  # check return values for error
109  if ($rdcresult['status']['response'] == 'false' || $rdcresult['data']['ResponseCode'] != '00') {
110  $e = ($rdcresult['status']['response'] == 'false' ? 'Ensenta Connection failed' :
111  "Connection Failed - " . $rdcresult['data']['ResponseCode'] . ' ' .
112  $rdcresult['data']['ErrorResponseText'] . ' ' . $rdcresult['data']['LocalizedMessageText'] );
113  throw new Exception($e, 300);
114  }
115  if ($rdcresult['data']['ResponseCode'] != '00') {
116  # Error , call throw exception
117  throw new Exception($rdcresult['data']['ResponseCode'] . ' ' . $rdcresult['data']['ErrorResponseText'] . ' ' . $rdcresult['data']['LocalizedMessageText'], 300);
118  }
119 
120  $parms['SessionStateId'] = $rdcresult['data']['SessionStateId'];
121  # check return values for 'need acceptance'
122  if ($rdcresult['data']['IsTermsAcceptanceRequired'] == 'true') {
123  $rdcterms = ensentaGetTerms($parms);
124  if ($rdcterms['status']['response'] == 'false' || $rdcterms['data']['ResponseCode'] != '00') {
125  $e = ($rdcterms['status']['response'] == 'false' ? 'Ensenta GetTerms call failed' :
126  "Terms - " . $rdcterms['data']['ResponseCode'] . ' ' . $rdcterms['data']['ErrorResponseText'] . ' ' . $rdcterms['data']['LocalizedMessageText']);
127  throw new Exception($e, 301);
128  }
129  $parms['rdcstatus'] = 'T';
130  } else {
131  $rdcterms = array();
132  $parms['rdcstatus'] = 'S';
133  }
134  # get intersection of $hculist & $rdcsent['data']['AccountKeys']
135  $return = RDCPresentAccounts($parms, $hculist, $rdcresult, $rdcterms);
136  if ($return['status']['response'] == 'false') {
137  # error send fail
138  throw new Exception($return['status']['message'], $return['status']['code']);
139  }
140  $parms['vendorinfo'] = array("SessionStateId" => $parms['SessionStateId'],
141  "Vendortime" => mktime(),
142  "userAgent" => $_SERVER['HTTP_USER_AGENT'],
143  "userIP" => $_SERVER['REMOTE_ADDR'],
144  "accounts" => $return['data']['accounts'],
145  "depmessages" => $return['data']['depmessages']);
146  }
147  # start curdc record, return depositid as part of result
148  $depostat = curdc_start($dbh, $parms);
149  if ($depostat['status']['response'] == 'false') {
150  # error send fail
151  throw new Exception('HomeCU Start Deposit Failed', 200);
152  }
153  $parms['depositid'] = $depostat['data']['depositid'];
154  $return['data']['depositid'] = $parms['depositid'];
155 
156  $depostat = curdc_setvinfo($dbh, array('Cu' => $parms['Cu'], 'depositid' => $parms['depositid'],
157  'vendorinfo' => json_encode($parms['vendorinfo'])));
158  if ($depostat['status']['response'] == 'false') {
159  # error send fail
160  throw new Exception($depostat['status']['message'], $depostat['status']['code']);
161  }
162  } catch (Exception $e) {
163  $return['status']['response'] = 'false';
164  $return['status']['code'] = $e->getCode();
165  $return['status']['message'] = "(" . $e->getLine() . ") " . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8', FALSE);
166  }
167  return $return;
168 }
169 
170 function RDCaccept($dbh, $HB_ENV, $MC, $parms) {
171 # requires: $parms['Cu']
172 # $parms['depositid']
173 # Additional values retrieved and decoded from cutrusteddetail
174 # or from curdcstatus record using depositid as key
175 # returns:
176  # assume we are going to succeed...
177  $return['status']['response'] = 'true';
178  $return['status']['code'] = '000';
179  $return['status']['message'] = 'Success';
180 
181  try {
182  if (!isset($parms['Cu']) || !isset($parms['depositid'])) {
183  throw new Exception('Missing Parameters', 100);
184  }
185  # look up depositid
186  # decode vendorinfo
187  $depo = curdc_read($dbh, $parms);
188  if ($depo['status']['response'] == 'false') {
189  throw new Exception('HomeCU DepositID not found', 205);
190  }
191  $parms['SessionStateId'] = $depo['data']['vendorinfo']['SessionStateId'];
192  $rdcresult = ensentaAcceptTerms($parms);
193  # check return values for error
194 // return($rdcresult);
195  if ($rdcresult['status']['response'] == 'false' || $rdcresult['data']['ResponseCode'] != '00') {
196  $e = ($rdcresult['status']['response'] == 'false' ? 'Ensenta AcceptTerms call failed' :
197  "AcceptTerms - " . $rdcresult['data']['ResponseCode'] . ' ' . $rdcresult['data']['ErrorResponseText'] . ' ' . $rdcresult['data']['LocalizedMessageText']);
198  throw new Exception($e, 305);
199  }
200  $return['status']['message'] = 'Ensenta Accept Terms OK';
201  $vendorinfo = $depo['vendorinfo'];
202  $vendorinfo['terms'] = '';
203  $vendorinfo['Vendortime'] = mktime();
204  $parms['vendorinfo'] = $vendorinfo;
205 
206  # update curdcstatus record
207  $parms['rdcstatus'] = 'O';
208  $depostat = curdc_setvinfo($dbh, array('Cu' => $parms['Cu'], 'depositid' => $parms['depositid'],
209  'rdcstatus' => $parms['rdcstatus'], 'vendorinfo' => json_encode($parms['vendorinfo'])));
210  if ($depostat['status']['response'] == 'false') {
211  # error send fail
212  throw new Exception($depostat['status']['message'], $depostat['status']['code']);
213  }
214  } catch (Exception $e) {
215  $return['status']['response'] = 'false';
216  $return['status']['code'] = $e->getCode();
217  $return['status']['message'] = "(" . $e->getLine() . ") " . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8', FALSE);
218  }
219  return $return;
220 }
221 
222 function RDChistorylist($dbh, $parms) {
223 # requires: $parms['Cu']
224 # $parms['depositid']
225 # Additional values retrieved and decoded from cutrusteddetail
226 # or from curdcstatus record using depositid as key
227 # returns:
228  # assume we are going to succeed...
229  $return['status']['response'] = 'true';
230  $return['status']['code'] = '000';
231  $return['status']['message'] = 'Success';
232 
233  try {
234  if (!isset($parms['Cu']) || !isset($parms['depositid'])) {
235  throw new Exception('Missing Parameters', 100);
236  }
237  # look up depositid
238  # decode vendorinfo
239  $depo = curdc_read($dbh, $parms);
240  if ($depo['status']['response'] == 'false') {
241  throw new Exception("HomeCU DepositID not found [{$parms['depositid']}]", 205);
242  }
243 
244  $parms['SessionStateId'] = $depo['data']['vendorinfo']['SessionStateId'];
245  # format AcceptTerms Request
246  $rdcresult = ensentaGetHistoryList($parms);
247  # check return values for error
248 // return($rdcresult);
249  if ($rdcresult['status']['response'] == 'false' || $rdcresult['data']['ResponseCode'] != '00') {
250  $e = ($rdcresult['status']['response'] == 'false' ? 'Ensenta Get History List call failed' :
251  "GetHistoryList - " . $rdcresult['data']['ResponseCode'] . ' ' . $rdcresult['data']['ErrorResponseText'] . ' ' . $rdcresult['data']['LocalizedMessageText']);
252  throw new Exception($e, 305);
253  }
254  $return['status']['message'] = 'Ensenta History List OK';
255  $vendorinfo = $depo['vendorinfo'];
256  $vendorinfo['Vendortime'] = mktime();
257  $parms['vendorinfo'] = $vendorinfo;
258 
259  # update curdcstatus record
260 
261  $depostat = curdc_setvinfo($dbh, array('Cu' => $parms['Cu'], 'depositid' => $parms['depositid'],
262  'vendorinfo' => json_encode($parms['vendorinfo'])));
263  if ($depostat['status']['response'] == 'false') {
264  # error send fail
265  throw new Exception($depostat['status']['message'], $depostat['status']['code']);
266  }
267  $return['data'] = $rdcresult['data'];
268  $return['data']['rdcvendor'] = $depo['data']['rdcvendor'];
269  } catch (Exception $e) {
270  $return['status']['response'] = 'false';
271  $return['status']['code'] = $e->getCode();
272  $return['status']['message'] = "(" . $e->getLine() . ") " . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8', FALSE);
273  }
274  return $return;
275 }
276 
277 function RDChistorydetl($dbh, $parms) {
278 # requires: $parms['Cu']
279 # $parms['transactionid']
280 # Additional values retrieved and decoded from cutrusteddetail
281 # or from curdcstatus record using depositid as key
282 # returns:
283  # assume we are going to succeed...
284  $return['status']['response'] = 'true';
285  $return['status']['code'] = '000';
286  $return['status']['message'] = 'Success';
287 
288  try {
289  if (!isset($parms['Cu']) || !isset($parms['transactionid']) || !isset($parms['depositid'])) {
290  throw new Exception('Missing Parameters', 100);
291  }
292  # look up depositid
293  # decode vendorinfo
294  $depo = curdc_read($dbh, $parms);
295  if ($depo['status']['response'] == 'false') {
296  throw new Exception('HomeCU DepositID not found', 205);
297  }
298  $parms['SessionStateId'] = $depo['data']['vendorinfo']['SessionStateId'];
299  $rdcresult = ensentaGetHistoryDetl($parms);
300  if ($rdcresult['status']['response'] == 'false' || $rdcresult['data']['ResponseCode'] != '00') {
301  $e = ($rdcresult['status']['response'] == 'false' ? 'Ensenta Get History Details call failed' :
302  "GetHistoryDetl - " . $rdcresult['data']['ResponseCode'] . ' ' . $rdcresult['data']['ErrorResponseText'] . ' ' . $rdcresult['data']['LocalizedMessageText']);
303  throw new Exception($e, 305);
304  }
305  $return['status']['message'] = 'Ensenta GetHistoryDetl OK';
306  $vendorinfo = $depo['vendorinfo'];
307  $vendorinfo['Vendortime'] = mktime();
308  $parms['vendorinfo'] = $vendorinfo;
309 
310  # update curdcstatus record
311  $depostat = curdc_setvinfo($dbh, array('Cu' => $parms['Cu'], 'depositid' => $parms['depositid'],
312  'vendorinfo' => json_encode($parms['vendorinfo'])));
313  if ($depostat['status']['response'] == 'false') {
314  # error send fail
315  throw new Exception($depostat['status']['message'], $depostat['status']['code']);
316  }
317  $return['data'] = $rdcresult['data'];
318  } catch (Exception $e) {
319  $return['status']['response'] = 'false';
320  $return['status']['code'] = $e->getCode();
321  $return['status']['message'] = "(" . $e->getLine() . ") " . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8', FALSE);
322  }
323  return $return;
324 }
325 
326 function RDCdeposit($dbh, $parms) {
327 # requires: $parms['Cu']
328 # $parms['depositid']
329 # $parms['amount']
330 # $parms['acctid']
331 # $parms['rdcacctid']
332 # Additional values retrieved and decoded from cutrusteddetail
333 # or from curdcstatus record using depositid as key
334 # returns:
335  # assume we are going to succeed...
336  $return['status']['response'] = 'true';
337  $return['status']['message'] = 'Success';
338  $return['status']['code'] = '000';
339  try {
340  if (!isset($parms['Cu']) || !isset($parms['depositid']) ||
341  !isset($parms['amount']) || !isset($parms['acctid'])) {
342 // !isset($parms['rdcacctid'])) {
343 // $s='Missing ';
344 // if (!isset($parms['Cu'])) $s .= 'Cu ';
345 // if (!isset($parms['depositid'])) $s .= 'depositid ';
346 // if (!isset($parms['amount'])) $s .= 'amount ';
347 // if (!isset($parms['acctid'])) $s .= 'acctid ';
348 // if (!isset($parms['rdcacctid'])) $s .= 'rdcacctid ';
349 // throw new Exception($s, 100);
350  throw new Exception('Missing Parameters', 100);
351  }
352  /*
353  * need to use $parms['acctid'] to retrieve info about receiving account
354  * get from vendorinfo['accounts'] stored in deposit record, as that includes
355  * vendor-returned info
356  */
357 
358  # look up depositid
359  $depo = curdc_read($dbh, $parms);
360  if ($depo['status']['response'] == 'false') {
361  throw new Exception('HomeCU DepositID not found', 205);
362  }
363  $fail = '';
364  switch ($depo['data']['status']) {
365  case 'T':
366  $fail = 'Must accept terms of use before depositing funds';
367  break;
368  case 'R':
369  $fail = 'Deposit has been rejected';
370  break;
371  case 'C':
372  $fail = 'Deposit already completed';
373  break;
374  case 'B':
375  case 'F':
376  if (!isset($parms['POSTAWAY'])) {
377  $fail = 'Deposit requires override confirmation';
378  }
379  break;
380  }
381  if ("$fail" != '') {
382  throw new Exception($fail, 229);
383  }
384  if (is_null($depo['data']['frontpath']) || is_null($depo['data']['backpath']) || !getimagesize($depo['data']['frontpath']) || !getimagesize($depo['data']['backpath'])) {
385  throw new Exception('Check Images not found', 220);
386  }
387  $vendorinfo = $depo['data']['vendorinfo'];
388 
389  // Store amount, selected account in curdcstatus table
390  $depostat = curdc_update($dbh, array('Cu' => $parms['Cu'], 'depositid' => $parms['depositid'],
391  'amount' => $parms['amount'], 'acctid' => $parms['acctid']));
392  if ($depostat['status']['response'] == 'false') {
393  throw new Exception('HomeCU Update Deposit Amount Failed', 225);
394  }
395 
396  $parms['SessionStateId'] = $vendorinfo['SessionStateId'];
397  $acctid = $parms['acctid'];
398  $hculist = RDCGetAccts($dbh, $parms, $acctid);
399 
400  if ($hculist['status']['response'] !== 'true') {
401  throw new Exception('Invalid Deposit Account', 230);
402  }
403 
404  $parms['rdcacctid'] = $vendorinfo['accounts'][$acctid]['RDCAcctId'];
405  if (!isset($parms['rdcacctid'])) {
406  throw new Exception('Invalid Deposit Account rdcacctid', 233);
407  }
408 // $rdcparms['RDCAcctList'] = $hculist['data']; # this stored list of only the selected account
409  $parms['RDCAcctList'] = $vendorinfo['accounts']; # use vendorinfo values retrieved from curdc_read instead
410  $parms['deplimit'] = $dl;
411 
412  /*
413  * upload ea. check image
414  */
415  $musteval = 0;
416  if ($depo['data']['frontaccept'] !== 'Y') {
417  $parms['FB'] = 'Front'; #front
418  $parms['CheckImage'] = base64_encode(file_get_contents($depo['data']['frontpath']));
419  $uplresult = ensentaUploadCheck($parms);
420  if ($uplresult['status']['response'] == 'false' || $uplresult['data']['ResponseCode'] != '00') {
421  $e = ($uplresult['status']['response'] == 'false' ? 'Front - Upload call failed' :
422  "Front - " . $uplresult['data']['ResponseCode'] . ' ' . $uplresult['data']['ErrorResponseText'] . ' ' . $rdcresult['data']['LocalizedMessageText']);
423  throw new Exception($e, 235);
424  }
425  $musteval = 1; # if we upload an image, must re-evaluate
426  $depostat = curdc_update($dbh, array('Cu' => $parms['Cu'], 'depositid' => $parms['depositid'], 'frontaccept' => 'Y'));
427  if ($depostat['status']['response'] == 'false') {
428  throw new Exception('HomeCU Update Deposit FrontImage Failed', 240);
429  }
430  $vendorinfo['Vendortime'] = mktime();
431  $depostat = curdc_setvinfo($dbh, array('Cu' => $parms['Cu'], 'depositid' => $parms['depositid'],
432  'vendorinfo' => json_encode($vendorinfo)));
433  if ($depostat['status']['response'] == 'false') {
434  throw new Exception($depostat['status']['message'], $depostat['status']['code']);
435  }
436  }
437  if ($depo['data']['backaccept'] !== 'Y') {
438  $parms['FB'] = 'Back'; #back
439  $parms['CheckImage'] = base64_encode(file_get_contents($depo['data']['backpath']));
440  $uplresult = ensentaUploadCheck($parms);
441  if ($uplresult['status']['response'] == 'false' || $uplresult['data']['ResponseCode'] != '00') {
442  $e = ($uplresult['status']['response'] == 'false' ? 'Back - Upload call failed' :
443  "Back - " . $uplresult['data']['ResponseCode'] . ' ' . $uplresult['data']['ErrorResponseText'] . ' ' . $rdcresult['data']['LocalizedMessageText']);
444  throw new Exception($e, 235);
445  }
446  $musteval = 1; # if we upload an image, must re-evaluate
447  $depostat = curdc_update($dbh, array('Cu' => $parms['Cu'], 'depositid' => $parms['depositid'], 'backaccept' => 'Y'));
448  if ($depostat['status']['response'] == 'false') {
449  throw new Exception('HomeCU Update Deposit BackImage Failed', 240);
450  }
451  $vendorinfo['Vendortime'] = mktime();
452  $depostat = curdc_setvinfo($dbh, array('Cu' => $parms['Cu'], 'depositid' => $parms['depositid'],
453  'vendorinfo' => json_encode($vendorinfo)));
454  if ($depostat['status']['response'] == 'false') {
455  throw new Exception($depostat['status']['message'], $depostat['status']['code']);
456  }
457  }
458  # and now clear out the CheckImage so we aren't passing huge data around
459  $parms['CheckImage'] = '';
460  if ($musteval) {
461  $rdcresult = ensentaEvaluateDeposit($parms);
462 
463  if ($rdcresult['status']['response'] == 'false') {
464 
465  throw new Exception('EvaluateDeposit call failed <br>', 241);
466  }
467  switch ($rdcresult['data']['ResponseCode']) {
468  case "00":
469  case "E35":
470  case "EL1":
471  case "EL2":
472  case "EL3":
473  case "EL4":
474  case "EL5":
475  case "EL6":
476  case "EL7":
477  case "EL8":
478  case "E33":
479  break;
480  default:
481  throw new Exception($rdcresult['data']['ResponseCode'] . ' ' . $rdcresult['data']['ErrorResponseText'] . ' ' . $rdcresult['data']['LocalizedMessageText'], 241);
482  }
483  if ($rdcresult['data']['ResponseCode'] == 'E35') {
484  $parms['rdcstatus'] = 'R'; #rejected
485  $rdcblock = 2;
486  } else {
487  if (!sizeof($rdcresult['data']['Risks'])) {
488  $parms['rdcstatus'] = 'O'; # OK go ahead
489  $rdcblock = 0;
490  } else {
491  $parms['rdcstatus'] = 'B'; #default to blocked, determine fixable/confirmable in a minute
492  $rdcblock = 1;
493  }
494  }
495  $reportrisks = array();
496  $f = 0;
497  $c = 0;
498  $r = 0;
499  if (sizeof($rdcresult['data']['Risks'])) {
500  foreach ($rdcresult['data']['Risks'] as $key => $details) {
501  $fc = ($details['IsConfirmable'] == 'true' ? 'Confirmable' :
502  ($details['IsFixable'] == 'true' ? 'Fixable' : 'Rejected'));
503  switch ($fc) {
504  case "Confirmable":
505  $c++;
506  break;
507  case "Fixable":
508  $f++;
509  break;
510  case "Rejected":
511  $r++;
512  break;
513  }
514 
515  $reportrisks[] = array('RiskId' => $details['RiskFactorId'],
516  'RiskDesc' => $details['DepositRiskFactorDescription'],
517  'Severity' => $details['Severity'],
518  'RiskType' => $fc);
519  }
520  if ($r > 0) {
521  $parms['rdcstatus'] = 'R'; # rejected, something is neither fixable nor confirmable
522  } elseif ($f > 0) {
523  $parms['rdcstatus'] = 'F'; # at least one Fixable risk found, something (probably amount) must change
524  } elseif ($c > 0) {
525  $parms['rdcstatus'] = 'B'; # most severe risk was Confirmable, ok to insist
526  }
527  }
528  $vendorinfo['Vendortime'] = mktime();
529  $vendorinfo['rdcblock'] = $rdcblock;
530  $vendorinfo['risks'] = $reportrisks;
531  if (isset($rdcresult['data']['LocalizedFundsAvailTxt'])) {
532  $vendorinfo['fundsavailable'] = $rdcresult['data']['LocalizedFundsAvailTxt'];
533  $return['data']['fundsavailable'] = $rdcresult['data']['LocalizedFundsAvailTxt'];
534  }
535  $depostat = curdc_setvinfo($dbh, array('Cu' => $parms['Cu'], 'depositid' => $parms['depositid'],
536  'rdcstatus' => $parms['rdcstatus'], 'vendorinfo' => json_encode($vendorinfo)));
537  if ($depostat['status']['response'] == 'false') {
538  throw new Exception('HomeCU Update Vendorinfo Failed', 240);
539  }
540  $return['status']['code'] = '000';
541  $return['status']['response'] = 'true';
542  $return['status']['message'] = 'Ensenta Evaluate Results';
543  $return['data']['Risks'] = $reportrisks;
544  $return['data']['depositid'] = $parms['depositid'];
545  $return['data']['rdcstatus'] = $parms['rdcstatus'];
546 
547  } # end of if musteval test
548  # format DoDeposit Request
549  /*
550  * check deposit status first - can't deposit if
551  * terms need accepted or evaluate failed
552  */
553  if ($rdcblock == 0 || ($musteval == 0 && isset($parms['POSTAWAY']))) {
554  $rdcresult = ensentaDoDepositTransaction($parms);
555  if ($rdcresult['status']['response'] == 'false') {
556  throw new Exception('DoDepositTransaction call failed', 242);
557  }
558  # check return values for error
559  switch ($rdcresult['data']['ResponseCode']) {
560  case "00":
561  case "E35":
562  case "EL1":
563  case "EL2":
564  case "EL3":
565  case "EL4":
566  case "EL5":
567  case "EL6":
568  case "EL7":
569  case "EL8":
570  case "E33":
571  break;
572  default:
573  throw new Exception($rdcresult['data']['ResponseCode'] . ' ' . $rdcresult['data']['ErrorResponseText'] . ' ' . $rdcresult['data']['LocalizedMessageText'], 241);
574  }
575  if ($rdcresult['data']['ResponseCode'] == '00') {
576  # get TransactionReceiptNumber and TransactionDateTime, save as part of vendorinfo
577  $parms['rdcstatus'] = 'C';
578  $vendorinfo['Vendortime'] = mktime();
579  $vendorinfo['ResponseCode'] = $rdcresult['data']['ResponseCode'];
580  $vendorinfo['TransactionReceiptNumber'] = $rdcresult['data']['TransactionReceiptNumber'];
581  $vendorinfo['TransactionDateTime'] = $rdcresult['data']['TransactionDateTime'];
582  if (isset($rdcresult['data']['LocalizedFundsAvailTxt'])) {
583  $vendorinfo['fundsavailable'] = $rdcresult['data']['LocalizedFundsAvailTxt'];
584  $return['data']['fundsavailable'] = $rdcresult['data']['LocalizedFundsAvailTxt'];
585  }
586 
587 // $vendorinfo['raw']=$rdcresult['data']['raw'];
588  $depostat = curdc_setvinfo($dbh, array('Cu' => $parms['Cu'], 'depositid' => $parms['depositid'],
589  'rdcstatus' => $parms['rdcstatus'], 'vendorinfo' => json_encode($vendorinfo)));
590  if ($depostat['status']['response'] == 'false') {
591  throw new Exception('HomeCU Update Vendorinfo Failed', 240);
592  }
593  $return['status']['response'] = 'true';
594  $return['status']['message'] = 'Ensenta Deposit Complete';
595  # this returns everything from Ensenta, but that will be a problem if we add other vendors
596  # pick a list of stuff to return and be consistent for everyone?
597  $return['data'] = $rdcresult['data'];
598  if (!empty($vendorinfo['fundsavailable'])) {
599  $return['data']['fundsavailable'] = $vendorinfo['fundsavailable'];
600  }
601  $hcumessage = "Your deposit request has been received for account {$rdcresult['data']['MaskedAccountholderNumber']}. ";
602  $hcumessage .= "Your confirmation number is '{$rdcresult['data']['TransactionReceiptNumber']}'. ";
603  $hcumessage .= "Please save this number and refer to it if you need to contact the credit union regarding this transaction. ";
604  $return['data']['HCUReceiptMessage'] = $hcumessage;
605  } elseif ($rdcresult['data']['ResponseCode'] == 'E35') {
606  # process Risks to describe failure
607  # show LocalizedMessageText
608  $parms['rdcstatus'] = 'R';
609  $vendorinfo['Vendortime'] = mktime();
610  $vendorinfo['ResponseCode'] = $rdcresult['data']['ResponseCode'];
611  $vendorinfo['FailReasons'] = $rdcresult['data']['FailReasons'];
612  if (isset($rdcresult['data']['LocalizedFundsAvailTxt'])) {
613  $vendorinfo['fundsavailable'] = $rdcresult['data']['LocalizedFundsAvailTxt'];
614  $return['data']['fundsavailable'] = $rdcresult['data']['LocalizedFundsAvailTxt'];
615  }
616 // $vendorinfo['raw']=$rdcresult['data']['raw'];
617  $depostat = curdc_setvinfo($dbh, array('Cu' => $parms['Cu'], 'depositid' => $parms['depositid'],
618  'rdcstatus' => $parms['rdcstatus'], 'vendorinfo' => json_encode($vendorinfo)));
619  if ($depostat['status']['response'] == 'false') {
620  throw new Exception('HomeCU Update Vendorinfo Failed', 240);
621  }
622  $return['status']['response'] = 'true';
623  $return['status']['message'] = 'Ensenta Deposit Rejected';
624  $return['data'] = $rdcresult['data'];
625 // $return['data']['raw']=$rdcresult;
626  } else {
627  # E33 or one of the EL Limit errors
628  # show localizedmessagetext
629  $parms['rdcstatus'] = 'R';
630  $vendorinfo['Vendortime'] = mktime();
631  $vendorinfo['ResponseCode'] = $rdcresult['data']['ResponseCode'];
632  $vendorinfo['LocalizedMessageText'] = $rdcresult['data']['LocalizedMessageText'];
633  if (isset($rdcresult['data']['LocalizedFundsAvailTxt'])) {
634  $vendorinfo['fundsavailable'] = $rdcresult['data']['LocalizedFundsAvailTxt'];
635  $return['data']['fundsavailable'] = $rdcresult['data']['LocalizedFundsAvailTxt'];
636  }
637 
638 // $vendorinfo['raw']=$rdcresult['data']['raw'];
639  $depostat = curdc_setvinfo($dbh, array('Cu' => $parms['Cu'], 'depositid' => $parms['depositid'],
640  'rdcstatus' => $parms['rdcstatus'], 'vendorinfo' => json_encode($vendorinfo)));
641  if ($depostat['status']['response'] == 'false') {
642  throw new Exception('HomeCU Update Vendorinfo Failed', 240);
643  }
644  $return['status']['response'] = 'true';
645  $return['status']['message'] = 'Ensenta Deposit Rejected';
646  $return['data'] = $rdcresult['data'];
647  }
648  $return['data']['depositid'] = $parms['depositid'];
649  $return['data']['rdcstatus'] = $parms['rdcstatus'];
650  }
651 
652  } catch (Exception $e) {
653  $return['status']['response'] = 'false';
654  $return['status']['code'] = $e->getCode();
655  $return['status']['message'] = "(" . $e->getLine() . ") " . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8', FALSE);
656  }
657 
658  return $return;
659 }
660 
661 function RDCGetAccts($dbh, $parms, $Acctid="") {
662  $AcctList=array();
663 
664  if (!isset($parms['Cu']) || !isset($parms['Uid']) || !isset($parms['MBRACCT'])) {
665 // RDC_response('910', array('Settings Error'), 'ERROR'); # RDCGetAccts not enough info provided
666  $AcctList['status']['response'] = 'false';
667  $AcctList['status']['code'] = '910';
668  $AcctList['status']['message'] = 'Missing RDC Account Parameters'; # RDCGetAccts missing Cu/Cn
669 
670  return ($AcctList);
671 
672  }
673 
674  $Cu = $parms['Cu'];
675  $Uid = $parms['Uid'];
676  $Fset2 = $parms['Fset2'];
677  $Fset3 = $parms['Fset3'];
678  $balwhere = $parms['balwhere'];
679  $lnwhere = $parms['lnwhere'];
680  $MBRACCT = $parms['MBRACCT'];
681 
682 # default allow deposit, loan pmt, credit card pmt
683  $rtxn = ( HCU_array_item_count('rtxn',$parms) == 0 ?
684  array('AT' => 1, 'LP' => 1, 'CP' => 1) :
685  json_decode($parms['rtxn'],TRUE) );
686  $savingsql = (!isset($parms['savingsql']) ?
687  "trim(accounttype)" :
688  $parms['savingsql'] );
689  $draftsql = (!isset($parms['draftsql']) ?
690  "trim(accounttype)" :
691  $parms['draftsql'] );
692  $loansql = (!isset($parms['loansql']) ?
693  "trim(loannumber)" :
694  $parms['loansql'] );
695  $mbrsql = (!isset($parms['mbrsql']) ?
696  "trim(accountnumber)" :
697  $parms['mbrsql'] );
698 
699 # fetch transactions types
700 
701  $sql = "select ht.trancode, trim(t.trandesc), trim(ht.cudesc), t.specialproc
702  from cutrans t, cuhavetrans ht
703  where ht.cu='$Cu'
704  and ht.trancode = t.trancode\n";
705 
706  $sth = db_query($sql, $dbh);
707  #
708  # Return a line for each allowed transaction type.
709  #
710  $txncodes = array();
711  for ($row = 0; list($code, $desc, $cudesc, $spec) = db_fetch_array($sth, $row); $row++) {
712  $txncodes{$code} = array($desc, $spec, $cudesc);
713  }
714  db_free_result($sth);
715 
716  $sql = "";
717  $verb = "";
718 
719  $sv_rdctype = (!isset($parms['sv_rdctype']) ? '0' : $parms['sv_rdctype']);
720  $ck_rdctype = (!isset($parms['ck_rdctype']) ? '1' : $parms['ck_rdctype']);
721  $ln_rdctype = (!isset($parms['ln_rdctype']) ? '128' : $parms['ln_rdctype']);
722  $sv_rdctype = (str_word_count ( $sv_rdctype , 0 , '0123456789' ) > 1 ? $sv_rdctype : "'$sv_rdctype'");
723  $ck_rdctype = (str_word_count ( $ck_rdctype , 0 , '0123456789' ) > 1 ? $ck_rdctype : "'$ck_rdctype'");
724  $ln_rdctype = (str_word_count ( $ln_rdctype , 0 , '0123456789' ) > 1 ? $ln_rdctype : "'$ln_rdctype'");
725 
726 
727 
728 # find out how many valid accounts the member has:
729 $sql = "WITH accountlist as (
730  SELECT ab.accountnumber,
731  ua.display_name,
732  description,
733  ua.accounttype as accounttype,
734  ua.certnumber as certnumber,
735  ua.recordtype,
736  0 as creditlimit,
737  ua.view_balances,
738  ua.view_transactions,
739  ab.deposittype,
740  'DP' as cbtype, amount as currentbalance,
741  ua.display_order,
742  trim(ab.micraccount) as micraccount
743  FROM {$Cu}useraccounts as ua
744  INNER JOIN {$Cu}accountbalance as ab ON ab.accountnumber = ua.accountnumber
745  AND ab.accounttype = ua.accounttype
746  AND ua.certnumber = ua.certnumber
747  WHERE ua.user_id = $Uid
748  AND ua.accountnumber = '{$MBRACCT}'
749  AND ua.recordtype = 'D'
750  AND ab.may_deposit = true
751  UNION
752  SELECT lb.accountnumber,
753  ua.display_name,
754  description,
755  ua.accounttype,
756  ua.certnumber,
757  ua.recordtype,
758  lb.creditlimit,
759  ua.view_balances,
760  ua.view_transactions,
761  'L' as deposittype,
762  lb.cbtype, currentbalance as currentbalance,
763  ua.display_order,
764  ''
765  FROM {$Cu}useraccounts as ua
766  INNER JOIN {$Cu}loanbalance as lb ON lb.accountnumber = ua.accountnumber
767  AND lb.loannumber = ua.accounttype
768  WHERE ua.user_id =$Uid
769  AND ua.accountnumber = '{$MBRACCT}'
770  AND ua.recordtype = 'L'
771  AND lb.may_payment = true ) ";
772 
773  if (HCU_array_key_exists('AT',$txncodes) && HCU_array_key_exists('AT',$rtxn)) {
774 # $txncodes is configured list @HCU - $rtxn is allowed list for RDC
775 
776 
777  $sql .= "SELECT recordtype as tbl,
778  $mbrsql as rdcmember, trim(description) as description,
779  trim(display_name) as display_name,
780  trim(accounttype) as accounttype, $savingsql as suffix,
781  certnumber as certnumber, $sv_rdctype as rdctype,
782  display_order, trim(accountnumber) as accountnumber
783  FROM accountlist
784  WHERE recordtype = 'D' $balwhere
785  AND upper(deposittype) in ('S','N')
786  UNION
787  SELECT recordtype, $mbrsql as rdcmember,
788  trim(description), trim(display_name),
789  trim(accounttype), $draftsql,
790  certnumber, $ck_rdctype, display_order,
791  trim(accountnumber)
792  FROM accountlist
793  WHERE recordtype = 'D' $balwhere
794  AND upper(deposittype) = 'Y' ";
795 
796  $verb = " UNION ";
797  }
798  if (HCU_array_key_exists('LP',$txncodes) && HCU_array_key_exists('LP',$rtxn)) {
799 
800  $sql .= "$verb
801  SELECT 'L', $mbrsql as rdcmember,
802  trim(description), trim(display_name),
803  trim(accounttype), $loansql,'0', $ln_rdctype, display_order,
804  trim(accountnumber)
805  FROM accountlist
806  WHERE recordtype = 'L' $lnwhere
807  AND currentbalance > 0 ";
808  if ($Fset2 & GetFlagsetValue("CU2_SPEC18")) {
809  $sql .= " and (cbtype <> '18' or cbtype is null) ";
810  if (HCU_array_key_exists('CP',$rtxn)) {
811  $sql .= "UNION
812  SELECT 'C', $mbrsql as rdcmember,
813  trim(description), trim(display_name),
814  trim(loannumber), $loansql, '0', $ln_rdctype, display_order,
815  trim(accountnumber)
816  FROM accountlist
817  WHERE recordtype='L' $lnwhere
818  AND type = '18' ";
819  if (!($Fset2 & GetFlagsetValue("CU2_CC18SHOWZERO"))) {
820  $sql .= " and currentbalance > 0 ";
821  }
822  }
823  }
824  }
825  $sql .= " order by 6,2,3";
826  $acct_rs = db_query($sql, $dbh);
827 
828  if (db_num_rows($acct_rs) == 0) {
829 // RDC_response('920', array('No Eligible Accounts'), 'ERROR'); # RDCGetAccts no valid accounts
830  $AcctList['status']['response'] = 'false';
831  $AcctList['status']['code'] = '920';
832  $AcctList['status']['message'] = htmlspecialchars('No Eligible RDC <test>Accounts', ENT_QUOTES,'UTF-8',FALSE); # RDCGetAccts no valid accounts
833  $AcctList['status']['sql'] = $sql;
834 
835  } else {
836 
837  $AcctList['status']['response'] = 'true';
838  $AcctList['status']['code'] = '000';
839  $AcctList['status']['message'] = 'Success';
840  for ($row = 0; $drow = db_fetch_array($acct_rs, $row); $row++) {
841  $tbl = $drow['tbl'];
842  $accounttype = $drow['accounttype'];
843  $suffix = $drow['suffix'];
844  $cert = $drow['certnumber'];
845  $rdctype = $drow['rdctype'];
846  switch ($rdctype) {
847  case '0':
848  $rdcdesc='Savings';
849  break;
850  case '1':
851  $rdcdesc='Checking';
852  break;
853  case '32':
854  $rdcdesc='LOC';
855  break;
856  case '64':
857  $rdcdesc='CreditCard';
858  break;
859  case '128':
860  $rdcdesc='Loan';
861  break;
862  case '256':
863  $rdcdesc='Mortgage';
864  break;
865  default:
866  $rdcdesc='Savings';
867  break;
868  }
869  $rdcmember = $drow['rdcmember'];
870  if (strpos($accounttype, "@")) {
871  list($jtype,$jacct) = explode("@",$accounttype);
872  $trust = 'joint';
873  } else {
874  $jtype=$accounttype;
875  $jacct=$MBRACCT;
876  $trust = 'primary';
877  }
878  $tokn = sha1("${Uid}${accounttype}${Cu}${rdctype}obl1vi0u5");
879 
880  $desc = getAccountDescription($dbh, $Cu, $drow['accountnumber'], $drow['description'], $drow['accounttype'], $drow['display_name'], $Fset3, $drow['certnumber'], false, false);
881  $desc = htmlspecialchars($desc, ENT_QUOTES,'UTF-8',FALSE);
882  $displaydesc = $desc;
883 
884  $Accts["$tbl|$jacct|$jtype|$cert"]['accounttype'] = $accounttype;
885  $Accts["$tbl|$jacct|$jtype|$cert"]['suffix'] = $suffix;
886  $Accts["$tbl|$jacct|$jtype|$cert"]['certnumber'] = $cert;
887  $Accts["$tbl|$jacct|$jtype|$cert"]['acctclass'] = $tbl;
888  $Accts["$tbl|$jacct|$jtype|$cert"]['description'] = $desc;
889  $Accts["$tbl|$jacct|$jtype|$cert"]['tokn'] = "$tokn";
890  $Accts["$tbl|$jacct|$jtype|$cert"]['Uid'] = "$Uid";
891  $Accts["$tbl|$jacct|$jtype|$cert"]['trust'] = "$trust";
892  $Accts["$tbl|$jacct|$jtype|$cert"]['displaydesc'] = "$displaydesc";
893  $Accts["$tbl|$jacct|$jtype|$cert"]['rdctype'] = $rdctype;
894  $Accts["$tbl|$jacct|$jtype|$cert"]['rdcdesc'] = $rdcdesc;
895  $Accts["$tbl|$jacct|$jtype|$cert"]['rdcmember'] = $rdcmember;
896  }
897 
898  if (!empty($Acctid)) {
899  # got an account identifier - return one only
900  $AcctList['data'][$Acctid]=$Accts[$Acctid];
901  } else {
902  $AcctList['data']=$Accts;
903  }
904  }
905 
906  return ($AcctList);
907 }
908 /**
909  *
910  * @param array $parms
911  * @param array $hculist
912  * valid RDC accounts on record at HomeCU
913  * @param type $rdcsent
914  * valid RDC accounts returned from vendor
915  * @param type $rdcterms
916  * terms of use returned from vendor
917  * @return array
918  * ['data']['accounts'] list of valid accounts
919  * each entry looks like this:
920  * ['D|666665|50|0'] => Array
921  (
922  ['suffix'] => 50
923  ['certnumber'] => 0
924  ['acctclass'] => D
925  ['description'] => REGULAR SHARES - 50
926  ['tokn'] => a9a525ac33035b7c3845809443c5eed626297e0f
927  ['member'] => 666665
928  ['tomember'] => 666665
929  ['trust'] => primary
930  ['displaydesc'] => REGULAR SHARES - 50
931  ['rdctype'] => 0
932  ['rdcdesc'] =>
933  ['RDCAcctId'] => 1
934  )
935  * Note that for Ensenta we pass a list of accounts on the 'start session' call
936  * if the client uses shared branching, Ensenta returns list of shared branching
937  * accounts, or if batch they return the same list we sent.
938  * We need to parse through the list they send to record the account identifier
939  * they will recognize & which we are required to use when making the deposit.
940  *
941  * ['data']['terms'] terms of use (if any) returned from rdc vendor
942  * ['data'] array also contains any values returned from rdc vendor on
943  * start session call. For Ensenta, these include:
944  * ['ResponseCode'] => 00
945  * ['SessionStateId'] => 55121227-e3ea-4524-8e34-dec9b199a3f3
946  * ['IsTermsAcceptanceRequired'] => false
947  * ['IsBlackListed'] => false
948  * ['ReceiptEmail'] =>
949  * ['accounts'] => Array
950  *
951  */
952 
953 function RDCPresentAccounts($parms, $hculist, $rdcsent, $rdcterms) {
954  switch ($parms['rdcvendor']) {
955  case "RDCENSENTA":
956  # build array list to send to app
957  # determine intersect of hculist, rdcsent
958  # include depositid
959  # include $rdcsent['SessionStateId'];
960  # include terms to be accepted if they are provided
961  # include labels acctttl, descttl
962 // $taglist = array();
963  /*
964  * First, populate pass_along with any specific data from Ensenta
965  */
966  $pass_along = $rdcsent;
967  unset($pass_along['data']['AccountKeys']);
968  /*
969  * Next, record the AccountNumberIndex from Ensenta
970  */
971  foreach ($rdcsent['data']['AccountKeys'] as $key => $value) {
972  $tag = $value['Tag'];
973  $desc = $value['Description']; # if we are using the shared branching description... overlay description in $hculist?
974  $idx = $value['AccountNumberIndex'];
975 // $taglist["$tag"]['IDX']=$idx;
976  $hculist['data']["$tag"]['RDCAcctId'] = $idx;
977  }
978  /*
979  * Then, pass back any accounts for which we got an AccountNumberIndex value
980  */
981  foreach ($hculist['data'] as $key => $value) {
982  if (isset($value['RDCAcctId']))
983  $pass_along['data']['accounts'][$key] = $value;
984  }
985 // # next if $tag does not occur in $rdcsent list
986 // # $pass_along['data']['accounts'][]=$value;
987 // }
988  if (sizeof($rdcterms) > 0) {
989  $pass_along['data']['terms'] = $rdcterms['data']['TermsXhtml'];
990  } else {
991  $pass_along['data']['terms'] = '';
992  }
993  $pass_along['status']['response'] = 'true';
994  $pass_along['status']['code'] = '000';
995  $pass_along['status']['message'] = 'Success';
996  break;
997  default:
998  $return['status']['response'] = 'false';
999  $return['status']['message'] = 'Invalid RDC Vendor';
1000  break;
1001  }
1002  return $pass_along;
1003 }
1004 
1005 function ensentaStartSession($parms) {
1006 # uses: $parms['partnerid']
1007 # $parms['RDCAcctList']
1008 # $parms['serviceurl']
1009 # $parms['certfile']
1010 # $parms['Cn']
1011 #
1012 # $parms['deplimit'] contains depositlimit from cuusers record
1013 
1014 
1015  if (!isset($parms['partnerid']) || !isset($parms['ssourl']) ||
1016  !isset($parms['certfile']) ||
1017  !isset($parms['Cn']) || sizeof($parms['RDCAcctList']) == 0) {
1018  $return['status']['response'] = 'false';
1019  $return['status']['message'] = 'Missing Parameters';
1020  $return['data'] = array();
1021  return $return;
1022  }
1023 
1024  $rdcSecretId = $parms['certfile'];
1025 
1026  /**
1027  * Retrieve and decrypt the cert file -- use rdccert as return value to limit scope of changes
1028  */
1029  $rdccert = GetAwsCertFile($rdcSecretId, HOMECU_ENC_CERT_DIR, HOMECU_DOCK_CERT_DIR);
1030 
1031  if ($rdccert == '' || !(is_readable($rdccert))) {
1032  $return['status']['response'] = 'false';
1033  $return['status']['message'] = "Invalid RDC Certificate";
1034  $return['data'] = array();
1035  return $return;
1036  }
1037 # $rdccert .= (trim($parms['passwd']) == '' ? "" : ":{$parms['passwd']}");
1038  $first = key($parms['RDCAcctList']);
1039  $accountholder = $parms['RDCAcctList'][$first]['rdcmember'];
1040  if (empty($accountholder))
1041  $accountholder = $parms['Cn'];
1042 
1043  $soapString = '<?xml version="1.0" encoding="utf-8"?>';
1044 
1045  $soapString .= "\n<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns=\"http://ensenta.com/ECPartnerDepositRequest/SingleSignon/PartnerSSORequest\">";
1046  $soapString .= "\n<soapenv:Header/>";
1047  $soapString .= "\n<soapenv:Body>";
1048  $soapString .= "<StartSession>
1049  <partnerId>{$parms['partnerid']}</partnerId>
1050  <customerInfo>
1051  <AccountHolderNumber>{$accountholder}</AccountHolderNumber>
1052  <Email>" . urldecode($parms['Ml']) . "</Email>
1053  <Name/>
1054  <LanguageId>9</LanguageId>";
1055 // <Tag>{$key}</Tag>
1056 // <Tag>{$value['suffix']}</Tag>
1057  foreach ($parms['RDCAcctList'] as $key => $value) {
1058  $soapString .= "<Accounts><AccountNumber>{$value['suffix']}</AccountNumber>
1059  <Description>{$value['displaydesc']}</Description>
1060  <AccountTypeCode>{$value['rdctype']}</AccountTypeCode>
1061  <AccountHolderNames/>
1062  <Tag>" . htmlentities($key, ENT_COMPAT, 'UTF-8', false) .
1063  "</Tag>
1064  <IsValid>false</IsValid>
1065  <AccountTypeDescription>{$value['rdcdesc']}</AccountTypeDescription></Accounts>\n";
1066  }
1067 
1068  $soapString .= "<DeviceIdentifier>" . htmlentities($_SERVER['HTTP_USER_AGENT'], ENT_QUOTES, 'UTF-8', false) . "</DeviceIdentifier>
1069  </customerInfo>
1070  </StartSession>
1071  </soapenv:Body>
1072 </soapenv:Envelope>\n";
1073 
1074  $cmd = "/usr/bin/curl --silent --cacert " . HOMECU_CACERT_DIR . "ComodoRSABundle.pem --data-binary '$soapString' -H 'Content-Type: text/xml; charset=utf-8' -E $rdccert";
1075  $cmd .= " -H 'SOAPAction: \"http://ensenta.com/ECPartnerDepositRequest/SingleSignon/PartnerSSORequest/IPartnerSSORequest/StartSession\"'";
1076  $cmd .= " {$parms['ssourl']}";
1077  #$cmd .= " https://webdeposit.test.ensenta.com/PartnerAPI/SingleSignon/PartnerSSORequest2.svc";
1078 
1079 // $response = getcurl($cmd);
1080  $soapHeaders = array();
1081  $soapHeaders[] = "Content-Type: text/xml; charset=utf-8";
1082  $soapHeaders[] = 'SOAPAction: "http://ensenta.com/ECPartnerDepositRequest/SingleSignon/PartnerSSORequest/IPartnerSSORequest/StartSession"';
1083 
1084  $response = embcurl($soapString, $soapHeaders, $parms['ssourl'], $rdccert);
1085 
1086  if ($parms["logging"] == "enabled") {
1087  $logParms = $parms["environment"]; // get the environment info passed in
1088  $logParms["SSOVendor"] = $parms['rdcvendor'];
1089  $logParms["token"] = $parms['Token']; // the id used across all communications in session
1090  $logParms["txnId"] = time(); // the id for this transaction
1091  $logParms["logPoint"] = "StartSession"; // this action in a readable form
1092  $logParms["request"] = $cmd; // the request
1093  $logParms["reply"] = $response; // the response
1094  LogSSOActivity($logParms);
1095  }
1096 
1097 
1098 
1099  $pos = strpos ( $response , 'HCUERROR: ' );
1100  if ($pos !== false ) {
1101  $return['status']['response'] = 'false';
1102  $return['status']['message'] = substr($response,$pos);
1103 // $return['status']['cmd'] = "$cmd";
1104  }
1105  if (empty($response)) {
1106  $return['status']['response'] = 'false';
1107  $return['status']['message'] = "RDC No Response";
1108  $return['status']['cmd'] = "$cmd";
1109  } else {
1110  $xmlreturn = ensentaGetXMLResponse($response, 'StartSessionResult', 'http://ensenta.com/ECPartnerDepositRequest/SingleSignon/PartnerSSORequest');
1111  $acctreturn = ensentaGetXMLResponse($response, 'AccountKeys', 'http://ensenta.com/ECPartnerDepositRequest/SingleSignon/PartnerSSORequest');
1112  $msgreturn = ensentaGetXMLResponse($response, 'CustomizableMessages', 'http://ensenta.com/ECPartnerDepositRequest/SingleSignon/PartnerSSORequest');
1113  if (!is_array($xmlreturn) || !is_array($acctreturn) || !is_array($msgreturn) || HCU_array_key_exists( "faultcode", $xmlreturn ) ) {
1114  $return['status']['response'] = 'false';
1115  if ($xmlreturn['faultcode']) {
1116  $return['status']['message'] = "RDC Fault {$xmlreturn['faultcode']} {$xmlreturn['faultstring']}";
1117  } else {
1118  $return['status']['message'] = "RDC Invalid XML Response";
1119  }
1120  $return['status']['cmd'] = "$cmd";
1121  } else {
1122  $return['status']['response'] = 'true';
1123  $return['status']['code'] = '000';
1124  $return['status']['message'] = 'Success';
1125  $return['data'] = $xmlreturn[0];
1126  $return['data']['AccountKeys'] = $acctreturn;
1127  $return['data']['depmessages'] = $msgreturn;
1128 // $return['request']=$soapString;
1129 // $return['raw']=$response;
1130  }
1131  }
1132  return $return;
1133 }
1134 
1135 function ensentaGetTerms($parms) {
1136 # uses: $parms['partnerid']
1137 # $parms['serviceurl']
1138 # $parms['certfile']
1139 # $parms['SessionStateId']
1140 
1141  if (!isset($parms['partnerid']) || !isset($parms['serviceurl']) ||
1142  !isset($parms['certfile']) ||
1143  !isset($parms['SessionStateId'])) {
1144  $return['status']['response'] = 'false';
1145  $return['status']['message'] = 'Missing Parameters';
1146  $return['data'] = array();
1147  return $return;
1148  }
1149 
1150  $rdcSecretId = $parms['certfile'];
1151 
1152  /**
1153  * Retrieve and decrypt the cert file -- use rdccert as return value to limit scope of changes
1154  */
1155  $rdccert = GetAwsCertFile($rdcSecretId, HOMECU_ENC_CERT_DIR, HOMECU_DOCK_CERT_DIR);
1156 
1157  if ($rdccert == '' || !(is_readable($rdccert))) {
1158  $return['status']['response'] = 'false';
1159  $return['status']['message'] = 'Invalid RDC Certificate';
1160  $return['data'] = array();
1161  return $return;
1162  }
1163  #$rdccert .= (isset($parms['passwd']) ? ":{$parms['passwd']}" : "");
1164 
1165  $soapString = '<?xml version="1.0" encoding="utf-8"?>';
1166  $soapString .= "\n<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ecp=\"http://ensenta.com/ECPartnerDepositRequest\">\n";
1167  $soapString .= "\n<soapenv:Header/>";
1168  $soapString .= "\n<soapenv:Body>";
1169  $soapString .= "\n<ecp:GetTerms>";
1170  $soapString .= "\n<ecp:partnerId>{$parms['partnerid']}</ecp:partnerId>
1171  <ecp:depositorIPAddress>{$_SERVER['REMOTE_ADDR']}</ecp:depositorIPAddress>
1172  <ecp:sessionStateId>{$parms['SessionStateId']}</ecp:sessionStateId>
1173  </ecp:GetTerms>
1174  </soapenv:Body>
1175 </soapenv:Envelope>\n";
1176 
1177  $cmd = "/usr/bin/curl --silent --cacert /home/homecu/ComodoRSABundle.pem --data-binary '$soapString' -H 'Content-Type: text/xml; charset=utf-8' -E $rdccert";
1178  $cmd .= " -H 'SOAPAction: \"http://ensenta.com/ECPartnerDepositRequest/IPartnerDepositRequest/GetTerms\"' {$parms['serviceurl']}";
1179 
1180 // $response = getcurl($cmd);
1181  $soapHeaders = array();
1182  $soapHeaders[] = "Content-Type: text/xml; charset=utf-8";
1183  $soapHeaders[] = 'SOAPAction: "http://ensenta.com/ECPartnerDepositRequest/IPartnerDepositRequest/GetTerms"';
1184 
1185  $response = embcurl($soapString, $soapHeaders, $parms['serviceurl'], $rdccert);
1186 
1187  if ($parms["logging"] == "enabled") {
1188  $logParms = $parms["environment"]; // get the environment info passed in
1189  $logParms["SSOVendor"] = $parms['rdcvendor'];
1190  $logParms["token"] = $parms['Token']; // the id used across all communications in session
1191  $logParms["txnId"] = time(); // the id for this transaction
1192  $logParms["logPoint"] = "GetTerms"; // this action in a readable form
1193  $logParms["request"] = $cmd; // the request
1194  $logParms["reply"] = $response; // the response
1195  LogSSOActivity($logParms);
1196  }
1197 
1198  $pos = strpos ( $response , 'HCUERROR: ' );
1199  if ($pos !== false ) {
1200  $return['status']['response'] = 'false';
1201  $return['status']['message'] = substr($response,$pos);
1202 // $return['status']['cmd'] = "$cmd";
1203  }
1204  if (empty($response)) {
1205  $return['status']['response'] = 'false';
1206  $return['status']['message'] = 'RDC No Response';
1207 // $return['status']['cmd'] = $cmd;
1208  $return['data'] = array();
1209  } else {
1210 
1211  # call parse function to format response array
1212  $xmlreturn = ensentaGetXMLResponse($response, 'GetTermsResult', 'http://ensenta.com/ECPartnerDepositRequest');
1213  if (!is_array($xmlreturn) || $xmlreturn['faultcode']) {
1214  $return['status']['response'] = 'false';
1215  if ($xmlreturn['faultcode']) {
1216  $return['status']['message'] = "RDC Fault {$xmlreturn['faultcode']} {$xmlreturn['faultstring']}";
1217  } else {
1218  $return['status']['message'] = "RDC Invalid XML Response";
1219  }
1220  $return['status']['cmd'] = "$cmd";
1221  } else {
1222  $return['status']['response'] = 'true';
1223  $return['status']['code'] = '000';
1224  $return['status']['message'] = 'Success';
1225  $return['data'] = $xmlreturn[0];
1226  }
1227  }
1228  return $return;
1229 }
1230 
1231 function ensentaGetHistoryList($parms) {
1232 # uses: $parms['partnerid']
1233 # $parms['serviceurl']
1234 # $parms['certfile']
1235 # $parms['SessionStateId']
1236 
1237  if (!isset($parms['partnerid']) || !isset($parms['serviceurl']) ||
1238  !isset($parms['certfile']) ||
1239  !isset($parms['SessionStateId'])) {
1240  $return['status']['response'] = 'false';
1241  $return['status']['message'] = 'Missing Parameters';
1242  $return['data'] = array();
1243  return $return;
1244  }
1245 
1246  $rdcSecretId = $parms['certfile'];
1247 
1248  /**
1249  * Retrieve and decrypt the cert file -- use rdccert as return value to limit scope of changes
1250  */
1251  $rdccert = GetAwsCertFile($rdcSecretId, HOMECU_ENC_CERT_DIR, HOMECU_DOCK_CERT_DIR);
1252 
1253  if ($rdccert == '' || !(is_readable($rdccert))) {
1254  $return['status']['response'] = 'false';
1255  $return['status']['message'] = 'Invalid RDC Certificate';
1256  $return['data'] = array();
1257  return $return;
1258  }
1259  #$rdccert .= (isset($parms['passwd']) ? ":{$parms['passwd']}" : "");
1260 
1261  $soapString = '<?xml version="1.0" encoding="utf-8"?>';
1262  $soapString .= "\n<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ecp=\"http://ensenta.com/ECPartnerDepositRequest\">\n";
1263  $soapString .= "\n<soapenv:Header/>";
1264  $soapString .= "\n<soapenv:Body>";
1265  $soapString .= "\n<ecp:GetAccountTransactionHistory3>";
1266  $soapString .= "\n<ecp:partnerId>{$parms['partnerid']}</ecp:partnerId>
1267  <ecp:depositorIPAddress>{$_SERVER['REMOTE_ADDR']}</ecp:depositorIPAddress>
1268  <ecp:sessionStateId>{$parms['SessionStateId']}</ecp:sessionStateId>
1269  <ecp:numberOfDays>30</ecp:numberOfDays>
1270  <ecp:maxNumberofTransactions>10</ecp:maxNumberofTransactions>
1271  </ecp:GetAccountTransactionHistory3>
1272  </soapenv:Body>
1273 </soapenv:Envelope>\n";
1274 
1275  $cmd = "/usr/bin/curl --silent --cacert /home/homecu/ssl/ca-certificates/ComodoRSABundle.pem --data-binary '$soapString' -H 'Content-Type: text/xml; charset=utf-8' -E $rdccert";
1276  $cmd .= " -H 'SOAPAction: \"http://ensenta.com/ECPartnerDepositRequest/IPartnerDepositRequest/GetAccountTransactionHistory3\"' {$parms['serviceurl']}";
1277 
1278 
1279 // $response = getcurl($cmd);
1280  $soapHeaders = array();
1281  $soapHeaders[] = "Content-Type: text/xml; charset=utf-8";
1282  $soapHeaders[] = 'SOAPAction: "http://ensenta.com/ECPartnerDepositRequest/IPartnerDepositRequest/GetAccountTransactionHistory3"';
1283 
1284  $response = embcurl($soapString, $soapHeaders, $parms['serviceurl'], $rdccert);
1285 
1286  if ($parms["logging"] == "enabled") {
1287  $logParms = $parms["environment"]; // get the environment info passed in
1288  $logParms["SSOVendor"] = $parms['rdcvendor'];
1289  $logParms["token"] = $parms['Token']; // the id used across all communications in session
1290  $logParms["txnId"] = time(); // the id for this transaction
1291  $logParms["logPoint"] = "GetAccountTransactionHistory3"; // this action in a readable form
1292  $logParms["request"] = $cmd; // the request
1293  $logParms["reply"] = $response; // the response
1294  LogSSOActivity($logParms);
1295  }
1296 
1297  $pos = strpos ( $response , 'HCUERROR: ' );
1298  if ($pos !== false ) {
1299  $return['status']['response'] = 'false';
1300  $return['status']['message'] = substr($response,$pos);
1301 // $return['status']['cmd'] = "$cmd";
1302  }
1303  if (empty($response)) {
1304  $return['status']['response'] = 'false';
1305  $return['status']['message'] = 'RDC No Response';
1306 // $return['status']['cmd'] = $cmd;
1307  $return['data'] = array();
1308  } else {
1309  # call parse function to format response array
1310  $xmlreturn = ensentaGetXMLResponse($response, 'GetAccountTransactionHistory3Result', 'http://ensenta.com/ECPartnerDepositRequest');
1311  $xmldetails = ensentaGetRisks($response, 'TransactionSummary3', 'http://ensenta.com/ECPartnerDepositRequest');
1312  if (!is_array($xmlreturn) || $xmlreturn['faultcode']) {
1313  # check xmldetails for is_array also? But would that throw error if good response with no history?
1314  $return['status']['response'] = 'false';
1315  if ($xmlreturn['faultcode']) {
1316  $return['status']['message'] = "RDC Fault {$xmlreturn['faultcode']} {$xmlreturn['faultstring']}";
1317  } else {
1318  $return['status']['message'] = "RDC Invalid XML Response";
1319  }
1320  $return['status']['cmd'] = "$cmd";
1321  } else {
1322  $return['status']['response'] = 'true';
1323  $return['status']['code'] = '000';
1324  $return['status']['message'] = 'Success';
1325  $return['data'] = $xmlreturn[0];
1326  $return['data']['TransactionList'] = $xmldetails;
1327 
1328  /*
1329  * we only allow single check per deposit. Only thing Detail call returns beyond what
1330  * transaction list returns is the check number
1331  * following code retrieves check number for each deposit
1332  * could disable if timeout becomes a problem
1333  */
1334  $dparm = $parms;
1335  foreach ($return['data']['TransactionList'] as $key => $details) {
1336  $dparm['transactionid'] = $details['TransactionId'];
1337  $txndetail = ensentaGetHistoryDetl($dparm);
1338  $return['data']['TransactionList'][$key]['CheckNumber'] = $txndetail['data']['DepositHistoryItems'][0]['CheckNumber'];
1339  }
1340  /*
1341  * end 'get check number' block
1342  */
1343 
1344 // $return['data']['raw']=$response;
1345 // $return['data']['xmlreturn']=$xmlreturn;
1346  }
1347  }
1348  return $return;
1349 }
1350 
1351 function ensentaGetHistoryDetl($parms) {
1352 # uses: $parms['partnerid']
1353 # $parms['serviceurl']
1354 # $parms['certfile']
1355 # $parms['SessionStateId']
1356 # $parms['transactionId']
1357 
1358  if (!isset($parms['partnerid']) || !isset($parms['serviceurl']) ||
1359  !isset($parms['certfile']) ||
1360  !isset($parms['SessionStateId']) ||
1361  !isset($parms['transactionid'])) {
1362  $return['status']['response'] = 'false';
1363  $return['status']['message'] = 'Missing Parameters';
1364  $return['data'] = array();
1365  return $return;
1366  }
1367 
1368  $rdcSecretId = $parms['certfile'];
1369 
1370  /**
1371  * Retrieve and decrypt the cert file -- use rdccert as return value to limit scope of changes
1372  */
1373  $rdccert = GetAwsCertFile($rdcSecretId, HOMECU_ENC_CERT_DIR, HOMECU_DOCK_CERT_DIR);
1374 
1375  if ($rdccert == '' || !(is_readable($rdccert))) {
1376  $return['status']['response'] = 'false';
1377  $return['status']['message'] = 'Invalid RDC Certificate';
1378  $return['data'] = array();
1379  return $return;
1380  }
1381  #$rdccert .= (isset($parms['passwd']) ? ":{$parms['passwd']}" : "");
1382 
1383 
1384  $soapString = '<?xml version="1.0" encoding="utf-8"?>';
1385  $soapString .= "\n<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ecp=\"http://ensenta.com/ECPartnerDepositRequest\">\n";
1386  $soapString .= "\n<soapenv:Header/>";
1387  $soapString .= "\n<soapenv:Body>";
1388  $soapString .= "\n<ecp:GetAccountTransactionHistoryDetail3>";
1389  $soapString .= "\n<ecp:partnerId>{$parms['partnerid']}</ecp:partnerId>
1390  <ecp:depositorIPAddress>{$_SERVER['REMOTE_ADDR']}</ecp:depositorIPAddress>
1391  <ecp:sessionStateId>{$parms['SessionStateId']}</ecp:sessionStateId>
1392  <ecp:transactionId>{$parms['transactionid']}</ecp:transactionId>
1393  <ecp:checkSequenceNum>1</ecp:checkSequenceNum>
1394  </ecp:GetAccountTransactionHistoryDetail3>
1395  </soapenv:Body>
1396 </soapenv:Envelope>\n";
1397 
1398  $cmd = "/usr/bin/curl --silent --cacert /home/homecu/ssl/ca-certificates/ComodoRSABundle.pem --data-binary '$soapString' -H 'Content-Type: text/xml; charset=utf-8' -E $rdccert";
1399  $cmd .= " -H 'SOAPAction: \"http://ensenta.com/ECPartnerDepositRequest/IPartnerDepositRequest/GetAccountTransactionHistoryDetail3\"' {$parms['serviceurl']}";
1400 
1401 // $response = getcurl($cmd);
1402  $soapHeaders = array();
1403  $soapHeaders[] = "Content-Type: text/xml; charset=utf-8";
1404  $soapHeaders[] = 'SOAPAction: "http://ensenta.com/ECPartnerDepositRequest/IPartnerDepositRequest/GetAccountTransactionHistoryDetail3"';
1405 
1406  $response = embcurl($soapString, $soapHeaders, $parms['serviceurl'], $rdccert);
1407 
1408  if ($parms["logging"] == "enabled") {
1409  $logParms = $parms["environment"]; // get the environment info passed in
1410  $logParms["SSOVendor"] = $parms['rdcvendor'];
1411  $logParms["token"] = $parms['Token']; // the id used across all communications in session
1412  $logParms["txnId"] = time(); // the id for this transaction
1413  $logParms["logPoint"] = "GetAccountTransactionHistoryDetail3"; // this action in a readable form
1414  $logParms["request"] = $cmd; // the request
1415  $logParms["reply"] = $response; // the response
1416  LogSSOActivity($logParms);
1417  }
1418 
1419  $pos = strpos ( $response , 'HCUERROR: ' );
1420  if ($pos !== false ) {
1421  $return['status']['response'] = 'false';
1422  $return['status']['message'] = substr($response,$pos);
1423 // $return['status']['cmd'] = "$cmd";
1424  }
1425  if (empty($response)) {
1426  $return['status']['response'] = 'false';
1427  $return['status']['message'] = 'RDC No Response';
1428  $return['data'] = array();
1429  } else {
1430  $xmlreturn = ensentaGetXMLResponse($response, 'GetAccountTransactionHistoryDetail3Result', 'http://ensenta.com/ECPartnerDepositRequest');
1431  $xmldetails = ensentaGetRisks($response, 'DepositHistory3', 'http://ensenta.com/ECPartnerDepositRequest');
1432  if (!is_array($xmlreturn) || $xmlreturn['faultcode']) {
1433  # check xmldetails for is_array also? But would that throw error if good response with no history?
1434  $return['status']['response'] = 'false';
1435  if ($xmlreturn['faultcode']) {
1436  $return['status']['message'] = "RDC Fault {$xmlreturn['faultcode']} {$xmlreturn['faultstring']}";
1437  } else {
1438  $return['status']['message'] = "RDC Invalid XML Response";
1439  }
1440  $return['status']['cmd'] = "$cmd";
1441  } else {
1442  $return['status']['response'] = 'true';
1443  $return['status']['code'] = '000';
1444  $return['status']['message'] = 'Success';
1445  $return['data'] = $xmlreturn[0];
1446  $return['data']['DepositHistoryItems'] = $xmldetails;
1447 // $return['data']['raw']=$response;
1448 // $return['data']['xmlreturn']=$xmlreturn;
1449  }
1450  }
1451  return $return;
1452 }
1453 
1454 function ensentaAcceptTerms($parms) {
1455 # uses: $parms['partnerid']
1456 # $parms['serviceurl']
1457 # $parms['certfile']
1458 # $parms['passwd']
1459 # $parms['SessionStateId']
1460 
1461  if (!isset($parms['partnerid']) || !isset($parms['serviceurl']) ||
1462  !isset($parms['certfile']) ||
1463  !isset($parms['SessionStateId'])) {
1464  $return['status']['response'] = 'false';
1465  $return['status']['message'] = 'Missing Parameters';
1466 // $return['status']['gotparms']=$parms;
1467 // if (!isset($parms['partnerid'])) $return['status']['missing'][]='partnerid';
1468 // if (!isset($parms['serviceurl'])) $return['status']['missing'][]='serviceurl';
1469 // if (!isset($parms['certfile'])) $return['status']['missing'][]='certfile';
1470 // if (!isset($parms['SessionStateId'])) $return['status']['missing'][]='SessionStateId';
1471  $return['data'] = array();
1472  return $return;
1473  }
1474 
1475  $rdcSecretId = $parms['certfile'];
1476 
1477  /**
1478  * Retrieve and decrypt the cert file -- use rdccert as return value to limit scope of changes
1479  */
1480  $rdccert = GetAwsCertFile($rdcSecretId, HOMECU_ENC_CERT_DIR, HOMECU_DOCK_CERT_DIR);
1481 
1482  if ($rdccert == '' || !(is_readable($rdccert))) {
1483  $return['status']['response'] = 'false';
1484  $return['status']['message'] = 'Invalid RDC Certificate';
1485  $return['data'] = array();
1486  return $return;
1487  }
1488  #$rdccert .= (isset($parms['passwd']) ? ":{$parms['passwd']}" : "");
1489 
1490 
1491  $soapString = '<?xml version="1.0" encoding="utf-8"?>';
1492  $soapString .= "\n<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ecp=\"http://ensenta.com/ECPartnerDepositRequest\">";
1493  $soapString .= "\n<soapenv:Header/>";
1494  $soapString .= "\n<soapenv:Body>";
1495  $soapString .= "<ecp:AcceptTerms>
1496  <ecp:partnerId>{$parms['partnerid']}</ecp:partnerId>
1497  <ecp:depositorIPAddress>{$_SERVER['REMOTE_ADDR']}</ecp:depositorIPAddress>
1498  <ecp:sessionStateId>{$parms['SessionStateId']}</ecp:sessionStateId>
1499  </ecp:AcceptTerms>
1500  </soapenv:Body>
1501 </soapenv:Envelope>\n";
1502 
1503  $cmd = "/usr/bin/curl --silent --cacert /home/homecu/ssl/ca-certificates/ComodoRSABundle.pem --data-binary '$soapString' -H 'Content-Type: text/xml; charset=utf-8' -E $rdccert";
1504  $cmd .= " -H 'SOAPAction: \"http://ensenta.com/ECPartnerDepositRequest/IPartnerDepositRequest/AcceptTerms\"'";
1505  $cmd .= " {$parms['serviceurl']}";
1506 
1507 // $response = getcurl($cmd);
1508  $soapHeaders = array();
1509  $soapHeaders[] = "Content-Type: text/xml; charset=utf-8";
1510  $soapHeaders[] = 'SOAPAction: "http://ensenta.com/ECPartnerDepositRequest/IPartnerDepositRequest/AcceptTerms"';
1511 
1512  $response = embcurl($soapString, $soapHeaders, $parms['serviceurl'], $rdccert);
1513 
1514  if ($parms["logging"] == "enabled") {
1515  $logParms = $parms["environment"]; // get the environment info passed in
1516  $logParms["SSOVendor"] = $parms['rdcvendor'];
1517  $logParms["token"] = $parms['Token']; // the id used across all communications in session
1518  $logParms["txnId"] = time(); // the id for this transaction
1519  $logParms["logPoint"] = "AcceptTerms"; // this action in a readable form
1520  $logParms["request"] = $cmd; // the request
1521  $logParms["reply"] = $response; // the response
1522  LogSSOActivity($logParms);
1523  }
1524 
1525  $pos = strpos ( $response , 'HCUERROR: ' );
1526  if ($pos !== false ) {
1527  $return['status']['response'] = 'false';
1528  $return['status']['message'] = substr($response,$pos);
1529 // $return['status']['cmd'] = "$cmd";
1530  }
1531  if (empty($response)) {
1532  $return['status']['response'] = 'false';
1533  $return['status']['message'] = "RDC No Response";
1534  $return['status']['cmd'] = "$cmd";
1535  $return['data'] = array();
1536  } else {
1537  $xmlreturn = ensentaGetXMLResponse($response, 'AcceptTermsResult', 'http://ensenta.com/ECPartnerDepositRequest');
1538  if (!is_array($xmlreturn) || $xmlreturn['faultcode']) {
1539  # check xmldetails for is_array also? But would that throw error if good response with no history?
1540  $return['status']['response'] = 'false';
1541  if ($xmlreturn['faultcode']) {
1542  $return['status']['message'] = "RDC Fault {$xmlreturn['faultcode']} {$xmlreturn['faultstring']}";
1543  } else {
1544  $return['status']['message'] = "RDC Invalid XML Response";
1545  }
1546  $return['status']['cmd'] = "$cmd";
1547  } else {
1548 
1549  $return['status']['response'] = 'true';
1550  $return['status']['code'] = '000';
1551  $return['status']['message'] = 'Success';
1552  $return['data'] = $xmlreturn[0];
1553 // $return['raw']=$response;
1554 // $return['cmd'] = "$cmd";
1555 // $return['parms']=$parms;
1556  }
1557  }
1558  return $return;
1559 }
1560 
1561 function ensentaUploadCheck($parms) {
1562 # uses: $parms['partnerid']
1563 # $parms['serviceurl']
1564 # $parms['certfile']
1565 # $parms['SessionStateId']
1566 # $parms['FB']
1567 # $parms['CheckImage']
1568 
1569  if (!isset($parms['partnerid']) || !isset($parms['serviceurl']) ||
1570  !isset($parms['certfile']) ||
1571  !isset($parms['SessionStateId']) || !isset($parms['FB']) ||
1572  !isset($parms['CheckImage'])) {
1573  $return['status']['response'] = 'false';
1574  $return['status']['message'] = 'Missing Parameters';
1575  $return['data'] = array();
1576  return $return;
1577  }
1578 
1579  $rdcSecretId = $parms['certfile'];
1580 
1581  /**
1582  * Retrieve and decrypt the cert file -- use rdccert as return value to limit scope of changes
1583  */
1584  $rdccert = GetAwsCertFile($rdcSecretId, HOMECU_ENC_CERT_DIR, HOMECU_DOCK_CERT_DIR);
1585 
1586  if ($rdccert == '' || !(is_readable($rdccert))) {
1587  $return['status']['response'] = 'false';
1588  $return['status']['message'] = 'Invalid RDC Certificate';
1589  $return['data'] = array();
1590  return $return;
1591  }
1592 // $rdccert .= (isset($parms['passwd']) ? ":{$parms['passwd']}" : "");
1593 // <ecp:CheckImage>cid:813770537311</ecp:CheckImage>
1594 
1595  $soapString = '<?xml version="1.0" encoding="utf-8"?>';
1596  $soapString .= "\n<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ecp=\"http://ensenta.com/ECPartnerDepositRequest\">
1597  <soapenv:Header/>
1598  <soapenv:Body>
1599  <ecp:UploadCheckImage>
1600  <ecp:uploadCheckImageRequest>
1601  <ecp:PartnerId>{$parms['partnerid']}</ecp:PartnerId>
1602  <ecp:DepositorIPAddress>{$_SERVER['REMOTE_ADDR']}</ecp:DepositorIPAddress>
1603  <ecp:SessionStateId>{$parms['SessionStateId']}</ecp:SessionStateId>
1604  <ecp:CheckImage>{$parms['CheckImage']}</ecp:CheckImage>
1605  <ecp:CheckImageViewType>{$parms['FB']}</ecp:CheckImageViewType>
1606  <ecp:CheckSequence>1</ecp:CheckSequence>
1607  </ecp:uploadCheckImageRequest>
1608  </ecp:UploadCheckImage>
1609  </soapenv:Body>
1610 </soapenv:Envelope>\n";
1611 
1612  $cmd = "/usr/bin/curl --silent --cacert /home/homecu/ssl/ca-certificates/ComodoRSABundle.pem --data-binary '$soapString' -H 'Content-Type: text/xml; charset=utf-8' -E $rdccert";
1613  $cmd .= " -H 'SOAPAction: \"http://ensenta.com/ECPartnerDepositRequest/IPartnerDepositRequest/UploadCheckImage\"' {$parms['serviceurl']}";
1614 
1615 // $response = getcurl($cmd);
1616  /*
1617  * rolling out to command-line curl with image to upload causes 'argument list too long' error from curl. So use embedded curl instead
1618  */
1619  $soapHeaders = array();
1620  $soapHeaders[] = "Content-Type: text/xml; charset=utf-8";
1621  $soapHeaders[] = 'SOAPAction: "http://ensenta.com/ECPartnerDepositRequest/IPartnerDepositRequest/UploadCheckImage"';
1622 
1623  $response = embcurl($soapString, $soapHeaders, $parms['serviceurl'], $rdccert);
1624 
1625  if ($parms["logging"] == "enabled") {
1626  $logParms = $parms["environment"]; // get the environment info passed in
1627  $logParms["SSOVendor"] = $parms['rdcvendor'];
1628  $logParms["token"] = $parms['Token']; // the id used across all communications in session
1629  $logParms["txnId"] = time(); // the id for this transaction
1630  $logParms["logPoint"] = "UploadCheckImage"; // this action in a readable form
1631  $logParms["request"] = $soapString; // the request
1632  $logParms["reply"] = $response; // the response
1633  LogSSOActivity($logParms);
1634  }
1635 
1636  $pos = strpos ( $response , 'HCUERROR: ' );
1637  if ($pos !== false ) {
1638  $return['status']['response'] = 'false';
1639  $return['status']['message'] = substr($response,$pos);
1640 // $return['status']['cmd'] = "$cmd";
1641  }
1642  if (empty($response)) {
1643  $return['status']['response'] = 'false';
1644  $return['status']['message'] = "RDC No Response";
1645  $return['data'] = array();
1646  $return['status']['cmd'] = $cmd;
1647  } else {
1648  $xmlreturn = ensentaGetXMLResponse($response, 'UploadCheckImageResult', 'http://ensenta.com/ECPartnerDepositRequest');
1649  if (!is_array($xmlreturn) || $xmlreturn['faultcode']) {
1650  # check xmldetails for is_array also? But would that throw error if good response with no history?
1651  $return['status']['response'] = 'false';
1652  if ($xmlreturn['faultcode']) {
1653  $return['status']['message'] = "RDC Fault {$xmlreturn['faultcode']} {$xmlreturn['faultstring']}";
1654  } else {
1655  $return['status']['message'] = "RDC Invalid XML Response";
1656  }
1657  $return['status']['cmd'] = "$cmd";
1658  } else {
1659  $return['status']['response'] = 'true';
1660  $return['status']['code'] = '000';
1661  $return['status']['message'] = 'Success';
1662  $return['status']['cmd'] = $cmd;
1663  $return['status']['xmlresult'] = $response;
1664  # call parse function to format response array
1665  $return['data'] = $xmlreturn[0];
1666  }
1667  }
1668 
1669  return $return;
1670 }
1671 
1672 function ensentaEvaluateDeposit($parms) {
1673 # uses: $parms['partnerid']
1674 # $parms['serviceurl']
1675 # $parms['certfile']
1676 # $parms['SessionStateId']
1677 # $parms['DepAcctIndex']
1678 # $parms['amount']
1679 
1680  if (!isset($parms['partnerid']) || !isset($parms['serviceurl']) ||
1681  !isset($parms['certfile']) ||
1682  !isset($parms['SessionStateId']) || !isset($parms['rdcacctid']) ||
1683  !isset($parms['amount'])) {
1684  $return['status']['response'] = 'false';
1685  $return['status']['message'] = 'Missing Parameters';
1686 // $return['status']['parameters'] = $parms;
1687  // $return['status']['gotparms']=$parms;
1688  if (!isset($parms['partnerid']))
1689  $return['status']['missing'][] = 'partnerid';
1690  if (!isset($parms['serviceurl']))
1691  $return['status']['missing'][] = 'serviceurl';
1692  if (!isset($parms['certfile']))
1693  $return['status']['missing'][] = 'certfile';
1694  if (!isset($parms['SessionStateId']))
1695  $return['status']['missing'][] = 'SessionStateId';
1696  if (!isset($parms['rdcacctid']))
1697  $return['status']['missing'][] = 'rdcacctid';
1698  if (!isset($parms['amount']))
1699  $return['status']['missing'][] = 'amount';
1700 
1701  $return['data'] = array();
1702  return $return;
1703  }
1704 
1705  $rdcSecretId = $parms['certfile'];
1706 
1707  /**
1708  * Retrieve and decrypt the cert file -- use rdccert as return value to limit scope of changes
1709  */
1710  $rdccert = GetAwsCertFile($rdcSecretId, HOMECU_ENC_CERT_DIR, HOMECU_DOCK_CERT_DIR);
1711 
1712  if ($rdccert == '' || !(is_readable($rdccert))) {
1713  $return['status']['response'] = 'false';
1714  $return['status']['message'] = 'Invalid RDC Certificate';
1715  $return['data'] = array();
1716  return $return;
1717  }
1718 // $rdccert .= (isset($parms['passwd']) ? ":{$parms['passwd']}" : "");
1719 
1720  $deposittime = date('c');
1721 
1722  $soapString = '<?xml version="1.0" encoding="utf-8"?>';
1723  $soapString .="\n<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ecp=\"http://ensenta.com/ECPartnerDepositRequest\">\n";
1724  $soapString .= "\n<soapenv:Header/>
1725  <soapenv:Body>
1726  <ecp:EvaluateDeposit>
1727  <ecp:evaluateDepositRequest>
1728  <ecp:PartnerId>{$parms['partnerid']}</ecp:PartnerId>
1729  <ecp:DepositorIPAddress>{$_SERVER['REMOTE_ADDR']}</ecp:DepositorIPAddress>
1730  <ecp:SessionStateId>{$parms['SessionStateId']}</ecp:SessionStateId>
1731  <ecp:LocalDateTime>$deposittime</ecp:LocalDateTime>
1732  <ecp:DepositToAccountNumberIndex>{$parms['rdcacctid']}</ecp:DepositToAccountNumberIndex>
1733  <ecp:CheckSequenceNum>1</ecp:CheckSequenceNum>
1734  <ecp:Amount>" . sprintf('%.2f', $parms['amount'] * .01) . "</ecp:Amount>
1735  </ecp:evaluateDepositRequest>
1736  </ecp:EvaluateDeposit>
1737  </soapenv:Body>
1738 </soapenv:Envelope>\n";
1739 
1740  $cmd = "/usr/bin/curl --silent --cacert /home/homecu/ssl/ca-certificates/ComodoRSABundle.pem --data-binary '$soapString' -H 'Content-Type: text/xml; charset=utf-8' -E $rdccert";
1741  $cmd .= " -H 'SOAPAction: \"http://ensenta.com/ECPartnerDepositRequest/IPartnerDepositRequest/EvaluateDeposit\"' {$parms['serviceurl']}";
1742 
1743 // $response = getcurl($cmd);
1744  $soapHeaders = array();
1745  $soapHeaders[] = "Content-Type: text/xml; charset=utf-8";
1746  $soapHeaders[] = 'SOAPAction: "http://ensenta.com/ECPartnerDepositRequest/IPartnerDepositRequest/EvaluateDeposit"';
1747 
1748  $response = embcurl($soapString, $soapHeaders, $parms['serviceurl'], $rdccert);
1749 
1750  if ($parms["logging"] == "enabled") {
1751  $logParms = $parms["environment"]; // get the environment info passed in
1752  $logParms["SSOVendor"] = $parms['rdcvendor'];
1753  $logParms["token"] = $parms['Token']; // the id used across all communications in session
1754  $logParms["txnId"] = time(); // the id for this transaction
1755  $logParms["logPoint"] = "EvaluateDeposit"; // this action in a readable form
1756  $logParms["request"] = $cmd; // the request
1757  $logParms["reply"] = $response; // the response
1758  LogSSOActivity($logParms);
1759  }
1760 
1761  $pos = strpos ( $response , 'HCUERROR: ' );
1762  if ($pos !== false ) {
1763  $return['status']['response'] = 'false';
1764  $return['status']['message'] = substr($response,$pos);
1765 // $return['status']['cmd'] = "$cmd";
1766  }
1767  if (empty($response)) {
1768  $return['status']['response'] = 'false';
1769  $return['status']['message'] = "RDC No Response";
1770 // $return['status']['soap']=$soapString;
1771  $return['data'] = array();
1772  } else {
1773  $xmlreturn = ensentaGetXMLResponse($response, 'EvaluateDepositResult', 'http://ensenta.com/ECPartnerDepositRequest');
1774  $xmlrisks = ensentaGetRisks($response, 'DepositRiskFactor', 'http://ensenta.com/ECPartnerDepositRequest');
1775  if (!is_array($xmlreturn) || $xmlreturn['faultcode']) {
1776  # check xmlrisks for is_array also? But would that throw error if good response without risk?
1777  $return['status']['response'] = 'false';
1778  if ($xmlreturn['faultcode']) {
1779  $return['status']['message'] = "RDC Fault {$xmlreturn['faultcode']} {$xmlreturn['faultstring']}";
1780  } else {
1781  $return['status']['message'] = "RDC Invalid XML Response";
1782  }
1783  $return['status']['cmd'] = "$cmd";
1784  } else {
1785 
1786 // $tfile = fopen ("/tmp/eval_result","a");
1787 // fwrite($tfile,"Evaluate XML\n\n");
1788 // fwrite($tfile, $response);
1789 // fwrite($tfile,"\n\n");
1790 // fwrite($tfile, "EvaluateDepositResult\n" . print_r($xmlreturn,true) . "DepositRiskFactor\n" . print_r($xmlrisks,true));
1791 // fwrite($tfile,"\n\n");
1792 // fclose ($tfile);
1793 
1794  $return['status']['response'] = 'true';
1795  $return['status']['code'] = '000';
1796  $return['status']['message'] = 'Success';
1797  # call parse function to format response array
1798  foreach (array('ResponseCode', 'ErrorResponseText', 'LocalizedMessageText', 'LocalizedFundsAvailTxt') as $key) {
1799  if (isset($xmlreturn[0][$key])) {
1800  $return['data'][$key] = $xmlreturn[0][$key];
1801  }
1802  }
1803 
1804  $return['data']['Risks'] = $xmlrisks;
1805 // $return['status']['xml']= htmlspecialchars($response);
1806 // $return['status']['request']=$soapString;
1807  }
1808  }
1809  return $return;
1810 }
1811 
1812 function ensentaDoDepositTransaction($parms) {
1813 # uses: $parms['partnerid']
1814 # $parms['serviceurl']
1815 # $parms['certfile']
1816 # $parms['SessionStateId']
1817 # $parms['amount']
1818 
1819  if (!isset($parms['partnerid']) || !isset($parms['serviceurl']) ||
1820  !isset($parms['certfile']) ||
1821  !isset($parms['SessionStateId']) ||
1822  !isset($parms['amount'])) {
1823  $return['status']['response'] = 'false';
1824  $return['status']['message'] = 'Missing Parameters';
1825  $return['data']['parms'] = $parms;
1826  return $return;
1827  }
1828 
1829  $rdcSecretId = $parms['certfile'];
1830  /**
1831  * Retrieve and decrypt the cert file -- use rdccert as return value to limit scope of changes
1832  */
1833  $rdccert = GetAwsCertFile($rdcSecretId, HOMECU_ENC_CERT_DIR, HOMECU_DOCK_CERT_DIR);
1834 
1835  if ($rdccert == '' || !(is_readable($rdccert))) {
1836  $return['status']['response'] = 'false';
1837  $return['status']['message'] = 'Invalid RDC Certificate';
1838  $return['data'] = array();
1839  return $return;
1840  }
1841 // $rdccert .= (isset($parms['passwd']) ? ":{$parms['passwd']}" : "");
1842 
1843  $deposittime = date('c');
1844 
1845  $soapString = '<?xml version="1.0" encoding="utf-8"?>';
1846  $soapString .= "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ecp=\"http://ensenta.com/ECPartnerDepositRequest\">\n";
1847  $soapString .= "<soapenv:Header/>
1848  <soapenv:Body>
1849  <ecp:DoDepositTransaction>
1850  <ecp:partnerId>{$parms['partnerid']}</ecp:partnerId>
1851  <ecp:depositorIPAddress>{$_SERVER['REMOTE_ADDR']}</ecp:depositorIPAddress>
1852  <ecp:sessionStateId>{$parms['SessionStateId']}</ecp:sessionStateId>
1853  <ecp:localDateTime>$deposittime</ecp:localDateTime>
1854  <ecp:amount>" . sprintf('%.2f', $parms['amount'] * .01) . "</ecp:amount>\n";
1855  if (!empty($parms['Ml'])) {
1856  $soapString .= "<ecp:email>" . urldecode($parms['Ml']) . "</ecp:email>\n";
1857  }
1858  $soapString .= "</ecp:DoDepositTransaction>
1859  </soapenv:Body>
1860 </soapenv:Envelope>\n";
1861 
1862 // $tfile = fopen ("/tmp/ens_deposit","a");
1863 // fwrite($tfile, "=== $deposittime ===\n$soapString\n");
1864 // fclose ($tfile);
1865 
1866  $cmd = "/usr/bin/curl --silent --cacert /home/homecu/ssl/ca-certificates/ComodoRSABundle.pem --data-binary '$soapString' -H 'Content-Type: text/xml; charset=utf-8' -E $rdccert";
1867  $cmd .= " -H 'SOAPAction: \"http://ensenta.com/ECPartnerDepositRequest/IPartnerDepositRequest/DoDepositTransaction\"' {$parms['serviceurl']}";
1868 
1869 // $response = getcurl($cmd);
1870  $soapHeaders = array();
1871  $soapHeaders[] = "Content-Type: text/xml; charset=utf-8";
1872  $soapHeaders[] = 'SOAPAction: "http://ensenta.com/ECPartnerDepositRequest/IPartnerDepositRequest/DoDepositTransaction"';
1873 
1874  $response = embcurl($soapString, $soapHeaders, $parms['serviceurl'], $rdccert);
1875 
1876  if ($parms["logging"] == "enabled") {
1877  $logParms = $parms["environment"]; // get the environment info passed in
1878  $logParms["SSOVendor"] = $parms['rdcvendor'];
1879  $logParms["token"] = $parms['Token']; // the id used across all communications in session
1880  $logParms["txnId"] = time(); // the id for this transaction
1881  $logParms["logPoint"] = "DoDepositTransaction"; // this action in a readable form
1882  $logParms["request"] = $cmd; // the request
1883  $logParms["reply"] = $response; // the response
1884  LogSSOActivity($logParms);
1885  }
1886 
1887  $pos = strpos ( $response , 'HCUERROR: ' );
1888  if ($pos !== false ) {
1889  $return['status']['response'] = 'false';
1890  $return['status']['message'] = substr($response,$pos);
1891 // $return['status']['cmd'] = "$cmd";
1892  }
1893  if (empty($response)) {
1894  $return['status']['response'] = 'false';
1895  $return['status']['message'] = "RDC No Response";
1896 // $return['status']['soap']=$soapString;
1897  $return['data'] = array();
1898  } else {
1899  $xmlreturn = ensentaGetXMLResponse($response, 'DoDepositTransactionResult', 'http://ensenta.com/ECPartnerDepositRequest');
1900  $xmlrisks = ensentaGetRisks($response, 'Risks', 'http://ensenta.com/ECPartnerDepositRequest');
1901  if (!is_array($xmlreturn) || $xmlreturn['faultcode']) {
1902  # check xmlrisks for is_array also? But would that throw error if good response without risk?
1903  $return['status']['response'] = 'false';
1904  if ($xmlreturn['faultcode']) {
1905  $return['status']['message'] = "RDC Fault {$xmlreturn['faultcode']} {$xmlreturn['faultstring']}";
1906  } else {
1907  $return['status']['message'] = "RDC Invalid XML Response";
1908  }
1909  $return['status']['cmd'] = "$cmd";
1910  } else {
1911 
1912  $return['status']['response'] = 'true';
1913  $return['status']['code'] = '000';
1914  $return['status']['message'] = 'Success';
1915 
1916  $return['data'] = $xmlreturn[0];
1917  unset ($return['data']['Risks']); # Risks returned as Array ([string] => 'reason for reject')
1918  # simplify string and return as FailReason instead
1919 
1920  $return['data']['FailReasons'] = $xmlrisks;
1921 // $return['data']['request']=$soapString;
1922 // $return['data']['raw']=$response;
1923  }
1924  }
1925  return $return;
1926 }
1927 
1928 function ensentaGetXMLResponse($rdcXML, $rdcCONT, $rdcNS) {
1929 // $xml = simplexml_load_string($rdcXML);
1930 // $xml->registerXPathNamespace('rdc', $rdcNS);
1931 // $dataresponse = $xml->xpath("//rdc:$rdcCONT");
1932 // $resp_arr = array();
1933 // foreach ($dataresponse as $key => $details) {
1934 // foreach ($details as $dkey => $dd) {
1935 // $resp_arr[$key][$dkey] = (string) ($dd);
1936 // }
1937 // }
1938  try {
1939  $xml = simplexml_load_string($rdcXML, "SimpleXMLElement", LIBXML_NOWARNING);
1940  if (!is_object($xml)) {
1941  throw new Exception("Invalid XML");
1942  }
1943  $xml->registerXPathNamespace('s', "http://schemas.xmlsoap.org/soap/envelope/");
1944  $errorresponse = $xml->xpath("//s:Fault");
1945  if (is_array($errorresponse) && count($errorresponse)) {
1946  $resp_arr = array('faultcode' => $errorresponse[0]->faultcode,
1947  'faultstring' => $errorresponse[0]->faultstring);
1948  } else {
1949  $xml->registerXPathNamespace('rdc', $rdcNS);
1950  $dataresponse = $xml->xpath("//rdc:$rdcCONT");
1951  $resp_arr = objectToArray($dataresponse);
1952  }
1953  } catch (Exception $e) {
1954  $resp_arr = false;
1955  }
1956  return $resp_arr;
1957 }
1958 
1959 function ensentaGetRisks($rdcXML, $rdcCONT, $rdcNS) {
1960  $xml = simplexml_load_string($rdcXML);
1961  $xml->registerXPathNamespace('rdc', $rdcNS);
1962  $dataresponse = $xml->xpath("//rdc:$rdcCONT");
1963 // $tfile = fopen ("/tmp/eval_result","a");
1964 // fwrite($tfile,"XML Dataresponse\n\n");
1965 // fwrite($tfile,print_r($dataresponse,true));
1966 // fclose ($tfile);
1967 // $r=XMLIntoArray($dataresponse);
1968  $r = objectToArray($dataresponse);
1969  if ($rdcCONT == 'Risks') {
1970  # DoDeposit Failure reason
1971  $resp_arr = $r[0]['string'];
1972  } else {
1973  # EvaluateDeposit Risk Factors
1974 // $resp_arr=$r[0]['DepositRiskFactor'];
1975  $resp_arr = $r;
1976  }
1977  return $resp_arr;
1978 }