Odyssey
IPAYJX_DUE.i
1 <?php
2 
3 // This file is used to test the higher level code. It just returns hard-coded information.
4 // Writes will return success.
5 //
6 // If specific errors are needed, then they must be added manually.
7 //
8 define( "MP_TEST_ERROR_CODE", "2BAD" );
9 
10 
11 function bpAuth($parms) {
12  try {
13  $return=array('status'=>array('response'=>'true','code'=>'000','message'=>'success'));
14 
15  if ($parms['pilot'] == 1) {
16  $parms['serviceurl'] = $parms['piloturl'];
17  } else {
18  $parms['serviceurl'] = $parms['produrl'];
19  }
20 
21 
22 // PSCU does not have an 'is user authorized' call - just get bank accounts
23 // If no bank accounts, not authorized. Set current date/timestamp as token,
24 // later we'll use is as the correlation ID
25  $parms['Token']=time();
26 
27  $reqdata['status']['response'] = "true";
28 
29  if ($reqdata['status']['response'] != 'true') {
30  throw new Exception($reqdata['status']['message']);
31  }
32 // $return['data']['gettokenresult']=time();
33  $return['data']['Token']=time();
34  $return['data']['BillpayId']=$parms['BillpayId'];
35  $return['data']['DateModel']="due";
36  $return['data']['Extras']=htmlentities("Transfer=0&Recur=0&PayeeMaint=0&AccountMaint=0");
37 
38  } catch (Exception $e) {
39  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage(),'code'=>'999'),'data'=>array('Token'=>'0'));
40  }
41  return $return;
42 }
43 
44 function bpHist($parms) {
45  try {
46 
47  $response = '{"data":[{"amount":136.1,"automaticPayment":false,"confirmationNumber":"J20DP-943L5","detailAvailable":true,"payee":{"accountNumber":"093725462300001","id":"00000000001","nickName":null,"payeeName":"Verizon Wireless"},"paymentAccount":{"accountNumber":"003478002356","accountType":"CHECKING_ACCOUNT","routingNumber":"379065431"},"paymentDate":"2015-04-10T00:00:00-04:00","recurringPayment":true,"status":"PROCESSED","transactionID":"20150319020829044960"},
48  {"amount":30.34,"automaticPayment":false,"confirmationNumber":"3FR5Q-3KE5R","detailAvailable":true,"payee":{"accountNumber":"7433 70 001 0064898","id":"00000000003","nickName":null,"payeeName":"Big Dog Internet"},"paymentAccount":{"accountNumber":"003478002356","accountType":"CHECKING_ACCOUNT","routingNumber":"379065431"},"paymentDate":"2015-04-01T00:00:00-04:00","recurringPayment":true,"status":"PROCESSED","transactionID":"20150225043403281274"},
49  {"amount":177.07,"automaticPayment":false,"confirmationNumber":"JEFJW-KW7E4","detailAvailable":true,"payee":{"accountNumber":"093725462300001","id":"00000000001","nickName":null,"payeeName":"Verizon Wireless"},"paymentAccount":{"accountNumber":"003478002356","accountType":"CHECKING_ACCOUNT","routingNumber":"379065431"},"paymentDate":"2015-03-11T00:00:00-04:00","recurringPayment":true,"status":"PROCESSED","transactionID":"20150218080412085690"},
50  {"amount":30.34,"automaticPayment":false,"confirmationNumber":"MW4J9-L2DXQ","detailAvailable":true,"payee":{"accountNumber":"7433 70 001 0064898","id":"00000000003","nickName":null,"payeeName":"Big Dog Internet"},"paymentAccount":{"accountNumber":"003478002356","accountType":"CHECKING_ACCOUNT","routingNumber":"379065431"},"paymentDate":"2015-02-27T00:00:00-05:00","recurringPayment":true,"status":"PROCESSED","transactionID":"20150128041732200614"},
51  {"amount":135.92,"automaticPayment":false,"confirmationNumber":"J4E32-L4JJR","detailAvailable":true,"payee":{"accountNumber":"093725462300001","id":"00000000001","nickName":null,"payeeName":"Verizon Wireless"},"paymentAccount":{"accountNumber":"003478002356","accountType":"CHECKING_ACCOUNT","routingNumber":"379065431"},"paymentDate":"2015-02-11T00:00:00-05:00","recurringPayment":true,"status":"PROCESSED","transactionID":"20150119070241523913"},
52  {"amount":30.34,"automaticPayment":false,"confirmationNumber":"KR39Y-MR4TW","detailAvailable":true,"payee":{"accountNumber":"7433 70 001 0064898","id":"00000000003","nickName":null,"payeeName":"Big Dog Internet"},"paymentAccount":{"accountNumber":"003478002356","accountType":"CHECKING_ACCOUNT","routingNumber":"379065431"},"paymentDate":"2015-01-30T00:00:00-05:00","recurringPayment":true,"status":"PROCESSED","transactionID":"20141227023331318759"}],
53  "success":true,"meta":{}}';
54  $response = json_decode($response, true);
55  $reqdata["status"]["response"] = "true";
56  $reqdata["status"]["message"] = 'success';
57  $reqdata["data"] = $response['data'];
58 
59  if ($reqdata['status']['response'] != 'true') {
60  throw new Exception($reqdata['status']['message'] . print_r( $reqdata, true ));
61  }
62  foreach ($reqdata['data'] as $pkey => $payment) {
63  $item = array();
64  foreach ($payment as $key => $value) {
65  switch ($key) {
66  case 'transactionID':
67  $item['TxnId'] = $value;
68  break;
69  case 'payee':
70  $item['ToName'] = $value['payeeName'];
71  break;
72  case 'amount':
73  $item['Amount'] = sprintf('%0.2f',$value);
74  break;
75  case 'paymentDate':
76  $item['Date'] = substr($value, 0, 10);
77  break;
78  case 'confirmationNumber':
79  $item['AdditionalInfo']['Confirmation'] = $value;
80  break;
81  case "paymentAccount":
82  $item['AdditionalInfo']['Paid_From'] = implode("|", $value);
83  break;
84  case "automaticPayment":
85  $item['AdditionalInfo']['Automatic'] = ($value ? 'True' : 'False');
86  break;
87  case "recurringPayment":
88  $item['AdditionalInfo']['Recurring'] = ($value ? 'True' : 'False');
89  break;
90  case "status":
91  $item['AdditionalInfo']['Status'] = $value;
92  break;
93  }
94  }
95  $item['Type']='Payment';
96  $return['data'][]=$item;
97  }
98 
99  if (is_array($return['data'])) {
100  usort($return['data'], "histSort");
101  }
102 
103 // $return['data']['raw']=print_r($reqdata,true);
104  } catch (Exception $e) {
105  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
106  }
107  return $return;
108 }
109 
110 function bpSched($parms) {
111  $responsek = '<?xml version="1.0" encoding="utf-8"?>
112 <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
113  <soap:Body>
114  <GetScheduledResponse xmlns="http://mobile.billpaysite.com/">
115  <GetScheduledResult>
116  <Payment>
117  <Product />
118  <Token>00000000-0000-0000-0000-000000000000</Token>
119  <InstitutionId>0</InstitutionId>
120  <Options />
121  <Id>51</Id>
122  <To>18</To>
123  <ToName>Charter Communications</ToName>
124  <ToNumber>8351100080570316</ToNumber>
125  <From>5047658</From>
126  <FromName>GEGTCU checking</FromName>
127  <FromNumber>354006016731</FromNumber>
128  <Type>Payment</Type>
129  <Amount>137.6400</Amount>
130  <Date>2017-06-19T00:00:00</Date>
131  <LastDate>0001-01-01T00:00:00</LastDate>
132  <LastAmount>0</LastAmount>
133  <Rush>Standard</Rush>
134  <Transfer>None</Transfer>
135  <Method>Electronic</Method>
136  <EstimatedArrival>2017-06-21T00:00:00</EstimatedArrival>
137  <Confirmation>51</Confirmation>
138  <Status>NotSet</Status>
139  </Payment>
140  </GetScheduledResult>
141  <user>
142  <Product>Consumer</Product>
143  <Token>85feaa25-b127-4711-8885-5758ce550a6a</Token>
144  <InstitutionId>40888</InstitutionId>
145  <Login>5334</Login>
146  <Response>S01</Response>
147  <Options />
148  <Accepted>0001-01-01T00:00:00</Accepted>
149  </user>
150  </GetScheduledResponse>
151  </soap:Body>
152 </soap:Envelope>';
153 
154 $response=ipayGetXMLResponse($responsek,'user/ipay:Response','Payment');
155 
156 if ( $response["status"]["response"] == "false" ) {
157  if ( empty($response["status"]["message"]) ) {
158  $response["status"]["message"] = 'Get Scheduled Failed';
159  }
160  $return = $response;
161  } else {
162  // put into a consistent structure
163  $output = array();
164  foreach( $response["ipaydata"] as $key => $value ) {
165  $outputElem = array();
166 
167  $outputElem["TxnId"] = $value["Id"];
168  $outputElem["Type"] = $value["Type"];
169  $outputElem["ToId"] = $value["To"];
170  $outputElem["ToName"] = $value["ToName"];
171  $outputElem["FromId"] = $value["From"];
172  $outputElem["Amount"] = number_format( $value["Amount"], 2 );
173  $outputElem["Date"] = date( "m/d/Y", strtotime( $value["Date"] ) );
174  $outputElem["Confirmation"] = $value["Confirmation"];
175 
176  $estimatedArrival = strtotime( $value["EstimatedArrival"] );
177  $Additional = array( "From" => $value["FromName"],
178  "Estimated_Arrival" => date( "m/d/Y", $estimatedArrival ),
179  "Rush" => $value["Rush"],
180  "Method" => $value["Method"] );
181 // "Dump" => print_r( $value, true ) );
182 
183  $outputElem["AdditionalInfo"] = $Additional;
184  $output[] = $outputElem;
185  }
186 
187  usort( $output, "schedSort" );
188 
189  // return good status
190  $return["status"]["code"] = "000";
191 
192  # normalize the name for scalability
193  $return['data'] = $output;
194  }
195 
196  return $return;
197 
198  // try {
199  // $return=array('status'=>array('response'=>'true','message'=>'success'));
200 
201  // $response = '{"data":[{"amount":2230.34,"automaticPayment":false,"confirmationNumber":"KEF34-TH0RS","detailAvailable":true,"payee":{"accountNumber":"7433 70 001 0064898","id":"00000000003","nickName":null,"payeeName":"Rise Internet"},"paymentAccount":{"accountNumber":"003478002356","accountType":"CHECKING_ACCOUNT","routingNumber":"379065431"},"paymentDate":"2015-07-31T00:00:00-04:00","recurringPayment":true,"status":"INPROCESS","transactionID":"20150627024648523995"},
202  // {"amount":136.11,"automaticPayment":false,"confirmationNumber":"2BAD2-UPY0R","detailAvailable":true,"payee":{"accountNumber":"093725462300001","id":"00000000001","nickName":null,"payeeName":"Verizon Wireless"},"paymentAccount":{"accountNumber":"003478002356","accountType":"CHECKING_ACCOUNT","routingNumber":"379065431"},"paymentDate":"2015-08-11T00:00:00-04:00","recurringPayment":true,"status":"PENDING","transactionID":"20150719070147766106"}],
203  // "success":true,"meta":{}}';
204  // $response = json_decode($response, true);
205  // $reqdata["status"]["response"] = "true";
206  // $reqdata["status"]["message"] = 'success';
207  // $reqdata["data"] = $response['data'];
208 
209  // if ($reqdata['status']['response'] != 'true') {
210  // throw new Exception($reqdata['status']['message']);
211  // }
212  // foreach ($reqdata['data'] as $pkey => $payment) {
213  // $item = array();
214  // foreach ($payment as $key => $value) {
215  // switch ($key) {
216  // case 'transactionID':
217  // $item['TxnId'] = $value;
218  // break;
219  // case 'payee':
220  // $item['ToName'] = $value['payeeName'];
221  // $item['ToId'] = $value['id'];
222  // break;
223  // case 'amount':
224  // $item['Amount'] = sprintf('%0.2f',$value);
225  // break;
226  // case 'paymentDate':
227  // $item['Date'] = substr($value, 0, 10);
228  // break;
229  // case "paymentAccount":
230  // # PSCU doesn't use a separate fromID, set both id & name
231  // $item['FromId'] = implode("|", $value);
232  // $item['AdditionalInfo']['Pay_From'] = implode("|", $value);
233  // break;
234  // case 'confirmationNumber':
235  // $item['AdditionalInfo']['Confirmation'] = $value;
236  // break;
237  // case "automaticPayment":
238  // $item['AdditionalInfo']['Automatic'] = ($value ? 'True' : 'False');
239  // break;
240  // case "recurringPayment":
241  // $item['AdditionalInfo']['Recurring'] = ($value ? 'True' : 'False');
242  // break;
243  // case "status":
244  // $item['AdditionalInfo']['Status'] = $value;
245  // break;
246  // }
247  // }
248  // $item['Type']='Payment';
249  // $return['data'][]=$item;
250  // }
251  // if (is_array($return['data'])) {
252  // usort($return['data'], "schedSort");
253  // }
254 
255  // } catch (Exception $e) {
256  // $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
257  // }
258  // return $return;
259 }
260 
261 function ipayGetXMLResponse ($ipayXML,$XMLresp,$XMLdata) {
262 
263  $xml = simplexml_load_string($ipayXML);
264  $xml->registerXPathNamespace('ipay', 'http://mobile.billpaysite.com/');
265 
266  $userresponse = $xml->xpath("//ipay:$XMLresp");
267  $dataresponse = $xml->xpath("//ipay:$XMLdata");
268 // print "<br>dataresponse: ";
269 // print_r( $dataresponse );
270  $resp_arr=array();
271  $resp_arr["status"]["response"]=(string)$userresponse[0][0];
272 
273  $resp_arr["ipaydata"]=array();
274  foreach($dataresponse as $key=>$details) {
275  foreach($details as $dkey=>$dd) {
276  $resp_arr["ipaydata"][$key][$dkey]=(string)($dd);
277  }
278  }
279 
280  return $resp_arr;
281 }
282 
283 function bpSourceAccts($parms) {
284  try {
285  $return=array('status'=>array('response'=>'true','message'=>'success'));
286 
287  $response = '{"data":[{"bankingEnabled":false,"options":null,"billPaymentEnabled":true,"billingAccount":"true","businessName":null,"financialViewEnabled":false,"nickName":"Main","paymentAccount":{"accountNumber":"003478002356","accountType":"CHECKING_ACCOUNT","routingNumber":"379065431"},"preferredAccount":"true","primaryAccountOwner":null,"secondaryAccountOwner":null}],
288  "success":true,"meta":{}}';
289  $response = json_decode($response, true);
290  $reqdata["status"]["response"] = "true";
291  $reqdata["status"]["message"] = 'success';
292  $reqdata["data"] = $response['data'];
293 
294  if ($reqdata['status']['response'] != 'true') {
295  throw new Exception($reqdata['status']['message']);
296  }
297  $hasAtLeastOneAccount = false;
298  foreach ($reqdata['data'] as $akey => $account) {
299  $item = array();
300  foreach ($account as $key => $value) {
301  switch ($key) {
302  case 'businessName':
303  case 'nickName':
304  if (trim($value) > '') {
305  $item['Name'] = trim($item['Name']) . "$value ";
306  }
307  break;
308  case "paymentAccount":
309  $item['FromId'] = implode("|", $value);
310  $hasAtLeastOneAccount = true;
311  break;
312  case 'preferredAccount':
313  $item['AdditionalInfo']['Preferred_Account'] = (is_null($value) ? 0 : 1);
314  break;
315  case 'primaryAccountOwner':
316  if (trim($value) > '') {
317  $item['AdditionalInfo']['Primary_Owner'] = $value;
318  }
319  break;
320  }
321  }
322  // make sure we have a name for the account
323  if ( strlen( $item["Name"] ) == 0 &&
324  strlen( $item["FromId"] ) > 0 ) {
325  $parts = explode( "|", $item["FromId"] );
326  $item["Name"] = $parts[0];
327  }
328 
329  $item['CanRush']=0;
330  $return['data'][]=$item;
331  }
332 
333  if ( !$hasAtLeastOneAccount ) {
334  throw new Exception("No source accounts received from vendor.");
335  }
336  } catch (Exception $e) {
337  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
338  }
339  return $return;
340 }
341 
342 function bpDestAccts($parms) {
343  # PSCU doesn't do transfers, so this is always Payees
344  try {
345  $return=array('status'=>array('response'=>'true','message'=>'success'));
346 
347  $response = '{"data":[{"accountNumber":"093725462300001","addressAvailable":false,"autopayEnabled":true,"category":"Cellular","cutoffTime":"2015-07-28T22:00:00-04:00","earliestPaymentDt":"2015-07-29T00:00:00-04:00","ebillCapable":true,"ebillEnabled":true,"id":"00000000001","leadDays":2,"name":"Verizon Wireless","nextPaymentDt":"2015-07-30T00:00:00-04:00","paperPaymentsEnabled":false,"paymentServices":[{"paymentServiceType":"OVERNIGHT_CHECK","sponsorEnabled":true}],"phoneNumber":"800.922.0204","recurringModelEnabled":false},
348  {"accountNumber":"115-05648R","addressAvailable":true,"autopayEnabled":false,"category":"Uncategorized","cutoffTime":"2015-07-28T15:00:00-04:00","earliestPaymentDt":"2015-07-31T00:00:00-04:00","ebillCapable":false,"ebillEnabled":false,"id":"00000000002","leadDays":4,"name":"Les Schwab Tire Center","nextPaymentDt":"2015-08-03T00:00:00-04:00","paperPaymentsEnabled":true,"paymentServices":[{"paymentServiceType":"OVERNIGHT_CHECK","sponsorEnabled":true}],"phoneNumber":"208-238-7442","recurringModelEnabled":false},
349  {"accountNumber":"7433 70 001 0064898","addressAvailable":true,"autopayEnabled":false,"category":"Internet","cutoffTime":"2015-07-28T15:00:00-04:00","earliestPaymentDt":"2015-07-31T00:00:00-04:00","ebillCapable":false,"ebillEnabled":false,"id":"00000000003","leadDays":4,"name":"Rise Internet","nextPaymentDt":"2015-08-03T00:00:00-04:00","paperPaymentsEnabled":true,"paymentServices":[{"paymentServiceType":"OVERNIGHT_CHECK","sponsorEnabled":true}],"phoneNumber":"8554234638","recurringModelEnabled":true},
350  {"accountNumber":"74241","addressAvailable":true,"autopayEnabled":false,"category":"Uncategorized","cutoffTime":"2015-07-28T15:00:00-04:00","earliestPaymentDt":"2015-07-31T00:00:00-04:00","ebillCapable":false,"ebillEnabled":false,"id":"00000000005","leadDays":4,"name":"Blackrock Dental, PLLC","nextPaymentDt":"2015-08-03T00:00:00-04:00","paperPaymentsEnabled":true,"paymentServices":[{"paymentServiceType":"OVERNIGHT_CHECK","sponsorEnabled":true}],"phoneNumber":"208-232-5294","recurringModelEnabled":false}],
351  "success":true,"meta":{}}';
352  $response = json_decode($response, true);
353  $reqdata["status"]["response"] = "true";
354  $reqdata["status"]["message"] = 'success';
355  $reqdata["data"] = $response['data'];
356 
357  if ($reqdata['status']['response'] != 'true') {
358  throw new Exception($reqdata['status']['message']);
359  }
360  $hasAtLeastOneAccount = false;
361  foreach ($reqdata['data'] as $akey => $account) {
362  $item = array();
363  foreach ($account as $key => $value) {
364  switch ($key) {
365  case "id":
366  $item['ToId'] = $value;
367  $hasAtLeastOneAccount = true;
368  break;
369  case 'name':
370  $item['Name'] = $value;
371  break;
372  case 'preferredAccount':
373  $item['AdditionalInfo']['Preferred_Account'] = (is_null($value) ? 0 : 1);
374  break;
375  case 'primaryAccountOwner':
376  if (trim($value) > '') {
377  $item['AdditionalInfo']['Primary_Owner'] = $value;
378  }
379  break;
380  case 'accountNumber':
381  if (trim($value) > '') {
382  $item['AdditionalInfo']['Account_Number'] = $value;
383  }
384  case 'category':
385  if (trim($value) > '') {
386  $item['AdditionalInfo']['Category'] = $value;
387  }
388  case 'earliestPaymentDt':
389  if (strtotime($value)) {
390  $item['FirstPayDate'] = gmdate( "Y-m-d", strtotime( $value ) );
391  }
392  case 'nextPaymentDt':
393  if (strtotime($value)) {
394  $item['NextPayDate'] = gmdate( "Y-m-d", strtotime( $value ) );
395  }
396  break;
397  }
398  }
399  $item['CanRush']=0;
400  $return['data'][]=$item;
401  }
402 
403  if ( !$hasAtLeastOneAccount ) {
404  throw new Exception("No destination accounts received from vendor.");
405  }
406  } catch (Exception $e) {
407  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
408  }
409  return $return;
410 }
411 
412 function bpPmtAdd($parms) {
413  try {
414  $return=array('status'=>array('response'=>'true','message'=>'success'));
415  if ($parms['pilot'] == 1) {
416  $parms['serviceurl'] = $parms['piloturl'];
417  } else {
418  $parms['serviceurl'] = $parms['produrl'];
419  }
420  list($acctno,$accttype,$rt) = explode("|",$parms['passwith']['FromId']);
421  $parms['Token']=$parms['passwith']['Token'];
422  $parms['PayeeId'] = $parms['passwith']['ToId'];
423  $parms['AcctNo'] = $acctno;
424  $parms['AcctType'] = $accttype;
425  $parms['rt'] = $rt;
426  $parms['PayDate'] = $parms['passwith']['Date'];
427  $parms['Amount'] = $parms['passwith']['Amount'];
428  # PSCU mobile doesn't support rush payments
429  $parms['DelMethod'] = 'REGULAR_PAYMENT';
430 
431  $reqdata = array();
432  $reqdata["data"]["confirmationNumber"] = "123456abcdef";
433  $reqdata['data']['transactionID'] = date( "Ymdhis" );
434  $reqdata["status"]["response"] = "true";
435 
436  if ($reqdata['status']['response'] != 'true') {
437  throw new Exception($reqdata['status']['message']);
438  }
439 
440  $return['data']['Confirmation']=$reqdata['data']['confirmationNumber'];
441  $return['data']['TransactionId']=$reqdata['data']['transactionID'];
442  $return['data']['EstimatedArrival']='';
443 
444  } catch (Exception $e) {
445  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
446  }
447  return $return;
448 }
449 
450 function bpTrnAdd($parms) {
451  try {
452  $return=array('status'=>array('response'=>'true','message'=>'success'),'data'=>array());
453  # PSCU has no Transfer functionality - just return error
454  throw new Exception('Feature Unavailable');
455  } catch (Exception $e) {
456  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
457  }
458  return $return;
459 }
460 
461 function bpPmtEdit($parms) {
462  try {
463  $return=array('status'=>array('response'=>'true','message'=>'success'));
464  if ($parms['pilot'] == 1) {
465  $parms['serviceurl'] = $parms['piloturl'];
466  } else {
467  $parms['serviceurl'] = $parms['produrl'];
468  }
469 
470  list($acctno,$accttype,$rt) = explode("|",$parms['passwith']['FromId']);
471  $parms['Token']=$parms['passwith']['Token'];
472  $parms['txnID'] = $parms['passwith']['TxnId'];
473  $parms['PayeeId'] = $parms['passwith']['ToId'];
474  $parms['AcctNo'] = $acctno;
475  $parms['AcctType'] = $accttype;
476  $parms['rt'] = $rt;
477  $parms['PayDate'] = $parms['passwith']['Date'];
478  $parms['Amount'] = $parms['passwith']['Amount'];
479  # PSCU mobile doesn't support rush payments
480  $parms['DelMethod'] = 'REGULAR_PAYMENT';
481 
482  $reqdata = array();
483  $reqdata["data"]["confirmationNumber"] = "123456abcdef";
484  $reqdata['data']['transactionID'] = date( "Ymdhis" );
485  $reqdata["status"]["response"] = "true";
486 
487  if ($reqdata['status']['response'] != 'true') {
488  throw new Exception($reqdata['status']['message']);
489  }
490 
491  $return['data']['Confirmation']=$reqdata['data']['confirmationNumber'];
492  $return['data']['TransactionId']=$reqdata['data']['transactionID'];
493  $return['data']['EstimatedArrival']='';
494 
495 
496  } catch (Exception $e) {
497  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
498  }
499  return $return;
500 }
501 
502 function bpPmtStop($parms) {
503  try {
504  $return=array('status'=>array('response'=>'true','message'=>'success'));
505  if ($parms['pilot'] == 1) {
506  $parms['serviceurl'] = $parms['piloturl'];
507  } else {
508  $parms['serviceurl'] = $parms['produrl'];
509  }
510 
511  $parms['Token']=$parms['passwith']['Token'];
512  $parms['txnID'] = $parms['passwith']['TxnId'];
513 
514  $reqdata = array();
515  $reqdata["data"]["confirmationNumber"] = "123456abcdef";
516  $reqdata['data']['transactionID'] = date( "Ymdhis" );
517  $reqdata["status"]["response"] = "true";
518 
519  if ($reqdata['status']['response'] != 'true') {
520  throw new Exception($reqdata['status']['message']);
521  }
522  $return['data']['StopResult']=1;
523 
524  } catch (Exception $e) {
525  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
526  }
527  return $return;
528 }
529 
530  function bpGetPaymentDates( ) {
531 
532 
533  $responsek='<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><GetDeliverByDatesResponse xmlns="http://mobile.billpaysite.com/"><GetDeliverByDatesResult><xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"><xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Date_x0020_Pairs" msdata:UseCurrentLocale="true"><xs:complexType><xs:choice minOccurs="0" maxOccurs="unbounded"><xs:element name="Date_x0020_Pairs"><xs:complexType><xs:sequence><xs:element name="ProcessDate" msdata:DateTimeMode="Unspecified" type="xs:dateTime" minOccurs="0" /><xs:element name="DeliverByDate" msdata:DateTimeMode="Unspecified" type="xs:dateTime" minOccurs="0" /></xs:sequence></xs:complexType></xs:element></xs:choice></xs:complexType></xs:element></xs:schema><diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"><DocumentElement xmlns=""><Date_x0020_Pairs diffgr:id="Date Pairs1" msdata:rowOrder="0" diffgr:hasChanges="inserted"><ProcessDate>2015-08-03T00:00:00</ProcessDate><DeliverByDate>2015-08-11T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs2" msdata:rowOrder="1" diffgr:hasChanges="inserted"><ProcessDate>2017-06-05T00:00:00</ProcessDate><DeliverByDate>2017-06-12T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs3" msdata:rowOrder="2" diffgr:hasChanges="inserted"><ProcessDate>2017-06-06T00:00:00</ProcessDate><DeliverByDate>2017-06-13T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs4" msdata:rowOrder="3" diffgr:hasChanges="inserted"><ProcessDate>2017-06-07T00:00:00</ProcessDate><DeliverByDate>2017-06-14T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs5" msdata:rowOrder="4" diffgr:hasChanges="inserted"><ProcessDate>2017-06-08T00:00:00</ProcessDate><DeliverByDate>2017-06-15T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs6" msdata:rowOrder="5" diffgr:hasChanges="inserted"><ProcessDate>2017-06-09T00:00:00</ProcessDate><DeliverByDate>2017-06-16T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs7" msdata:rowOrder="6" diffgr:hasChanges="inserted"><ProcessDate>2017-06-12T00:00:00</ProcessDate><DeliverByDate>2017-06-19T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs8" msdata:rowOrder="7" diffgr:hasChanges="inserted"><ProcessDate>2017-06-13T00:00:00</ProcessDate><DeliverByDate>2017-06-20T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs9" msdata:rowOrder="8" diffgr:hasChanges="inserted"><ProcessDate>2017-06-14T00:00:00</ProcessDate><DeliverByDate>2017-06-21T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs10" msdata:rowOrder="9" diffgr:hasChanges="inserted"><ProcessDate>2017-06-15T00:00:00</ProcessDate><DeliverByDate>2017-06-22T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs11" msdata:rowOrder="10" diffgr:hasChanges="inserted"><ProcessDate>2017-06-16T00:00:00</ProcessDate><DeliverByDate>2017-06-23T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs12" msdata:rowOrder="11" diffgr:hasChanges="inserted"><ProcessDate>2017-06-19T00:00:00</ProcessDate><DeliverByDate>2017-06-26T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs13" msdata:rowOrder="12" diffgr:hasChanges="inserted"><ProcessDate>2017-06-20T00:00:00</ProcessDate><DeliverByDate>2017-06-27T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs14" msdata:rowOrder="13" diffgr:hasChanges="inserted"><ProcessDate>2017-06-21T00:00:00</ProcessDate><DeliverByDate>2017-06-28T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs15" msdata:rowOrder="14" diffgr:hasChanges="inserted"><ProcessDate>2017-06-22T00:00:00</ProcessDate><DeliverByDate>2017-06-29T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs16" msdata:rowOrder="15" diffgr:hasChanges="inserted"><ProcessDate>2017-06-23T00:00:00</ProcessDate><DeliverByDate>2017-06-30T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs17" msdata:rowOrder="16" diffgr:hasChanges="inserted"><ProcessDate>2017-06-26T00:00:00</ProcessDate><DeliverByDate>2017-07-03T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs18" msdata:rowOrder="17" diffgr:hasChanges="inserted"><ProcessDate>2017-06-27T00:00:00</ProcessDate><DeliverByDate>2017-07-05T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs19" msdata:rowOrder="18" diffgr:hasChanges="inserted"><ProcessDate>2017-06-28T00:00:00</ProcessDate><DeliverByDate>2017-07-06T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs20" msdata:rowOrder="19" diffgr:hasChanges="inserted"><ProcessDate>2017-06-29T00:00:00</ProcessDate><DeliverByDate>2017-07-07T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs21" msdata:rowOrder="20" diffgr:hasChanges="inserted"><ProcessDate>2017-06-30T00:00:00</ProcessDate><DeliverByDate>2017-07-10T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs22" msdata:rowOrder="21" diffgr:hasChanges="inserted"><ProcessDate>2017-07-03T00:00:00</ProcessDate><DeliverByDate>2017-07-11T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs23" msdata:rowOrder="22" diffgr:hasChanges="inserted"><ProcessDate>2017-07-05T00:00:00</ProcessDate><DeliverByDate>2017-07-12T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs24" msdata:rowOrder="23" diffgr:hasChanges="inserted"><ProcessDate>2017-07-06T00:00:00</ProcessDate><DeliverByDate>2017-07-13T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs25" msdata:rowOrder="24" diffgr:hasChanges="inserted"><ProcessDate>2017-07-07T00:00:00</ProcessDate><DeliverByDate>2017-07-14T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs26" msdata:rowOrder="25" diffgr:hasChanges="inserted"><ProcessDate>2017-07-10T00:00:00</ProcessDate><DeliverByDate>2017-07-17T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs27" msdata:rowOrder="26" diffgr:hasChanges="inserted"><ProcessDate>2017-07-11T00:00:00</ProcessDate><DeliverByDate>2017-07-18T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs28" msdata:rowOrder="27" diffgr:hasChanges="inserted"><ProcessDate>2017-07-12T00:00:00</ProcessDate><DeliverByDate>2017-07-19T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs29" msdata:rowOrder="28" diffgr:hasChanges="inserted"><ProcessDate>2017-07-13T00:00:00</ProcessDate><DeliverByDate>2017-07-20T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs30" msdata:rowOrder="29" diffgr:hasChanges="inserted"><ProcessDate>2017-07-14T00:00:00</ProcessDate><DeliverByDate>2017-07-21T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs31" msdata:rowOrder="30" diffgr:hasChanges="inserted"><ProcessDate>2017-07-17T00:00:00</ProcessDate><DeliverByDate>2017-07-24T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs32" msdata:rowOrder="31" diffgr:hasChanges="inserted"><ProcessDate>2017-07-18T00:00:00</ProcessDate><DeliverByDate>2017-07-25T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs33" msdata:rowOrder="32" diffgr:hasChanges="inserted"><ProcessDate>2017-07-19T00:00:00</ProcessDate><DeliverByDate>2017-07-26T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs34" msdata:rowOrder="33" diffgr:hasChanges="inserted"><ProcessDate>2017-07-20T00:00:00</ProcessDate><DeliverByDate>2017-07-27T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs35" msdata:rowOrder="34" diffgr:hasChanges="inserted"><ProcessDate>2017-07-21T00:00:00</ProcessDate><DeliverByDate>2017-07-28T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs36" msdata:rowOrder="35" diffgr:hasChanges="inserted"><ProcessDate>2017-07-24T00:00:00</ProcessDate><DeliverByDate>2017-07-31T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs37" msdata:rowOrder="36" diffgr:hasChanges="inserted"><ProcessDate>2017-07-25T00:00:00</ProcessDate><DeliverByDate>2017-08-01T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs38" msdata:rowOrder="37" diffgr:hasChanges="inserted"><ProcessDate>2017-07-26T00:00:00</ProcessDate><DeliverByDate>2017-08-02T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs39" msdata:rowOrder="38" diffgr:hasChanges="inserted"><ProcessDate>2017-07-27T00:00:00</ProcessDate><DeliverByDate>2017-08-03T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs40" msdata:rowOrder="39" diffgr:hasChanges="inserted"><ProcessDate>2017-07-28T00:00:00</ProcessDate><DeliverByDate>2017-08-04T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs41" msdata:rowOrder="40" diffgr:hasChanges="inserted"><ProcessDate>2017-07-31T00:00:00</ProcessDate><DeliverByDate>2017-08-07T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs42" msdata:rowOrder="41" diffgr:hasChanges="inserted"><ProcessDate>2017-08-01T00:00:00</ProcessDate><DeliverByDate>2017-08-08T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs43" msdata:rowOrder="42" diffgr:hasChanges="inserted"><ProcessDate>2017-08-02T00:00:00</ProcessDate><DeliverByDate>2017-08-09T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs44" msdata:rowOrder="43" diffgr:hasChanges="inserted"><ProcessDate>2017-08-03T00:00:00</ProcessDate><DeliverByDate>2017-08-10T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs45" msdata:rowOrder="44" diffgr:hasChanges="inserted"><ProcessDate>2017-08-04T00:00:00</ProcessDate><DeliverByDate>2017-08-11T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs46" msdata:rowOrder="45" diffgr:hasChanges="inserted"><ProcessDate>2017-08-07T00:00:00</ProcessDate><DeliverByDate>2017-08-14T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs47" msdata:rowOrder="46" diffgr:hasChanges="inserted"><ProcessDate>2017-08-08T00:00:00</ProcessDate><DeliverByDate>2017-08-15T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs48" msdata:rowOrder="47" diffgr:hasChanges="inserted"><ProcessDate>2017-08-09T00:00:00</ProcessDate><DeliverByDate>2017-08-16T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs49" msdata:rowOrder="48" diffgr:hasChanges="inserted"><ProcessDate>2017-08-10T00:00:00</ProcessDate><DeliverByDate>2017-08-17T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs50" msdata:rowOrder="49" diffgr:hasChanges="inserted"><ProcessDate>2017-08-11T00:00:00</ProcessDate><DeliverByDate>2017-08-18T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs51" msdata:rowOrder="50" diffgr:hasChanges="inserted"><ProcessDate>2017-08-14T00:00:00</ProcessDate><DeliverByDate>2017-08-21T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs52" msdata:rowOrder="51" diffgr:hasChanges="inserted"><ProcessDate>2017-08-15T00:00:00</ProcessDate><DeliverByDate>2017-08-22T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs53" msdata:rowOrder="52" diffgr:hasChanges="inserted"><ProcessDate>2017-08-16T00:00:00</ProcessDate><DeliverByDate>2017-08-23T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs54" msdata:rowOrder="53" diffgr:hasChanges="inserted"><ProcessDate>2017-08-17T00:00:00</ProcessDate><DeliverByDate>2017-08-24T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs55" msdata:rowOrder="54" diffgr:hasChanges="inserted"><ProcessDate>2017-08-18T00:00:00</ProcessDate><DeliverByDate>2017-08-25T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs56" msdata:rowOrder="55" diffgr:hasChanges="inserted"><ProcessDate>2017-08-21T00:00:00</ProcessDate><DeliverByDate>2017-08-28T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs57" msdata:rowOrder="56" diffgr:hasChanges="inserted"><ProcessDate>2017-08-22T00:00:00</ProcessDate><DeliverByDate>2017-08-29T00:00:00</DeliverByDate></Date_x0020_Pairs><Date_x0020_Pairs diffgr:id="Date Pairs58" msdata:rowOrder="57" diffgr:hasChanges="inserted"><ProcessDate>2017-08-23T00:00:00</ProcessDate><DeliverByDate>2017-08-30T00:00:00</DeliverByDate></Date_x0020_Pairs></DocumentElement></diffgr:diffgram></GetDeliverByDatesResult><user><Product>Consumer</Product><Token>c084b126-3ab0-46de-bc73-4fc4909dc212</Token><InstitutionId>40888</InstitutionId><Login>01</Login><Response>S01</Response><Options /><Accepted>0001-01-01T00:00:00</Accepted></user><payee><Product /><Token>00000000-0000-0000-0000-000000000000</Token><InstitutionId>0</InstitutionId><Options /><Id>1</Id><PaymentMethod>Unknown</PaymentMethod><RushOptions>None</RushOptions><Type>Payment</Type><InstAcct>false</InstAcct></payee></GetDeliverByDatesResponse></soap:Body></soap:Envelope>';
534 
535 
536  $return=ipayGetXMLDueDates($responsek,'user/ipay:Response','Date_x0020_Pairs');
537  $responseDates = $return;
538 
539  $response = array();
540 
541  if ( $responseDates["status"]["response"] == 'false' ) {
542  if (empty( $responseDates["status"]["message"] ) )
543  $responseDates["status"]["message"] = "Get " . (strtoupper( $parms["datemodel"] ) == "DUE" ? "Deliver By" : "Process") . " Dates Failed";
544  $response = $responseDates;
545  } else {
546  // put into a consistent structure
547  $output = array();
548  // return the "options"
549  $response["data"]["RushOptions"] = $responseRush["ipaydata"][0];
550 
551  foreach( $responseDates["ipaydata"] as $key => $value ) {
552  $outputElem = array();
553  $outputElem["Proc"] = date( "Y-m-d", strtotime( $value["ProcessDate"] ) );
554  $outputElem["Due"] = date( "Y-m-d", strtotime( $value["DeliverByDate"] ) );
555  $output[] = $outputElem;
556  }
557  // return good status
558  $response["status"]["code"] = "000";
559 
560  # normalize the name for scalability
561  $response['data']["PaymentDates"] = $output;
562  }
563 
564  return $response;
565 }
566 
567 
568  function ipayGetXMLDueDates ($ipayXML,$XMLresp,$XMLdata) {
569 
570  $xml = simplexml_load_string($ipayXML);
571  $xml->registerXPathNamespace('ipay', 'http://mobile.billpaysite.com/');
572 
573  $userresponse = $xml->xpath("//ipay:$XMLresp");
574  # note! dates are returned as a dataset and NOT under the ipay namespace
575  $dataresponse = $xml->xpath("//$XMLdata");
576 
577  $resp_arr=array();
578  $resp_arr["status"]["response"]=(string)$userresponse[0][0];
579 
580  $resp_arr["ipaydata"]=array();
581 
582  foreach($dataresponse as $key=>$details) {
583  foreach($details as $dkey=>$dd) {
584  $resp_arr["ipaydata"][$key][$dkey]=(string)($dd);
585  }
586  }
587 
588  return $resp_arr;
589  }
590 
591 function bpGetTerms($parms) {
592  try {
593  // randomly get the terms
594  $randVal = rand( 0, 100 );
595  if ( $randVal < 100 ) {
596  $randomTerms = 'These are the terms.';
597  } else {
598  $randomTerms = "";
599  }
600  $return=array('status'=>array('response'=>'true','message'=>'success','code'=>'000'),'data'=>array('Terms'=>$randomTerms));
601  } catch (Exception $e) {
602  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
603  }
604  return $return;
605 }
606 
607 function bpGetRushOptions($parms) {
608  try {
609  # PSCU has no Rush Options functionality - just return empty success
610  $return=array('status'=>array('response'=>'true','message'=>'success'),'data'=>array());
611  } catch (Exception $e) {
612  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
613  }
614  return $return;
615 }
616 
617 function bpAcceptTerms($parms) {
618  try {
619  # PSCU has no Accept Terms functionality - just return empty success
620  $return=array('status'=>array('response'=>'true','message'=>'success','code'=>'000'),'data'=>array());
621 
622  } catch (Exception $e) {
623  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
624  }
625  return $return;
626 }
627 
628 function bpGetFeatureList($parms) {
629  try {
630  # Need to decide what the data looks like here -- string list of available features
631  # maybe something out of trusteddetail (which comes to this function in $parms)
632  # to allow customizing by cu
633  $return=array('status'=>array('response'=>'true','message'=>'success'),'data'=>array('featurelist'=>"Payment|History|Scheduled"));
634  } catch (Exception $e) {
635  $return=array('status'=>array('response'=>'false','message'=>$e->getMessage()),'code'=>MP_PSCU_ERROR_CODE,'data'=>array());
636  }
637  return $return;
638 }
639 function schedSort($a, $b)
640 {
641  $atime = strtotime($a['Date']);
642  $btime = strtotime($b['Date']);
643  if ($atime == $btime) {
644  if ($a['ToName'] == $b['ToName']) {
645  return 0;
646  }
647  return ($a['ToName'] < $b['ToName']) ? -1 : 1;
648  }
649  return ($atime < $btime) ? -1 : 1;
650 }
651 
652 function histSort($a, $b) {
653  $atime = strtotime($a['Date']);
654  $btime = strtotime($b['Date']);
655  if ($atime == $btime) {
656  if ($a['ToName'] == $b['ToName']) {
657  return 0;
658  }
659  return ($a['ToName'] < $b['ToName']) ? -1 : 1;
660  }
661  return ($atime > $btime) ? -1 : 1;
662 }
663 
664 function ListHolidays($Start, $End) {
665 //================================================= ================
666 //This function programmatically determines Federal Holidays landing
667 // between the given start and end YY
668 // adapted from code Written by Jana Bauer,
669 // which was adapted from code obtained at
670 //http://www.tek-tips.com/faqs.cfm?fid=6003
671 //================================================= ================
672 
673  $holidays = array();
674  for ($i = $Start; $i <= $End; $i++) {
675  for ($m = 1; $m <= 12; $m++) {
676  switch ($m) {
677  case 3:
678  case 4:
679  case 6:
680  case 8:
681 // No holidays in these months
682  break;
683 
684  case 1:
685  // New Year's Day 1/1 or Following Monday
686  $dtHoliday = mktime(12, 0, 0, 1, 1, $i);
687 // $holidays[] = date('Y-m-d',GetNearestWeekday($dtHoliday));
688  $holidays[] = date('Y-m-d',$dtHoliday);
689  // MLK Day 3rd Monday in January
690  $dow = idate('w', $dtHoliday);
691  # find first Monday
692  switch ($dow) {
693  case 0: #Sunday
694  $dtHoliday += 86400;
695  break;
696  case 1: #already Monday
697  break;
698  case 2:
699  $dtHoliday += (86400 * 6);
700  break;
701  case 3:
702  $dtHoliday += (86400 * 5);
703  break;
704  case 4:
705  $dtHoliday += (86400 * 4);
706  break;
707  case 5:
708  $dtHoliday += (86400 * 3);
709  break;
710  case 6:
711  $dtHoliday += (86400 * 2);
712  break;
713  }
714  $dtHoliday += (86400 * 14); # add 2 weeks to get 3rd Monday
715  $holidays[] = date('Y-m-d',$dtHoliday);
716  break;
717 
718  case 2:
719  // President's Day 3rd Monday in February
720  $dtHoliday = mktime(12, 0, 0, 2, 1, $i);
721  $dow = idate('w', $dtHoliday);
722  # find first Monday
723  switch ($dow) {
724  case 0: #Sunday
725  $dtHoliday += 86400;
726  break;
727  case 1: #already Monday
728  break;
729  case 2:
730  $dtHoliday += (86400 * 6);
731  break;
732  case 3:
733  $dtHoliday += (86400 * 5);
734  break;
735  case 4:
736  $dtHoliday += (86400 * 4);
737  break;
738  case 5:
739  $dtHoliday += (86400 * 3);
740  break;
741  case 6:
742  $dtHoliday += (86400 * 2);
743  break;
744  }
745  $dtHoliday += (86400 * 14); # add 2 weeks to get 3rd Monday
746  $holidays[] = date('Y-m-d',$dtHoliday);
747  break;
748 
749  case 5:
750  // Memorial Day Last Monday in May
751  $dtHoliday = mktime(12, 0, 0, 5, 31, $i);
752  $dow = idate('w', $dtHoliday);
753  # find last day & back up
754  switch ($dow) {
755  case 0: #Sunday
756  $dtHoliday -= (86400 * 6);
757  break;
758  case 1: #already Monday
759  break;
760  case 2:
761  $dtHoliday -= 86400;
762  break;
763  case 3:
764  $dtHoliday -= (86400 * 2);
765  break;
766  case 4:
767  $dtHoliday -= (86400 * 3);
768  break;
769  case 5:
770  $dtHoliday -= (86400 * 4);
771  break;
772  case 6:
773  $dtHoliday -= (86400 * 5);
774  break;
775  }
776  $holidays[] = date('Y-m-d',$dtHoliday);
777  break;
778 
779  case 7:
780  // Independence Day 7/4 or Following Monday
781  $dtHoliday = mktime(12, 0, 0, 7, 4, $i);
782 // $holidays[] = date('Y-m-d',GetNearestWeekday($dtHoliday));
783  $holidays[] = date('Y-m-d',$dtHoliday);
784 
785  break;
786 
787  case 9:
788  // Labor Day 1st Monday in September
789  $dtHoliday = mktime(12, 0, 0, 9, 1, $i);
790  $dow = idate('w', $dtHoliday);
791  # find first Monday
792  switch ($dow) {
793  case 0: #Sunday
794  $dtHoliday += 86400;
795  break;
796  case 1: #already Monday
797  break;
798  case 2:
799  $dtHoliday += (86400 * 6);
800  break;
801  case 3:
802  $dtHoliday += (86400 * 5);
803  break;
804  case 4:
805  $dtHoliday += (86400 * 4);
806  break;
807  case 5:
808  $dtHoliday += (86400 * 3);
809  break;
810  case 6:
811  $dtHoliday += (86400 * 2);
812  break;
813  }
814  $holidays[] = date('Y-m-d',$dtHoliday);
815  break;
816 
817  case 10:
818  // Columbus Day 2nd Monday in October
819  $dtHoliday = mktime(12, 0, 0, 10, 1, $i);
820  $dow = idate('w', $dtHoliday);
821  # find first Monday
822  switch ($dow) {
823  case 0: #Sunday
824  $dtHoliday += 86400;
825  break;
826  case 1: #already Monday
827  break;
828  case 2:
829  $dtHoliday += (86400 * 6);
830  break;
831  case 3:
832  $dtHoliday += (86400 * 5);
833  break;
834  case 4:
835  $dtHoliday += (86400 * 4);
836  break;
837  case 5:
838  $dtHoliday += (86400 * 3);
839  break;
840  case 6:
841  $dtHoliday += (86400 * 2);
842  break;
843  }
844  $dtHoliday += (86400 * 7); # add 1 week to get 2nd Monday
845  $holidays[] = date('Y-m-d',$dtHoliday);
846  break;
847 
848  case 11:
849  // Veteran's Day 11/11 or Following Monday
850  $dtHoliday = mktime(12, 0, 0, 11, 11, $i);
851 // $holidays[] = date('Y-m-d',GetNearestWeekday($dtHoliday));
852  $holidays[] = date('Y-m-d',$dtHoliday);
853 
854  // Thanksgiving Day 4th Thursday in November
855  $dtHoliday = mktime(12, 0, 0, 11, 1, $i);
856  $dow = idate('w', $dtHoliday);
857  # find first Thursday
858  switch ($dow) {
859  case 0: #Sunday
860  $dtHoliday += (86400 * 4);
861  break;
862  case 1: #Monday
863  $dtHoliday += (86400 * 3);
864  break;
865  case 2:
866  $dtHoliday += (86400 * 2);
867  break;
868  case 3:
869  $dtHoliday += 86400;
870  break;
871  case 4:
872  break;
873  case 5:
874  $dtHoliday += (86400 * 6);
875  break;
876  case 6:
877  $dtHoliday += (86400 * 5);
878  break;
879  }
880  $dtHoliday += (86400 * 21); # add 3 weeks to get 4th Thursday
881  $holidays[] = date('Y-m-d',$dtHoliday);
882  break;
883 
884  case 12:
885  // Christmas Day 12/25 or Following Monday
886  $dtHoliday = mktime(12, 0, 0, 12, 25, $i);
887 // $holidays[] = date('Y-m-d',GetNearestWeekday($dtHoliday));
888  $holidays[] = date('Y-m-d',$dtHoliday);
889 
890  break;
891  }
892  }
893  }
894 
895  return $holidays;
896 }
897 
898 //------------------------------------------------------------------------------------------------------------
899 Function GetNearestWeekday($dtTimeStamp) {
900 // Not currently called - if holiday falls on weekend leave it be
901 //Note Sunday = 0, Saturday = 6
902  $intWeekday = idate('w', $dtTimeStamp);
903  switch ($intWeekday) {
904  case 0: #Sunday - move forward to Monday
905  $dtTimeStamp += 86400;
906  break;
907  case 6: #Saturday - move back to Friday
908  $dtTimeStamp -= 86400;
909  break;
910  case 1: # Monday - Friday - do nothing
911  case 2:
912  case 3:
913  case 4:
914  case 5:
915  default:
916  break;
917  }
918  return $dtTimeStamp;
919 }
920 
921 Function GetNextBusiness($dtTimeStamp) {
922 // Not currently called - if holiday falls on weekend leave it be
923 //Note Sunday = 0, Saturday = 6
924  $intWeekday = idate('w', $dtTimeStamp);
925  switch ($intWeekday) {
926  case 0: #Sunday - move forward to Monday
927  $dtTimeStamp += 86400;
928  break;
929  case 6: #Saturday - move forward to Monday
930  $dtTimeStamp += (86400*2);
931  break;
932  case 1: # Monday - Friday - do nothing
933  case 2:
934  case 3:
935  case 4:
936  case 5:
937  default:
938  break;
939  }
940  return $dtTimeStamp;
941 }
942 
943 ?>