Odyssey
PSCUPAY_API.i
1 <?php
2 /*
3  * NOTE: For logging purposes there is a $cmd built up in the functions that call PSCUPay.
4  * That $cmd is currently only used to log the request. 03/01/2016.
5  */
6 // portal for testing:
7 // Here?s the URL: http://dms-qa.elasticbeanstalk.com/login/auth
8 // The username and password are both dmsadmin
9 // 6/24 NOW USE http://dms-ci.elasticbeanstalk.com/app/dmsAdmin/
10 // and the testing site changed to
11 // http://dms-ci.elasticbeanstalk.com/rest/IP/DMS/v1/payment
12 // BUT... by July 2 the portal shows a curl post to
13 // http://dms-ci.elasticbeanstalk.com/IP/BillPay/v1/payment
14 // and credentials are expired and all calls return error
15 // 7/7 Sundeep confirmed URI changed to be 'more meaningful and to adhere
16 // standard'. Says it won't change anymore.
17 // He also updated portal w/credentials that don't expire until 2015
18 // but service still down.
19 // 7/8 Service available, but credentials are different and expire 7/9. So much for the 2015
20 // 7/9 Credentials are different, and expire 7/10. Emailed Sundeep asking for
21 // some credentials that won't change
22 // 7/9 Emailed Sundeep & D Anne asking for clarification on OVERNIGHT & recurring
23 // 7/10 credentials expired, no access. Shouldn't have complained about changing key...
24 // new credentials finally available around 3pm
25 // 7/14 email from Evan confirming that Payment Fee would tell me a fee, but not
26 // explaining why I don't see a fee in the XML response
27 // 7/15 portal not responding. Spins for a minute, then empty results
28 
29 // 8/4 credentials changed again, set to expire 8/5
30 // 8/5 new credentials again, but they don't expire 'til 2015
31 // 8/13 credentials changed again, set to expire 8/14. Credentials work, but all calls
32 // return error 'sponsorId validation failed. UserId:EXTRANET\\sgpscurvextc SponsorId:18000'
33 // 8/14 3pm test portal works
34 define( "MP_PSCU_ERROR_CODE", "5010" );
35 
36 function bpAuth($parms) {
37  try {
38  $return=array('status'=>array('response'=>'true','code'=>'000','message'=>'success'));
39 
40  if (HCU_array_key_value('pilot', $parms) == 1) {
41  $parms['serviceurl'] = HCU_array_key_value('piloturl', $parms);
42  } else {
43  $parms['serviceurl'] = HCU_array_key_value('produrl', $parms);
44  }
45  if (empty($parms['serviceurl']) ) {
46  throw new Exception('Missing URL configuration');
47  }
48 
49 // PSCU does not have an 'is user authorized' call - just get bank accounts
50 // If no bank accounts, not authorized. Set current date/timestamp as token,
51 // later we'll use is as the correlation ID
52  $parms['Token']=time();
53 
54  $reqdata = pscuBankAccounts($parms);
55 
56  if ($reqdata['status']['response'] != 'true') {
57  throw new Exception($reqdata['status']['message']);
58  }
59 // $return['data']['gettokenresult']=time();
60  $return['data']['Token']=time();
61  $return['data']['BillpayId']=HCU_array_key_value('BillpayId', $parms);
62  $return["data"]['MoblPayName']= (trim(HCU_array_key_value('MoblPayName', $parms)) == '' ? htmlentities('Pay Bills') : htmlentities($parms['MoblPayName']));
63  $return['data']['DateModel']=HCU_array_key_value('datemodel', $parms);
64  $return['data']['Extras']=htmlentities(HCU_array_key_value('ExtraOptions', $parms));
65 
66  } catch (Exception $e) {
67  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage(),'code'=>'999'),'data'=>array('Token'=>'0'));
68  }
69  return $return;
70 }
71 
72 function bpHist($parms) {
73  try {
74  $return=array('status'=>array('response'=>'true','message'=>'success'));
75  if (HCU_array_key_value('pilot', $parms) == 1) {
76  $parms['serviceurl'] = HCU_array_key_value('piloturl', $parms);
77  } else {
78  $parms['serviceurl'] = HCU_array_key_value('produrl', $parms);
79  }
80  if (empty($parms['serviceurl']) ) {
81  throw new Exception('Missing URL configuration');
82  }
83  $parms['Token']=$parms['passwith']['Token'];
84  $reqdata = pscuGetRecentPayments($parms);
85 
86  if ($reqdata['status']['response'] != 'true') {
87  throw new Exception($reqdata['status']['message']);
88  }
89  foreach ($reqdata['data'] as $pkey => $payment) {
90  $item = array();
91  foreach ($payment as $key => $value) {
92  switch ($key) {
93  case 'transactionID':
94  $item['TxnId'] = $value;
95  break;
96  case 'payee':
97  $item['ToName'] = $value['payeeName'];
98  break;
99  case 'amount':
100  $item['Amount'] = sprintf('%0.2f',$value);
101  break;
102  case 'paymentDate':
103  $item['Date'] = substr($value, 0, 10);
104  break;
105  case 'confirmationNumber':
106  $item['AdditionalInfo']['Confirmation'] = $value;
107  break;
108  case "paymentAccount":
109  $item['AdditionalInfo']['Paid_From'] = implode("|", $value);
110  break;
111  case "automaticPayment":
112  $item['AdditionalInfo']['Automatic'] = ($value ? 'True' : 'False');
113  break;
114  case "recurringPayment":
115  $item['AdditionalInfo']['Recurring'] = ($value ? 'True' : 'False');
116  break;
117  case "status":
118  $item['AdditionalInfo']['Status'] = $value;
119  break;
120  }
121  }
122  $item['Type']='Payment';
123  $return['data'][]=$item;
124  }
125 
126  if (is_array($return['data'])) {
127  usort($return['data'], "histSort");
128  }
129 
130 // $return['data']['raw']=print_r($reqdata,true);
131  } catch (Exception $e) {
132  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
133  }
134  return $return;
135 }
136 
137 function bpSched($parms) {
138  try {
139  $return=array('status'=>array('response'=>'true','message'=>'success'));
140  if (HCU_array_key_value('pilot', $parms) == 1) {
141  $parms['serviceurl'] = HCU_array_key_value('piloturl', $parms);
142  } else {
143  $parms['serviceurl'] = HCU_array_key_value('produrl', $parms);
144  }
145  if (empty($parms['serviceurl']) ) {
146  throw new Exception('Missing URL configuration');
147  }
148 
149  $parms['Token']=$parms['passwith']['Token'];
150  $reqdata = pscuGetScheduledPayments($parms);
151  if ($reqdata['status']['response'] != 'true') {
152  throw new Exception($reqdata['status']['message']);
153  }
154  foreach ($reqdata['data'] as $pkey => $payment) {
155  $item = array();
156  foreach ($payment as $key => $value) {
157  switch ($key) {
158  case 'transactionID':
159  $item['TxnId'] = $value;
160  break;
161  case 'payee':
162  $item['ToName'] = $value['payeeName'];
163  $item['ToId'] = $value['id'];
164  break;
165  case 'amount':
166  $item['Amount'] = sprintf('%0.2f',$value);
167  break;
168  case 'paymentDate':
169  $item['Date'] = substr($value, 0, 10);
170  break;
171  case "paymentAccount":
172  # PSCU doesn't use a separate fromID, set both id & name
173  $item['FromId'] = implode("|", $value);
174  $item['AdditionalInfo']['Pay_From'] = implode("|", $value);
175  break;
176  case 'confirmationNumber':
177  $item['AdditionalInfo']['Confirmation'] = $value;
178  break;
179  case "automaticPayment":
180  $item['AdditionalInfo']['Automatic'] = ($value ? 'True' : 'False');
181  break;
182  case "recurringPayment":
183  $item['AdditionalInfo']['Recurring'] = ($value ? 'True' : 'False');
184  break;
185  case "status":
186  $item['AdditionalInfo']['Status'] = $value;
187  break;
188  }
189  }
190  $item['Type']='Payment';
191  //defaulting to Once
192  $item['Frequency']='Once';
193  $return['data'][]=$item;
194  }
195  if (is_array($return['data'])) {
196  usort($return['data'], "schedSort");
197  }
198 
199  } catch (Exception $e) {
200  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
201  }
202  return $return;
203 }
204 
205 function bpSourceAccts($parms) {
206  try {
207  $return=array('status'=>array('response'=>'true','message'=>'success'));
208  if (HCU_array_key_value('pilot', $parms) == 1) {
209  $parms['serviceurl'] = HCU_array_key_value('piloturl', $parms);
210  } else {
211  $parms['serviceurl'] = HCU_array_key_value('produrl', $parms);
212  }
213  if (empty($parms['serviceurl']) ) {
214  throw new Exception('Missing URL configuration');
215  }
216 
217  $parms['Token']=$parms['passwith']['Token'];
218  $reqdata = pscuBankAccounts($parms);
219  if ($reqdata['status']['response'] != 'true') {
220  throw new Exception($reqdata['status']['message']);
221  }
222  $hasAtLeastOneAccount = false;
223  foreach ($reqdata['data'] as $akey => $account) {
224  $item = array();
225  foreach ($account as $key => $value) {
226  switch ($key) {
227  case 'businessName':
228  case 'nickName':
229  if (trim($value) > '') {
230  // $item['Name'] = trim($item['Name']) . "$value ";
231  $item['Name'] = $value;
232  }
233  break;
234  case "paymentAccount":
235  $item['FromId'] = implode("|", $value);
236  $hasAtLeastOneAccount = true;
237  break;
238  case 'preferredAccount':
239  $item['AdditionalInfo']['Preferred_Account'] = (is_null($value) ? 0 : 1);
240  break;
241  case 'primaryAccountOwner':
242  if (trim($value) > '') {
243  $item['AdditionalInfo']['Primary_Owner'] = $value;
244  }
245  break;
246  }
247  }
248  // make sure we have a name for the account
249  if ( strlen( HCU_array_key_value('Name', $item) ) == 0 &&
250  strlen( HCU_array_key_value('FromId', $item) ) > 0 ) {
251  $parts = explode( "|", $item["FromId"] );
252  $item["Name"] = $parts[0];
253  }
254 
255  $item['CanRush']=0;
256  $return['data'][]=$item;
257  }
258 
259  if ( !$hasAtLeastOneAccount ) {
260  throw new Exception("No source accounts received from vendor.");
261  }
262  } catch (Exception $e) {
263  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
264  }
265  return $return;
266 }
267 
268 function bpDestAccts($parms) {
269  # PSCU doesn't do transfers, so this is always Payees
270  try {
271  $return=array('status'=>array('response'=>'true','message'=>'success'));
272  if (HCU_array_key_value('pilot', $parms) == 1) {
273  $parms['serviceurl'] = HCU_array_key_value('piloturl', $parms);
274  } else {
275  $parms['serviceurl'] = HCU_array_key_value('produrl', $parms);
276  }
277  if (empty($parms['serviceurl']) ) {
278  throw new Exception('Missing URL configuration');
279  }
280 
281  $parms['Token']=$parms['passwith']['Token'];
282  $reqdata = pscuGetPayees($parms);
283  if ($reqdata['status']['response'] != 'true') {
284  throw new Exception($reqdata['status']['message']);
285  }
286  $hasAtLeastOneAccount = false;
287  foreach ($reqdata['data'] as $akey => $account) {
288  $item = array();
289  foreach ($account as $key => $value) {
290  switch ($key) {
291  case "id":
292  $item['ToId'] = $value;
293  $hasAtLeastOneAccount = true;
294  break;
295  case 'name':
296  $item['Name'] = $value;
297  break;
298  case 'preferredAccount':
299  $item['AdditionalInfo']['Preferred_Account'] = (is_null($value) ? 0 : 1);
300  break;
301  case 'primaryAccountOwner':
302  if (trim($value) > '') {
303  $item['AdditionalInfo']['Primary_Owner'] = $value;
304  }
305  break;
306  case 'accountNumber':
307  if (trim($value) > '') {
308  $item['AdditionalInfo']['Account_Number'] = $value;
309  }
310  case 'category':
311  if (trim($value) > '') {
312  $item['AdditionalInfo']['Category'] = $value;
313  }
314  case 'earliestPaymentDt':
315  if (strtotime($value)) {
316  $item['FirstPayDate'] = gmdate( "Y-m-d", strtotime( $value ) );
317  }
318  case 'nextPaymentDt':
319  if (strtotime($value)) {
320  $item['NextPayDate'] = gmdate( "Y-m-d", strtotime( $value ) );
321  }
322  break;
323  }
324  }
325  $item['CanRush']=0;
326  $return['data'][]=$item;
327  }
328 
329  if ( !$hasAtLeastOneAccount ) {
330  throw new Exception("No destination accounts received from vendor.");
331  }
332  } catch (Exception $e) {
333  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
334  }
335  return $return;
336 }
337 
338 function bpPmtAdd($parms) {
339  try {
340  $return=array('status'=>array('response'=>'true','message'=>'success'));
341  if (HCU_array_key_value('pilot', $parms) == 1) {
342  $parms['serviceurl'] = HCU_array_key_value('piloturl', $parms);
343  } else {
344  $parms['serviceurl'] = HCU_array_key_value('produrl', $parms);
345  }
346  if (empty($parms['serviceurl']) ) {
347  throw new Exception('Missing URL configuration');
348  }
349  list($acctno,$accttype,$rt) = explode("|",$parms['passwith']['FromId']);
350  $parms['Token']=$parms['passwith']['Token'];
351  $parms['PayeeId'] = $parms['passwith']['ToId'];
352  $parms['AcctNo'] = $acctno;
353  $parms['AcctType'] = $accttype;
354  $parms['rt'] = $rt;
355  $parms['PayDate'] = $parms['passwith']['Date'];
356  $parms['Amount'] = $parms['passwith']['Amount'];
357  # PSCU mobile doesn't support rush payments
358  $parms['DelMethod'] = 'REGULAR_PAYMENT';
359 
360  $reqdata = pscuAddPayment($parms);
361  if ($reqdata['status']['response'] != 'true') {
362  throw new Exception($reqdata['status']['message']);
363  }
364 
365  $return['data']['Confirmation']=$reqdata['data']['confirmationNumber'];
366  $return['data']['TransactionId']=$reqdata['data']['transactionID'];
367  $return['data']['EstimatedArrival']='';
368 
369  } catch (Exception $e) {
370  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
371  }
372  return $return;
373 }
374 
375 function bpTrnAdd($parms) {
376  try {
377  $return=array('status'=>array('response'=>'true','message'=>'success'),'data'=>array());
378  # PSCU has no Transfer functionality - just return error
379  throw new Exception('Feature Unavailable');
380  } catch (Exception $e) {
381  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
382  }
383  return $return;
384 }
385 
386 function bpPmtEdit($parms) {
387  try {
388  $return=array('status'=>array('response'=>'true','message'=>'success'));
389  if (HCU_array_key_value('pilot', $parms) == 1) {
390  $parms['serviceurl'] = HCU_array_key_value('piloturl', $parms);
391  } else {
392  $parms['serviceurl'] = HCU_array_key_value('produrl', $parms);
393  }
394  if (empty($parms['serviceurl']) ) {
395  throw new Exception('Missing URL configuration');
396  }
397 
398  list($acctno,$accttype,$rt) = explode("|",$parms['passwith']['payFrom']);
399  $parms['Token']=$parms['passwith']['Token'];
400  $parms['txnID'] = $parms['passwith']['TxnId'];
401  $parms['PayeeId'] = $parms['passwith']['ToId'];
402  $parms['AcctNo'] = $acctno;
403  $parms['AcctType'] = $accttype;
404  $parms['rt'] = $rt;
405  $parms['PayDate'] = $parms['passwith']['Date'];
406  $parms['Amount'] = $parms['passwith']['Amount'];
407  # PSCU mobile doesn't support rush payments
408  $parms['DelMethod'] = 'REGULAR_PAYMENT';
409 
410  $reqdata = pscuEditPayment($parms);
411  if ($reqdata['status']['response'] != 'true') {
412  throw new Exception($reqdata['status']['message']);
413  }
414 
415  $return['data']['Confirmation']=$reqdata['data']['confirmationNumber'];
416  $return['data']['TransactionId']=$reqdata['data']['transactionID'];
417  $return['data']['EstimatedArrival']='';
418 
419  } catch (Exception $e) {
420  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
421  }
422  return $return;
423 }
424 
425 function bpPmtStop($parms) {
426  try {
427  $return=array('status'=>array('response'=>'true','message'=>'success'));
428  if (HCU_array_key_value('pilot', $parms) == 1) {
429  $parms['serviceurl'] = HCU_array_key_value('piloturl', $parms);
430  } else {
431  $parms['serviceurl'] = HCU_array_key_value('produrl', $parms);
432  }
433  if (empty($parms['serviceurl']) ) {
434  throw new Exception('Missing URL configuration');
435  }
436 
437  $parms['Token']=$parms['passwith']['Token'];
438  $parms['txnID'] = $parms['passwith']['TxnId'];
439 
440  $reqdata = pscuCancelPayment($parms);
441  if ($reqdata['status']['response'] != 'true') {
442  throw new Exception($reqdata['status']['message']);
443  }
444  $return['data']['StopResult']=1;
445 
446  } catch (Exception $e) {
447  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
448  }
449  return $return;
450 }
451 
452 function bpGetPaymentDates($parms) {
453  try {
454  $return=array('status'=>array('response'=>'true','message'=>'success'));
455 
456  if (HCU_array_key_value('pilot', $parms) == 1) {
457  $parms['serviceurl'] = HCU_array_key_value('piloturl', $parms);
458  } else {
459  $parms['serviceurl'] = HCU_array_key_value('produrl', $parms);
460  }
461  if (empty($parms['serviceurl']) ) {
462  throw new Exception('Missing URL configuration');
463  }
464 
465  $parms['Token']=$parms['passwith']['Token'];
466  # PSCU always gets dates relative to Payee
467  $parms['PayeeId']=$parms['passwith']['PayeeId'];
468 
469  $reqdata = pscuGetPayees($parms);
470  if ($reqdata['status']['response'] != 'true') {
471  throw new Exception($reqdata['status']['message']);
472  }
473  foreach ($reqdata['data'] as $payee) {
474  if ($payee['id'] == $parms['PayeeId']) {
475  # this is the $account we want, break out of foreach(reqdata['data']);
476  break;
477  }
478  }
479  $lead = $payee['leadDays'];
480  $firstpay = $payee['earliestPaymentDt'];
481  $nextpay = $payee['nextPaymentDt'];
482  $cutoff = $payee['cutoffTime'];
483 
484  $datelist=array();
485  # test $firstpay to make sure it is a date?
486  $defaultTZ=date_default_timezone_get(); # so we can put it back
487  date_default_timezone_set('UTC');
488  $now=time();
489  if($now > strtotime( $cutoff )) {
490  $Start = strtotime( $nextpay );
491  } else {
492  $Start = strtotime( $firstpay );
493  }
494  # if Start is false (strtotime failed) use current time
495  $Start = ($Start ? $Start : $now);
496  $End = $Start + (90 * 24 * 60 * 60);
497  $holidays = ListHolidays(date('Y',$Start),date('Y',$End));
498  for ($i=$Start; $i<=$End; $i+=86400) {
499  $i=GetNextBusiness($i);
500  $item=array();
501  $idate = gmdate('Y-m-d',$i);
502  if (!in_array($idate,$holidays)) {
503  $item['Proc'] = gmdate('Y-m-d',$i);
504  if (strtoupper($parms['datemodel']) == 'DUE') {
505  $item['Due'] = gmdate('Y-m-d',GetNextBusiness($i+($lead*86400)));
506  }
507 
508  $datelist[]=$item;
509  }
510  }
511 
512  date_default_timezone_set($defaultTZ);
513 
514  $return['data']['EarliestPay'] = $firstpay;
515  $return['data']['NextPay'] = $nextpay;
516  $return['data']['Cutoff'] = $cutoff;
517  $return['data']['LeadDays'] = $lead;
518  # build RushOptions list like this:
519 // $return['data']['RushOptions'][]=array('Display'=>'Overnight','Value'=>'OVERNIGHT_CHECK','Price'=>'14.95');
520  $return['data']['RushOptions']=array();
521  $return['data']['PaymentDates']=$datelist;
522  } catch (Exception $e) {
523  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
524  }
525  return $return;
526 }
527 
528 function bpGetTerms($parms) {
529  try {
530  # PSCU has no Get Terms functionality - just return empty success
531  $return=array('status'=>array('response'=>'true','message'=>'success'),'data'=>array('Terms'=>''));
532  } catch (Exception $e) {
533  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
534  }
535  return $return;
536 }
537 
538 function bpGetRushOptions($parms) {
539  try {
540  # PSCU has no Rush Options functionality - just return empty success
541  $return=array('status'=>array('response'=>'true','message'=>'success'),'data'=>array());
542  } catch (Exception $e) {
543  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
544  }
545  return $return;
546 }
547 
548 function bpAcceptTerms($parms) {
549  try {
550  # PSCU has no Accept Terms functionality - just return empty success
551  $return=array('status'=>array('response'=>'true','message'=>'success'),'data'=>array());
552  } catch (Exception $e) {
553  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
554  }
555  return $return;
556 }
557 
558 function bpGetFeatureList($parms) {
559  try {
560  # Need to decide what the data looks like here -- string list of available features
561  # maybe something out of trusteddetail (which comes to this function in $parms)
562  # to allow customizing by cu
563  $extraOptions = htmlentities($parms['ExtraOptions']);
564 
565  $return=array('status'=>array('response'=>'true','message'=>'success'),
566  'data'=>array("extras" => $extraOptions, 'featurelist'=>""));
567  } catch (Exception $e) {
568  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
569  }
570  return $return;
571 }
572 
573 function schedSort($a, $b)
574 {
575  $atime = strtotime($a['Date']);
576  $btime = strtotime($b['Date']);
577  if ($atime == $btime) {
578  if ($a['ToName'] == $b['ToName']) {
579  return 0;
580  }
581  return ($a['ToName'] < $b['ToName']) ? -1 : 1;
582  }
583  return ($atime < $btime) ? -1 : 1;
584 }
585 
586 function histSort($a, $b) {
587  $atime = strtotime($a['Date']);
588  $btime = strtotime($b['Date']);
589  if ($atime == $btime) {
590  if ($a['ToName'] == $b['ToName']) {
591  return 0;
592  }
593  return ($a['ToName'] < $b['ToName']) ? -1 : 1;
594  }
595  return ($atime > $btime) ? -1 : 1;
596 }
597 
598 function pscuGetPayees($parms) {
599 
600 # uses: $parms['APIKey']
601 # $parms['APISecret']
602 # $parms['serviceurl']
603 # $parms['clientid']
604 # $parms['BillpayId']
605 
606  try {
607 
608  if (!isset($parms['APIKey']) || !isset($parms['APISecret']) ||
609  !isset($parms['serviceurl']) || !isset($parms['clientid']) ||
610  !isset($parms['BillpayId']) || !isset($parms['Token'])) {
611  throw new Exception("Missing Parameters");
612  }
613 
614  $parms['BillpayId'] = substr("000000000{$parms['BillpayId']}",-9,9);
615  $cmd = "/usr/bin/curl -X GET \
616  -H \"Content-Type:application/json\" \
617  -H \"X-application-id:13333\" \
618  -H \"X-account-type:subcriberID\" \
619  -H \"X-pscu-user-id:dmsSystem\" \
620  -H \"X-client-id:{$parms['clientid']}\" \
621  -H \"X-interaction-id:{$parms['Token']}\" \
622  -H \"X-account-number:{$parms['BillpayId']}\" \
623 -u \"{$parms['APIKey']}:{$parms['APISecret']}\" \
624  {$parms['serviceurl']}/payees";
625 
626 // $response=getcurl($cmd);
627 // $reqOpts = array(CURLOPT_HTTPGET => 1);
628 
629  $reqHeaders = array("Content-Type:application/json",
630  "X-application-id:13333",
631  "X-account-type:subcriberID",
632  "X-pscu-user-id:dmsSystem",
633  "X-client-id:{$parms['clientid']}",
634  "X-interaction-id:{$parms['Token']}",
635  "X-account-number:{$parms['BillpayId']}");
636 
637  $reqOpts=array();
638  $parms["environment"]["request"] = $cmd; // the request
639  $parms["environment"]["logPoint"] = "payees"; // this action in a readable form
640  $response = pscu_embcurl($parms, "{$parms['serviceurl']}/payees", "{$parms['APIKey']}:{$parms['APISecret']}", $reqHeaders, $reqOpts);
641 
642 
643  if (!empty($response)) {
644  $response = json_decode($response, true);
645  }
646 
647  if (empty($response) || !($response['success'])) {
648  throw new Exception((empty($response['errorMessage']) ? "No Response" : $response['errorMessage']));
649  } else {
650  # call parse function to format response array
651 // $return = pscuParseResponse($response, 'GetPayees', 'payment');
652  $return['status']['response'] = 'true';
653  $return['status']['message'] = 'success';
654  $return['data'] = $response['data'];
655  }
656  } catch (Exception $e) {
657  $return['status']['response'] = 'false';
658  $return['status']['message'] = $e->getMessage();
659  $return['status']['code'] = MP_PSCU_ERROR_CODE;
660  $return['data'] = array();
661 // $return['cmd'] = $cmd;
662 // $return['reqString'] = $reqString;
663  $return['response'] = $response;
664  }
665  return $return;
666 }
667 
668 function pscuGetRecentPayments($parms) {
669 # uses: $parms['APIKey']
670 # $parms['APISecret']
671 # $parms['serviceurl']
672 # $parms['clientid']
673 # $parms['BillpayId']
674 //
675 # startingPaymentDate:2013-12-30 (current date )
676 # as of 01/20/2016 - startingPaymentDate means the day to start looking at history
677 # numberOfDays:90 (days backward from starting date)
678 # as of 01/20/2016 - based on an email exchange with PSCUPAY developers, days backward from starting date
679 
680  try {
681  if (!isset($parms['APIKey']) || !isset($parms['APISecret']) ||
682  !isset($parms['serviceurl']) || !isset($parms['clientid']) ||
683  !isset($parms['BillpayId']) || !isset($parms['Token'])) {
684  throw new Exception("Missing Parameters");
685  }
686 
687  $start = (isset($parms['startingPaymentDate']) ? $parms['startingPaymentDate'] : date('Y-m-d',time()));
688  $days = (isset($parms['numberOfDays']) ? $parms['numberOfDays'] : 90);
689 
690  $parms['BillpayId'] = substr("000000000{$parms['BillpayId']}",-9,9);
691  $cmd = "/usr/bin/curl -X GET \
692  -H \"Content-Type:application/json\" \
693  -H \"X-application-id:13333\" \
694  -H \"X-account-type:subcriberID\" \
695  -H \"X-pscu-user-id:dmsSystem\" \
696  -H \"X-client-id:{$parms['clientid']}\" \
697  -H \"X-interaction-id:{$parms['Token']}\" \
698  -H \"X-account-number:{$parms['BillpayId']}\" \
699 -u \"{$parms['APIKey']}:{$parms['APISecret']}\" \
700  {$parms['serviceurl']}/recent?startingPaymentDate=$start&numberOfDays=$days";
701 
702 // $response=getcurl($cmd);
703 
704  $reqHeaders = array("Content-Type:application/json",
705  "X-application-id:13333",
706  "X-account-type:subcriberID",
707  "X-pscu-user-id:dmsSystem",
708  "X-client-id:{$parms['clientid']}",
709  "X-interaction-id:{$parms['Token']}",
710  "X-account-number:{$parms['BillpayId']}");
711 
712 // $reqOpts = array(CURLOPT_HTTPGET => 1);
713  $reqOpts=array();
714  $parms["environment"]["request"] = $cmd; // the request
715  $parms["environment"]["logPoint"] = "recent"; // this action in a readable form
716  $response = pscu_embcurl($parms, "{$parms['serviceurl']}/recent?startingPaymentDate=$start&numberOfDays=$days", "{$parms['APIKey']}:{$parms['APISecret']}", $reqHeaders, $reqOpts);
717 
718  if (!empty($response)) {
719  $response = json_decode($response, true);
720  }
721 
722  if (empty($response) || !($response['success'])) {
723  throw new Exception((empty($response['errorMessage']) ? "No Response" : $response['errorMessage']));
724  } else {
725  # call parse function to format response array
726 // $return = pscuParseResponse($response, 'GetScheduledPayments', 'payment');
727  $return['status']['response'] = 'true';
728  $return['status']['message'] = 'success';
729  $return['data'] = $response['data'];
730  }
731  } catch (Exception $e) {
732  $return['status']['response'] = 'false';
733  $return['status']['message'] = $e->getMessage();
734  $return['status']['code'] = MP_PSCU_ERROR_CODE;
735  $return['data'] = array();
736  }
737  return $return;
738 }
739 
740 function pscuGetScheduledPayments($parms) {
741 # uses: $parms['APIKey']
742 # $parms['APISecret']
743 # $parms['serviceurl']
744 # $parms['clientid']
745 # $parms['BillpayId']
746 //
747 # startingPaymentDate:2013-12-30 (current date )
748 # as of 01/20/2016 - startingPaymentDate means the day to start looking at history
749 # numberOfDays:90 (days forward from starting date)
750 # as of 01/20/2016 - based on an email exchange with PSCUPAY developers, days forward from starting date
751 
752  try {
753  if (!isset($parms['APIKey']) || !isset($parms['APISecret']) ||
754  !isset($parms['serviceurl']) || !isset($parms['clientid']) ||
755  !isset($parms['BillpayId']) || !isset($parms['Token'])) {
756  throw new Exception("Missing Parameters");
757  }
758  $start = (isset($parms['startingPaymentDate']) ? $parms['startingPaymentDate'] : date('Y-m-d'));
759  $days = (isset($parms['numberOfDays']) ? $parms['numberOfDays'] : 90);
760 
761  $parms['BillpayId'] = substr("000000000{$parms['BillpayId']}",-9,9);
762  $cmd = "/usr/bin/curl -X GET \
763  -H \"Content-Type:application/json\" \
764  -H \"X-application-id:13333\" \
765  -H \"X-account-type:subcriberID\" \
766  -H \"X-pscu-user-id:dmsSystem\" \
767  -H \"X-client-id:{$parms['clientid']}\" \
768  -H \"X-interaction-id:{$parms['Token']}\" \
769  -H \"X-account-number:{$parms['BillpayId']}\" \
770  -u \"{$parms['APIKey']}:{$parms['APISecret']}\" \
771  {$parms['serviceurl']}/scheduled?startingPaymentDate=$start&numberOfDays=$days";
772 
773 // $response=getcurl($cmd);
774 // $reqOpts = array(CURLOPT_HTTPGET => 1);
775 
776  $reqHeaders = array("Content-Type:application/json",
777  "X-application-id:13333",
778  "X-account-type:subcriberID",
779  "X-pscu-user-id:dmsSystem",
780  "X-client-id:{$parms['clientid']}",
781  "X-interaction-id:{$parms['Token']}",
782  "X-account-number:{$parms['BillpayId']}");
783 
784  $reqOpts=array();
785  $parms["environment"]["request"] = $cmd; // the request
786  $parms["environment"]["logPoint"] = "scheduled"; // this action in a readable form
787  $response = pscu_embcurl($parms, "{$parms['serviceurl']}/scheduled?startingPaymentDate=$start&numberOfDays=$days", "{$parms['APIKey']}:{$parms['APISecret']}", $reqHeaders, $reqOpts);
788 
789  if (!empty($response)) {
790  $response = json_decode($response, true);
791  }
792 
793  if (empty($response) || !($response['success'])) {
794  throw new Exception((empty($response['errorMessage']) ? "No Response" : $response['errorMessage']));
795  } else {
796  # call parse function to format response array
797 // $return = pscuParseResponse($response, 'GetScheduledPayments', 'payment');
798  $return['status']['response'] = 'true';
799  $return['status']['message'] = 'success';
800  $return['data'] = $response['data'];
801  }
802  } catch (Exception $e) {
803  $return['status']['response'] = 'false';
804  $return['status']['message'] = $e->getMessage();
805  $return['status']['code'] = MP_PSCU_ERROR_CODE;
806  $return['data'] = array();
807  }
808  return $return;
809 }
810 
811 function pscuBankAccounts($parms) {
812 # uses: $parms['APIKey']
813 # $parms['APISecret']
814 # $parms['serviceurl']
815 # $parms['clientid']
816 # $parms['BillpayId']
817 
818  try {
819  if (!isset($parms['APIKey']) || !isset($parms['APISecret']) ||
820  !isset($parms['serviceurl']) || !isset($parms['clientid']) ||
821  !isset($parms['BillpayId']) || !isset($parms['Token'])) {
822  throw new Exception("Missing Parameters");
823  }
824 
825  $parms['BillpayId'] = substr("000000000{$parms['BillpayId']}",-9,9);
826  $cmd = "/usr/bin/curl -X GET \
827  -H \"Content-Type:application/json\" \
828  -H \"X-application-id:13333\" \
829  -H \"X-account-type:subcriberID\" \
830  -H \"X-pscu-user-id:dmsSystem\" \
831  -H \"X-client-id:{$parms['clientid']}\" \
832  -H \"X-interaction-id:{$parms['Token']}\" \
833  -H \"X-account-number:{$parms['BillpayId']}\" \
834  -u \"{$parms['APIKey']}:{$parms['APISecret']}\" \
835  {$parms['serviceurl']}/bankAccounts";
836 
837 // $response=getcurl($cmd);
838 
839 // $reqOpts = array(CURLOPT_HTTPGET => 1);
840 
841  $reqHeaders = array("Content-Type:application/json",
842  "X-application-id:13333",
843  "X-account-type:subcriberID",
844  "X-pscu-user-id:dmsSystem",
845  "X-client-id:{$parms['clientid']}",
846  "X-interaction-id:{$parms['Token']}",
847  "X-account-number:{$parms['BillpayId']}");
848 
849  $reqOpts=array();
850  $parms["environment"]["request"] = $cmd; // the request
851  $parms["environment"]["logPoint"] = "bankAccounts"; // this action in a readable form
852  $response = pscu_embcurl($parms, "{$parms['serviceurl']}/bankAccounts", "{$parms['APIKey']}:{$parms['APISecret']}", $reqHeaders, $reqOpts);
853 
854  if (!empty($response)) {
855  $response = json_decode($response, true);
856  }
857 
858  if (empty($response) || !($response['success'])) {
859  throw new Exception((empty($response['errorMessage']) ? "No Response" : $response['errorMessage'] ));
860  } else {
861  # call parse function to format response array
862 // $return = pscuParseResponse($response, 'BankAccounts', 'payment');
863  $return['status']['response'] = 'true';
864  $return['status']['message'] = 'success';
865  $return['data'] = $response['data'];
866  $return['cmd'] = $cmd;
867 
868  }
869  } catch (Exception $e) {
870  $return['status']['response'] = 'false';
871  $return['status']['message'] = $e->getMessage();
872  $return['status']['code'] = MP_PSCU_ERROR_CODE;
873  $return['status']['line'] = $e->getLine();
874  $return['data'] = array();
875  $return['cmd'] = $cmd;
876 // $tfile = fopen ("/tmp/pscupay_api","w");
877 // fwrite ($tfile, "cmd: $cmd\nreqHeader: " . print_r($reqHeaders,true) . "\nreponse: " . print_r($response,true) . "\nparms: " . print_r($parms,true) . "\n");
878 // fclose ($tfile);
879 
880  }
881  return $return;
882 }
883 
884 function pscuAddPayment($parms) {
885 # uses: $parms['APIKey']
886 # $parms['APISecret']
887 # $parms['serviceurl']
888 # $parms['clientid']
889 # $parms['BillpayId']
890 //
891 # $parms['PayeeId']
892 # $parms['Amount']
893 # $parms['PayDate']
894 # $parms['DelMethod']
895 # $parms['PayNote']
896 # $parms['AcctNo']
897 # $parms['AcctType']
898 # $parms['rt']
899 
900  try {
901  if (!isset($parms['APIKey']) || !isset($parms['APISecret']) ||
902  !isset($parms['serviceurl']) || !isset($parms['clientid']) ||
903  !isset($parms['PayeeId']) ||
904  !isset($parms['Amount']) || !isset($parms['PayDate']) ||
905  !isset($parms['DelMethod']) || !isset($parms['AcctNo']) ||
906  !isset($parms['AcctType']) || !isset($parms['rt']) ||
907  !isset($parms['BillpayId'])|| !isset($parms['Token'])) {
908  throw new Exception("Missing Parameters");
909  }
910 
911  $reqString = json_encode(array("payeeID" => "{$parms['PayeeId']}",
912  "paymentAmount" => $parms['Amount'],
913  "paymentDate" => "{$parms['PayDate']}",
914  "paymentDeliveryMethod" => "{$parms['DelMethod']}",
915  "paymentNote" => "{$parms['PayNote']}",
916  "paymentAccount" => array(
917  "accountNumber" => "{$parms['AcctNo']}", "accountType" => "{$parms['AcctType']}", "routingNumber" => "{$parms['rt']}")), JSON_FORCE_OBJECT);
918  $parms['BillpayId'] = substr("000000000{$parms['BillpayId']}",-9,9);
919  $cmd = "/usr/bin/curl -X POST \
920  -H \"Content-Type:application/json\" \
921  -H \"X-application-id:13333\" \
922  -H \"X-account-type:subcriberID\" \
923  -H \"X-pscu-user-id:dmsSystem\" \
924  -H \"X-client-id:{$parms['clientid']}\" \
925  -H \"X-interaction-id:{$parms['Token']}\" \
926  -H \"X-account-number:{$parms['BillpayId']}\" \
927  -u \"{$parms['APIKey']}:{$parms['APISecret']}\" \
928  -d '$reqString' \
929  {$parms['serviceurl']}";
930 // $response=getcurl($cmd);
931 
932  $reqHeaders = array("Content-Type:application/json",
933  "X-application-id:13333",
934  "X-account-type:subcriberID",
935  "X-pscu-user-id:dmsSystem",
936  "X-client-id:{$parms['clientid']}",
937  "X-interaction-id:{$parms['Token']}",
938  "X-account-number:{$parms['BillpayId']}");
939 
940  $reqOpts = array(CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $reqString);
941  $parms["environment"]["request"] = $cmd; // the request
942  $parms["environment"]["logPoint"] = "AddPayment"; // this action in a readable form
943  $response = pscu_embcurl($parms, $parms['serviceurl'], "{$parms['APIKey']}:{$parms['APISecret']}", $reqHeaders, $reqOpts);
944 
945  if (!empty($response)) {
946  $response = json_decode($response, true);
947  }
948 
949  if (empty($response) || !($response['success'])) {
950  throw new Exception((empty($response['errorMessage']) ? "No Response" : $response['errorMessage']));
951  } else {
952  # call parse function to format response array
953 // $return = pscuParseResponse($response, 'AddPayment', 'payment');
954  $return['status']['response'] = 'true';
955  $return['status']['message'] = 'success';
956  $return['data'] = $response['data'];
957  }
958  } catch (Exception $e) {
959  $return['status']['response'] = 'false';
960  $return['status']['message'] = $e->getMessage();
961  $return['status']['code'] = MP_PSCU_ERROR_CODE;
962  $return['data'] = array();
963  }
964  return $return;
965 }
966 
967 function pscuCancelPayment($parms) {
968 # uses: $parms['APIKey']
969 # $parms['APISecret']
970 # $parms['serviceurl']
971 # $parms['clientid']
972 # $parms['BillpayId']
973 # $parms['txnID']
974 
975  try {
976  if (!isset($parms['APIKey']) || !isset($parms['APISecret']) ||
977  !isset($parms['serviceurl']) || !isset($parms['clientid']) ||
978  !isset($parms['txnID']) || !isset($parms['BillpayId']) ||
979  !isset($parms['Token'])) {
980  throw new Exception("Missing Parameters");
981  }
982 
983  $parms['BillpayId'] = substr("000000000{$parms['BillpayId']}",-9,9);
984  $cmd = "/usr/bin/curl -X DELETE \
985  -H \"Content-Type:application/json\" \
986  -H \"X-application-id:13333\" \
987  -H \"X-account-type:subcriberID\" \
988  -H \"X-pscu-user-id:dmsSystem\" \
989  -H \"X-client-id:{$parms['clientid']}\" \
990  -H \"X-interaction-id:{$parms['Token']}\" \
991  -H \"X-account-number:{$parms['BillpayId']}\" \
992  -u \"{$parms['APIKey']}:{$parms['APISecret']}\" \
993  {$parms['serviceurl']}/{$parms['txnID']}";
994 // $response=getcurl($cmd);
995 
996  $reqHeaders = array("Content-Type:application/json",
997  "X-application-id:13333",
998  "X-account-type:subcriberID",
999  "X-pscu-user-id:dmsSystem",
1000  "X-client-id:{$parms['clientid']}",
1001  "X-interaction-id:{$parms['Token']}",
1002  "X-account-number:{$parms['BillpayId']}");
1003 
1004  $reqOpts = array(CURLOPT_CUSTOMREQUEST => 'DELETE');
1005  $parms["environment"]["request"] = $cmd; // the request
1006  $parms["environment"]["logPoint"] = "CancelPayment"; // this action in a readable form
1007  $response = pscu_embcurl($parms, "{$parms['serviceurl']}/{$parms['txnID']}", "{$parms['APIKey']}:{$parms['APISecret']}", $reqHeaders, $reqOpts);
1008 
1009  if (!empty($response)) {
1010  $response = json_decode($response, true);
1011  }
1012 
1013  if (empty($response) || !($response['success'])) {
1014  throw new Exception((empty($response['errorMessage']) ? "No Response" : $response['errorMessage']));
1015  } else {
1016  # call parse function to format response array
1017 // $return = pscuParseResponse($response, 'CancelPayment', 'payment');
1018  $return['status']['response'] = 'true';
1019  $return['status']['message'] = 'success';
1020  $return['data'] = $response['data'];
1021  }
1022  } catch (Exception $e) {
1023  $return['status']['response'] = 'false';
1024  $return['status']['message'] = $e->getMessage();
1025  $return['status']['code'] = MP_PSCU_ERROR_CODE;
1026  $return['data'] = array();
1027  }
1028  return $return;
1029 }
1030 
1031 function pscuEditPayment($parms) {
1032 # uses: $parms['APIKey']
1033 # $parms['APISecret']
1034 # $parms['serviceurl']
1035 # $parms['clientid']
1036 # $parms['BillpayId']
1037 # $parms['PayeeId']
1038 # $parms['txnID']
1039 # $parms['Amount']
1040 # $parms['PayDate']
1041 # $parms['DelMethod']
1042 # $parms['PayNote']
1043 # $parms['AcctNo']
1044 # $parms['AcctType']
1045 # $parms['rt']
1046 
1047  try {
1048  if (!isset($parms['APIKey']) || !isset($parms['APISecret']) ||
1049  !isset($parms['serviceurl']) || !isset($parms['clientid']) ||
1050  !isset($parms['PayeeId']) ||
1051  !isset($parms['txnID']) || !isset($parms['Amount']) ||
1052  !isset($parms['PayDate']) || !isset($parms['DelMethod']) ||
1053  !isset($parms['AcctNo']) || !isset($parms['AcctType']) ||
1054  !isset($parms['rt']) || !isset($parms['BillpayId'])||
1055  !isset($parms['Token'])) {
1056  throw new Exception("Missing Parameters");
1057  }
1058  $reqString = json_encode(array("payeeID" => "{$parms['PayeeId']}",
1059  "transactionID" => "{$parms['txnID']}",
1060  "paymentAmount" => $parms['Amount'],
1061  "paymentDate" => "{$parms['PayDate']}",
1062  "paymentDeliveryMethod" => "{$parms['DelMethod']}",
1063  "paymentNote" => "{$parms['PayNote']}",
1064  "paymentAccount" => array("accountNumber" => "{$parms['AcctNo']}", "accountType" => "{$parms['AcctType']}", "routingNumber" => "{$parms['rt']}")), JSON_FORCE_OBJECT);
1065 
1066  $parms['BillpayId'] = substr("000000000{$parms['BillpayId']}",-9,9);
1067  $cmd = "/usr/bin/curl -X PUT \
1068  -H \"Content-Type:application/json\" \
1069  -H \"X-application-id:13333\" \
1070  -H \"X-account-type:subcriberID\" \
1071  -H \"X-pscu-user-id:dmsSystem\" \
1072  -H \"X-client-id:{$parms['clientid']}\" \
1073  -H \"X-interaction-id:{$parms['Token']}\" \
1074  -H \"X-account-number:{$parms['BillpayId']}\" \
1075  -u \"{$parms['APIKey']}:{$parms['APISecret']}\" \
1076  -d '$reqString' \
1077  {$parms['serviceurl']}/{$parms['txnID']}";
1078 // $response=getcurl($cmd);
1079 
1080  $reqHeaders = array("Content-Type:application/json",
1081  "X-application-id:13333",
1082  "X-account-type:subcriberID",
1083  "X-pscu-user-id:dmsSystem",
1084  "X-client-id:{$parms['clientid']}",
1085  "X-interaction-id:{$parms['Token']}",
1086  "X-account-number:{$parms['BillpayId']}");
1087 
1088  $reqOpts = array(CURLOPT_CUSTOMREQUEST => 'PUT', CURLOPT_POSTFIELDS => $reqString);
1089  $parms["environment"]["request"] = $cmd; // the request
1090  $parms["environment"]["logPoint"] = "EditPayment"; // this action in a readable form
1091  $response = pscu_embcurl($parms, "{$parms['serviceurl']}/{$parms['txnID']}", "{$parms['APIKey']}:{$parms['APISecret']}", $reqHeaders, $reqOpts);
1092 
1093  if (!empty($response)) {
1094  $response = json_decode($response, true);
1095  }
1096 
1097  if (empty($response) || !($response['success'])) {
1098  throw new Exception((empty($response['errormessage']) ? "No Response" : $response['errorMessage']));
1099  } else {
1100  # call parse function to format response array
1101 // $return = pscuParseResponse($response, 'EditPayment', 'payment');
1102  $return['status']['response'] = 'true';
1103  $return['status']['message'] = 'success';
1104  $return['data'] = $response['data'];
1105  }
1106  } catch (Exception $e) {
1107  $return['status']['response'] = 'false';
1108  $return['status']['message'] = $e->getMessage();
1109  $return['status']['code'] = MP_PSCU_ERROR_CODE;
1110  $return['data'] = array();
1111  }
1112  return $return;
1113 }
1114 
1115 function pscu_embcurl($parms, $reqURL, $reqUser, $reqHeaders, $reqOpts = array()) {
1116  # reqURL is the service url
1117  # reqUser is "{$parms['APIKey']}:{$parms['APISecret']}"
1118  # reqHeaders is an array of headers to be sent
1119  # reqOpts is an array of curlopts
1120 
1121  # this is a really bad idea -- pass what you need don't rely on global
1122 // global $parms;
1123 //
1124 // $reqHeaders = array("Content-Type:application/json",
1125 // "X-application-id:13333",
1126 // "X-account-type:subcriberID",
1127 // "X-pscu-user-id:dmsSystem",
1128 // "X-client-id:{$parms['clientid']}",
1129 // "X-interaction-id:999991111",
1130 // "X-account-number:{$parms['BillpayId']}");
1131 
1132  $curlopts = array(
1133  CURLOPT_RETURNTRANSFER => 1,
1134  CURLOPT_SSL_VERIFYPEER => 0,
1135  CURLOPT_SSL_VERIFYHOST => 0,
1136  CURLOPT_HEADER => 0,
1137  CURLOPT_USERPWD => "$reqUser",
1138  CURLOPT_URL => "$reqURL");
1139 
1140  $ch = @curl_init();
1141  @curl_setopt_array($ch, $curlopts);
1142  if (count($reqOpts)) {
1143  @curl_setopt_array($ch, $reqOpts);
1144  }
1145  @curl_setopt($ch, CURLOPT_HTTPHEADER, $reqHeaders);
1146 
1147  $response = @curl_exec($ch);
1148  $responseIP = curl_getinfo($ch,CURLINFO_PRIMARY_IP);
1149  if ( $parms["logging"] == "enabled" ) {
1150  $logParms = $parms["environment"]; // get the environment info passed in
1151  $logParms["token"] = $parms['Token']; // the id used across all communications in session
1152  $logParms["SSOVendor"] = 'PSCUPAY_API';
1153  $logParms["txnId"] = time(); // the id for this transaction
1154  $logParms["reply"] = "$responseIP responded \n$response"; // the response
1155  LogSSOActivity( $logParms );
1156  }
1157 
1158  if (curl_errno($ch)) {
1159  $response = '';
1160  }
1161  @curl_close($ch);
1162  return $response;
1163 }
1164 function ListHolidays($Start, $End) {
1165 //================================================= ================
1166 //This function programmatically determines Federal Holidays landing
1167 // between the given start and end YY
1168 // adapted from code Written by Jana Bauer,
1169 // which was adapted from code obtained at
1170 //http://www.tek-tips.com/faqs.cfm?fid=6003
1171 //================================================= ================
1172 
1173  $holidays = array();
1174  for ($i = $Start; $i <= $End; $i++) {
1175  for ($m = 1; $m <= 12; $m++) {
1176  switch ($m) {
1177  case 3:
1178  case 4:
1179  case 6:
1180  case 8:
1181 // No holidays in these months
1182  break;
1183 
1184  case 1:
1185  // New Year's Day 1/1 or Following Monday
1186  $dtHoliday = mktime(12, 0, 0, 1, 1, $i);
1187 // $holidays[] = date('Y-m-d',GetNearestWeekday($dtHoliday));
1188  $holidays[] = date('Y-m-d',$dtHoliday);
1189  // MLK Day 3rd Monday in January
1190  $dow = idate('w', $dtHoliday);
1191  # find first Monday
1192  switch ($dow) {
1193  case 0: #Sunday
1194  $dtHoliday += 86400;
1195  break;
1196  case 1: #already Monday
1197  break;
1198  case 2:
1199  $dtHoliday += (86400 * 6);
1200  break;
1201  case 3:
1202  $dtHoliday += (86400 * 5);
1203  break;
1204  case 4:
1205  $dtHoliday += (86400 * 4);
1206  break;
1207  case 5:
1208  $dtHoliday += (86400 * 3);
1209  break;
1210  case 6:
1211  $dtHoliday += (86400 * 2);
1212  break;
1213  }
1214  $dtHoliday += (86400 * 14); # add 2 weeks to get 3rd Monday
1215  $holidays[] = date('Y-m-d',$dtHoliday);
1216  break;
1217 
1218  case 2:
1219  // President's Day 3rd Monday in February
1220  $dtHoliday = mktime(12, 0, 0, 2, 1, $i);
1221  $dow = idate('w', $dtHoliday);
1222  # find first Monday
1223  switch ($dow) {
1224  case 0: #Sunday
1225  $dtHoliday += 86400;
1226  break;
1227  case 1: #already Monday
1228  break;
1229  case 2:
1230  $dtHoliday += (86400 * 6);
1231  break;
1232  case 3:
1233  $dtHoliday += (86400 * 5);
1234  break;
1235  case 4:
1236  $dtHoliday += (86400 * 4);
1237  break;
1238  case 5:
1239  $dtHoliday += (86400 * 3);
1240  break;
1241  case 6:
1242  $dtHoliday += (86400 * 2);
1243  break;
1244  }
1245  $dtHoliday += (86400 * 14); # add 2 weeks to get 3rd Monday
1246  $holidays[] = date('Y-m-d',$dtHoliday);
1247  break;
1248 
1249  case 5:
1250  // Memorial Day Last Monday in May
1251  $dtHoliday = mktime(12, 0, 0, 5, 31, $i);
1252  $dow = idate('w', $dtHoliday);
1253  # find last day & back up
1254  switch ($dow) {
1255  case 0: #Sunday
1256  $dtHoliday -= (86400 * 6);
1257  break;
1258  case 1: #already Monday
1259  break;
1260  case 2:
1261  $dtHoliday -= 86400;
1262  break;
1263  case 3:
1264  $dtHoliday -= (86400 * 2);
1265  break;
1266  case 4:
1267  $dtHoliday -= (86400 * 3);
1268  break;
1269  case 5:
1270  $dtHoliday -= (86400 * 4);
1271  break;
1272  case 6:
1273  $dtHoliday -= (86400 * 5);
1274  break;
1275  }
1276  $holidays[] = date('Y-m-d',$dtHoliday);
1277  break;
1278 
1279  case 7:
1280  // Independence Day 7/4 or Following Monday
1281  $dtHoliday = mktime(12, 0, 0, 7, 4, $i);
1282 // $holidays[] = date('Y-m-d',GetNearestWeekday($dtHoliday));
1283  $holidays[] = date('Y-m-d',$dtHoliday);
1284 
1285  break;
1286 
1287  case 9:
1288  // Labor Day 1st Monday in September
1289  $dtHoliday = mktime(12, 0, 0, 9, 1, $i);
1290  $dow = idate('w', $dtHoliday);
1291  # find first Monday
1292  switch ($dow) {
1293  case 0: #Sunday
1294  $dtHoliday += 86400;
1295  break;
1296  case 1: #already Monday
1297  break;
1298  case 2:
1299  $dtHoliday += (86400 * 6);
1300  break;
1301  case 3:
1302  $dtHoliday += (86400 * 5);
1303  break;
1304  case 4:
1305  $dtHoliday += (86400 * 4);
1306  break;
1307  case 5:
1308  $dtHoliday += (86400 * 3);
1309  break;
1310  case 6:
1311  $dtHoliday += (86400 * 2);
1312  break;
1313  }
1314  $holidays[] = date('Y-m-d',$dtHoliday);
1315  break;
1316 
1317  case 10:
1318  // Columbus Day 2nd Monday in October
1319  $dtHoliday = mktime(12, 0, 0, 10, 1, $i);
1320  $dow = idate('w', $dtHoliday);
1321  # find first Monday
1322  switch ($dow) {
1323  case 0: #Sunday
1324  $dtHoliday += 86400;
1325  break;
1326  case 1: #already Monday
1327  break;
1328  case 2:
1329  $dtHoliday += (86400 * 6);
1330  break;
1331  case 3:
1332  $dtHoliday += (86400 * 5);
1333  break;
1334  case 4:
1335  $dtHoliday += (86400 * 4);
1336  break;
1337  case 5:
1338  $dtHoliday += (86400 * 3);
1339  break;
1340  case 6:
1341  $dtHoliday += (86400 * 2);
1342  break;
1343  }
1344  $dtHoliday += (86400 * 7); # add 1 week to get 2nd Monday
1345  $holidays[] = date('Y-m-d',$dtHoliday);
1346  break;
1347 
1348  case 11:
1349  // Veteran's Day 11/11 or Following Monday
1350  $dtHoliday = mktime(12, 0, 0, 11, 11, $i);
1351 // $holidays[] = date('Y-m-d',GetNearestWeekday($dtHoliday));
1352  $holidays[] = date('Y-m-d',$dtHoliday);
1353 
1354  // Thanksgiving Day 4th Thursday in November
1355  $dtHoliday = mktime(12, 0, 0, 11, 1, $i);
1356  $dow = idate('w', $dtHoliday);
1357  # find first Thursday
1358  switch ($dow) {
1359  case 0: #Sunday
1360  $dtHoliday += (86400 * 4);
1361  break;
1362  case 1: #Monday
1363  $dtHoliday += (86400 * 3);
1364  break;
1365  case 2:
1366  $dtHoliday += (86400 * 2);
1367  break;
1368  case 3:
1369  $dtHoliday += 86400;
1370  break;
1371  case 4:
1372  break;
1373  case 5:
1374  $dtHoliday += (86400 * 6);
1375  break;
1376  case 6:
1377  $dtHoliday += (86400 * 5);
1378  break;
1379  }
1380  $dtHoliday += (86400 * 21); # add 3 weeks to get 4th Thursday
1381  $holidays[] = date('Y-m-d',$dtHoliday);
1382  break;
1383 
1384  case 12:
1385  // Christmas Day 12/25 or Following Monday
1386  $dtHoliday = mktime(12, 0, 0, 12, 25, $i);
1387 // $holidays[] = date('Y-m-d',GetNearestWeekday($dtHoliday));
1388  $holidays[] = date('Y-m-d',$dtHoliday);
1389 
1390  break;
1391  }
1392  }
1393  }
1394 
1395  return $holidays;
1396 }
1397 
1398 //------------------------------------------------------------------------------------------------------------
1399 Function GetNearestWeekday($dtTimeStamp) {
1400 // Not currently called - if holiday falls on weekend leave it be
1401 //Note Sunday = 0, Saturday = 6
1402  $intWeekday = idate('w', $dtTimeStamp);
1403  switch ($intWeekday) {
1404  case 0: #Sunday - move forward to Monday
1405  $dtTimeStamp += 86400;
1406  break;
1407  case 6: #Saturday - move back to Friday
1408  $dtTimeStamp -= 86400;
1409  break;
1410  case 1: # Monday - Friday - do nothing
1411  case 2:
1412  case 3:
1413  case 4:
1414  case 5:
1415  default:
1416  break;
1417  }
1418  return $dtTimeStamp;
1419 }
1420 
1421 Function GetNextBusiness($dtTimeStamp) {
1422 // Not currently called - if holiday falls on weekend leave it be
1423 //Note Sunday = 0, Saturday = 6
1424  $intWeekday = idate('w', $dtTimeStamp);
1425  switch ($intWeekday) {
1426  case 0: #Sunday - move forward to Monday
1427  $dtTimeStamp += 86400;
1428  break;
1429  case 6: #Saturday - move forward to Monday
1430  $dtTimeStamp += (86400*2);
1431  break;
1432  case 1: # Monday - Friday - do nothing
1433  case 2:
1434  case 3:
1435  case 4:
1436  case 5:
1437  default:
1438  break;
1439  }
1440  return $dtTimeStamp;
1441 }
1442 
1443 ?>