8 define(
"MP_TEST_ERROR_CODE",
"2BAD" );
11 function bpAuth($parms) {
13 $return=array(
'status'=>array(
'response'=>
'true',
'code'=>
'000',
'message'=>
'success'));
15 if ($parms[
'pilot'] == 1) {
16 $parms[
'serviceurl'] = $parms[
'piloturl'];
18 $parms[
'serviceurl'] = $parms[
'produrl'];
25 $parms[
'Token']=time();
27 $reqdata[
'status'][
'response'] =
"true";
29 if ($reqdata[
'status'][
'response'] !=
'true') {
30 throw new Exception($reqdata[
'status'][
'message']);
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");
38 }
catch (Exception $e) {
39 $return=array(
'status'=>array(
'response'=>
'false',
'message'=>$e->getMessage(),
'code'=>
'999'),
'data'=>array(
'Token'=>
'0'));
44 function bpHist($parms) {
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'];
59 if ($reqdata[
'status'][
'response'] !=
'true') {
60 throw new Exception($reqdata[
'status'][
'message'] . print_r( $reqdata,
true ));
62 foreach ($reqdata[
'data'] as $pkey => $payment) {
64 foreach ($payment as $key => $value) {
67 $item[
'TxnId'] = $value;
70 $item[
'ToName'] = $value[
'payeeName'];
73 $item[
'Amount'] = sprintf(
'%0.2f',$value);
76 $item[
'Date'] = substr($value, 0, 10);
78 case 'confirmationNumber':
79 $item[
'AdditionalInfo'][
'Confirmation'] = $value;
81 case "paymentAccount":
82 $item[
'AdditionalInfo'][
'Paid_From'] = implode(
"|", $value);
84 case "automaticPayment":
85 $item[
'AdditionalInfo'][
'Automatic'] = ($value ?
'True' :
'False');
87 case "recurringPayment":
88 $item[
'AdditionalInfo'][
'Recurring'] = ($value ?
'True' :
'False');
91 $item[
'AdditionalInfo'][
'Status'] = $value;
95 $item[
'Type']=
'Payment';
96 $return[
'data'][]=$item;
99 if (is_array($return[
'data'])) {
100 usort($return[
'data'],
"histSort");
104 }
catch (Exception $e) {
105 $return=array(
'status'=>array(
'response'=>
'false',
'message'=>$e->getMessage()),
'code'=>MP_PSCU_ERROR_CODE,
'data'=>array());
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"> 114 <GetScheduledResponse xmlns="http://mobile.billpaysite.com/"> 118 <Token>00000000-0000-0000-0000-000000000000</Token> 119 <InstitutionId>0</InstitutionId> 123 <ToName>Charter Communications</ToName> 124 <ToNumber>8351100080570316</ToNumber> 126 <FromName>GEGTCU checking</FromName> 127 <FromNumber>354006016731</FromNumber> 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> 140 </GetScheduledResult> 142 <Product>Consumer</Product> 143 <Token>85feaa25-b127-4711-8885-5758ce550a6a</Token> 144 <InstitutionId>40888</InstitutionId> 146 <Response>S01</Response> 148 <Accepted>0001-01-01T00:00:00</Accepted> 150 </GetScheduledResponse> 154 $response=ipayGetXMLResponse($responsek,
'user/ipay:Response',
'Payment');
156 if ( $response[
"status"][
"response"] ==
"false" ) {
157 if ( empty($response[
"status"][
"message"]) ) {
158 $response[
"status"][
"message"] =
'Get Scheduled Failed';
164 foreach( $response[
"ipaydata"] as $key => $value ) {
165 $outputElem = array();
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"];
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"] );
183 $outputElem[
"AdditionalInfo"] = $Additional;
184 $output[] = $outputElem;
187 usort( $output,
"schedSort" );
190 $return[
"status"][
"code"] =
"000";
192 # normalize the name for scalability 193 $return[
'data'] = $output;
261 function ipayGetXMLResponse ($ipayXML,$XMLresp,$XMLdata) {
263 $xml = simplexml_load_string($ipayXML);
264 $xml->registerXPathNamespace(
'ipay',
'http://mobile.billpaysite.com/');
266 $userresponse = $xml->xpath(
"//ipay:$XMLresp");
267 $dataresponse = $xml->xpath(
"//ipay:$XMLdata");
271 $resp_arr[
"status"][
"response"]=(string)$userresponse[0][0];
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);
283 function bpSourceAccts($parms) {
285 $return=array(
'status'=>array(
'response'=>
'true',
'message'=>
'success'));
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'];
294 if ($reqdata[
'status'][
'response'] !=
'true') {
295 throw new Exception($reqdata[
'status'][
'message']);
297 $hasAtLeastOneAccount =
false;
298 foreach ($reqdata[
'data'] as $akey => $account) {
300 foreach ($account as $key => $value) {
304 if (trim($value) >
'') {
305 $item[
'Name'] = trim($item[
'Name']) .
"$value ";
308 case "paymentAccount":
309 $item[
'FromId'] = implode(
"|", $value);
310 $hasAtLeastOneAccount =
true;
312 case 'preferredAccount':
313 $item[
'AdditionalInfo'][
'Preferred_Account'] = (is_null($value) ? 0 : 1);
315 case 'primaryAccountOwner':
316 if (trim($value) >
'') {
317 $item[
'AdditionalInfo'][
'Primary_Owner'] = $value;
323 if ( strlen( $item[
"Name"] ) == 0 &&
324 strlen( $item[
"FromId"] ) > 0 ) {
325 $parts = explode(
"|", $item[
"FromId"] );
326 $item[
"Name"] = $parts[0];
330 $return[
'data'][]=$item;
333 if ( !$hasAtLeastOneAccount ) {
334 throw new Exception(
"No source accounts received from vendor.");
336 }
catch (Exception $e) {
337 $return=array(
'status'=>array(
'response'=>
'false',
'message'=>$e->getMessage()),
'code'=>MP_PSCU_ERROR_CODE,
'data'=>array());
342 function bpDestAccts($parms) {
343 # PSCU doesn't do transfers, so this is always Payees 345 $return=array(
'status'=>array(
'response'=>
'true',
'message'=>
'success'));
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'];
357 if ($reqdata[
'status'][
'response'] !=
'true') {
358 throw new Exception($reqdata[
'status'][
'message']);
360 $hasAtLeastOneAccount =
false;
361 foreach ($reqdata[
'data'] as $akey => $account) {
363 foreach ($account as $key => $value) {
366 $item[
'ToId'] = $value;
367 $hasAtLeastOneAccount =
true;
370 $item[
'Name'] = $value;
372 case 'preferredAccount':
373 $item[
'AdditionalInfo'][
'Preferred_Account'] = (is_null($value) ? 0 : 1);
375 case 'primaryAccountOwner':
376 if (trim($value) >
'') {
377 $item[
'AdditionalInfo'][
'Primary_Owner'] = $value;
380 case 'accountNumber':
381 if (trim($value) >
'') {
382 $item[
'AdditionalInfo'][
'Account_Number'] = $value;
385 if (trim($value) >
'') {
386 $item[
'AdditionalInfo'][
'Category'] = $value;
388 case 'earliestPaymentDt':
389 if (strtotime($value)) {
390 $item[
'FirstPayDate'] = gmdate(
"Y-m-d", strtotime( $value ) );
392 case 'nextPaymentDt':
393 if (strtotime($value)) {
394 $item[
'NextPayDate'] = gmdate(
"Y-m-d", strtotime( $value ) );
400 $return[
'data'][]=$item;
403 if ( !$hasAtLeastOneAccount ) {
404 throw new Exception(
"No destination accounts received from vendor.");
406 }
catch (Exception $e) {
407 $return=array(
'status'=>array(
'response'=>
'false',
'message'=>$e->getMessage()),
'code'=>MP_PSCU_ERROR_CODE,
'data'=>array());
412 function bpPmtAdd($parms) {
414 $return=array(
'status'=>array(
'response'=>
'true',
'message'=>
'success'));
415 if ($parms[
'pilot'] == 1) {
416 $parms[
'serviceurl'] = $parms[
'piloturl'];
418 $parms[
'serviceurl'] = $parms[
'produrl'];
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;
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';
432 $reqdata[
"data"][
"confirmationNumber"] =
"123456abcdef";
433 $reqdata[
'data'][
'transactionID'] = date(
"Ymdhis" );
434 $reqdata[
"status"][
"response"] =
"true";
436 if ($reqdata[
'status'][
'response'] !=
'true') {
437 throw new Exception($reqdata[
'status'][
'message']);
440 $return[
'data'][
'Confirmation']=$reqdata[
'data'][
'confirmationNumber'];
441 $return[
'data'][
'TransactionId']=$reqdata[
'data'][
'transactionID'];
442 $return[
'data'][
'EstimatedArrival']=
'';
444 }
catch (Exception $e) {
445 $return=array(
'status'=>array(
'response'=>
'false',
'message'=>$e->getMessage()),
'code'=>MP_PSCU_ERROR_CODE,
'data'=>array());
450 function bpTrnAdd($parms) {
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());
461 function bpPmtEdit($parms) {
463 $return=array(
'status'=>array(
'response'=>
'true',
'message'=>
'success'));
464 if ($parms[
'pilot'] == 1) {
465 $parms[
'serviceurl'] = $parms[
'piloturl'];
467 $parms[
'serviceurl'] = $parms[
'produrl'];
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;
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';
483 $reqdata[
"data"][
"confirmationNumber"] =
"123456abcdef";
484 $reqdata[
'data'][
'transactionID'] = date(
"Ymdhis" );
485 $reqdata[
"status"][
"response"] =
"true";
487 if ($reqdata[
'status'][
'response'] !=
'true') {
488 throw new Exception($reqdata[
'status'][
'message']);
491 $return[
'data'][
'Confirmation']=$reqdata[
'data'][
'confirmationNumber'];
492 $return[
'data'][
'TransactionId']=$reqdata[
'data'][
'transactionID'];
493 $return[
'data'][
'EstimatedArrival']=
'';
496 }
catch (Exception $e) {
497 $return=array(
'status'=>array(
'response'=>
'false',
'message'=>$e->getMessage()),
'code'=>MP_PSCU_ERROR_CODE,
'data'=>array());
502 function bpPmtStop($parms) {
504 $return=array(
'status'=>array(
'response'=>
'true',
'message'=>
'success'));
505 if ($parms[
'pilot'] == 1) {
506 $parms[
'serviceurl'] = $parms[
'piloturl'];
508 $parms[
'serviceurl'] = $parms[
'produrl'];
511 $parms[
'Token']=$parms[
'passwith'][
'Token'];
512 $parms[
'txnID'] = $parms[
'passwith'][
'TxnId'];
515 $reqdata[
"data"][
"confirmationNumber"] =
"123456abcdef";
516 $reqdata[
'data'][
'transactionID'] = date(
"Ymdhis" );
517 $reqdata[
"status"][
"response"] =
"true";
519 if ($reqdata[
'status'][
'response'] !=
'true') {
520 throw new Exception($reqdata[
'status'][
'message']);
522 $return[
'data'][
'StopResult']=1;
524 }
catch (Exception $e) {
525 $return=array(
'status'=>array(
'response'=>
'false',
'message'=>$e->getMessage()),
'code'=>MP_PSCU_ERROR_CODE,
'data'=>array());
530 function bpGetPaymentDates( ) {
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>';
536 $return=ipayGetXMLDueDates($responsek,
'user/ipay:Response',
'Date_x0020_Pairs');
537 $responseDates = $return;
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;
549 $response[
"data"][
"RushOptions"] = $responseRush[
"ipaydata"][0];
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;
558 $response[
"status"][
"code"] =
"000";
560 # normalize the name for scalability 561 $response[
'data'][
"PaymentDates"] = $output;
568 function ipayGetXMLDueDates ($ipayXML,$XMLresp,$XMLdata) {
570 $xml = simplexml_load_string($ipayXML);
571 $xml->registerXPathNamespace(
'ipay',
'http://mobile.billpaysite.com/');
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");
578 $resp_arr[
"status"][
"response"]=(string)$userresponse[0][0];
580 $resp_arr[
"ipaydata"]=array();
582 foreach($dataresponse as $key=>$details) {
583 foreach($details as $dkey=>$dd) {
584 $resp_arr[
"ipaydata"][$key][$dkey]=(string)($dd);
591 function bpGetTerms($parms) {
594 $randVal = rand( 0, 100 );
595 if ( $randVal < 100 ) {
596 $randomTerms =
'These are the terms.';
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());
607 function bpGetRushOptions($parms) {
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());
617 function bpAcceptTerms($parms) {
619 # PSCU has no Accept Terms functionality - just return empty success 620 $return=array(
'status'=>array(
'response'=>
'true',
'message'=>
'success',
'code'=>
'000'),
'data'=>array());
622 }
catch (Exception $e) {
623 $return=array(
'status'=>array(
'response'=>
'false',
'message'=>$e->getMessage()),
'code'=>MP_PSCU_ERROR_CODE,
'data'=>array());
628 function bpGetFeatureList($parms) {
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());
639 function schedSort($a, $b)
641 $atime = strtotime($a[
'Date']);
642 $btime = strtotime($b[
'Date']);
643 if ($atime == $btime) {
644 if ($a[
'ToName'] == $b[
'ToName']) {
647 return ($a[
'ToName'] < $b[
'ToName']) ? -1 : 1;
649 return ($atime < $btime) ? -1 : 1;
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']) {
659 return ($a[
'ToName'] < $b[
'ToName']) ? -1 : 1;
661 return ($atime > $btime) ? -1 : 1;
664 function ListHolidays($Start, $End) {
674 for ($i = $Start; $i <= $End; $i++) {
675 for ($m = 1; $m <= 12; $m++) {
686 $dtHoliday = mktime(12, 0, 0, 1, 1, $i);
688 $holidays[] = date(
'Y-m-d',$dtHoliday);
690 $dow = idate(
'w', $dtHoliday);
696 case 1: #already Monday
699 $dtHoliday += (86400 * 6);
702 $dtHoliday += (86400 * 5);
705 $dtHoliday += (86400 * 4);
708 $dtHoliday += (86400 * 3);
711 $dtHoliday += (86400 * 2);
714 $dtHoliday += (86400 * 14); # add 2 weeks to
get 3rd Monday
715 $holidays[] = date(
'Y-m-d',$dtHoliday);
720 $dtHoliday = mktime(12, 0, 0, 2, 1, $i);
721 $dow = idate(
'w', $dtHoliday);
727 case 1: #already Monday
730 $dtHoliday += (86400 * 6);
733 $dtHoliday += (86400 * 5);
736 $dtHoliday += (86400 * 4);
739 $dtHoliday += (86400 * 3);
742 $dtHoliday += (86400 * 2);
745 $dtHoliday += (86400 * 14); # add 2 weeks to
get 3rd Monday
746 $holidays[] = date(
'Y-m-d',$dtHoliday);
751 $dtHoliday = mktime(12, 0, 0, 5, 31, $i);
752 $dow = idate(
'w', $dtHoliday);
753 # find last day & back up 756 $dtHoliday -= (86400 * 6);
758 case 1: #already Monday
764 $dtHoliday -= (86400 * 2);
767 $dtHoliday -= (86400 * 3);
770 $dtHoliday -= (86400 * 4);
773 $dtHoliday -= (86400 * 5);
776 $holidays[] = date(
'Y-m-d',$dtHoliday);
781 $dtHoliday = mktime(12, 0, 0, 7, 4, $i);
783 $holidays[] = date(
'Y-m-d',$dtHoliday);
789 $dtHoliday = mktime(12, 0, 0, 9, 1, $i);
790 $dow = idate(
'w', $dtHoliday);
796 case 1: #already Monday
799 $dtHoliday += (86400 * 6);
802 $dtHoliday += (86400 * 5);
805 $dtHoliday += (86400 * 4);
808 $dtHoliday += (86400 * 3);
811 $dtHoliday += (86400 * 2);
814 $holidays[] = date(
'Y-m-d',$dtHoliday);
819 $dtHoliday = mktime(12, 0, 0, 10, 1, $i);
820 $dow = idate(
'w', $dtHoliday);
826 case 1: #already Monday
829 $dtHoliday += (86400 * 6);
832 $dtHoliday += (86400 * 5);
835 $dtHoliday += (86400 * 4);
838 $dtHoliday += (86400 * 3);
841 $dtHoliday += (86400 * 2);
844 $dtHoliday += (86400 * 7); # add 1 week to
get 2nd Monday
845 $holidays[] = date(
'Y-m-d',$dtHoliday);
850 $dtHoliday = mktime(12, 0, 0, 11, 11, $i);
852 $holidays[] = date(
'Y-m-d',$dtHoliday);
855 $dtHoliday = mktime(12, 0, 0, 11, 1, $i);
856 $dow = idate(
'w', $dtHoliday);
857 # find first Thursday 860 $dtHoliday += (86400 * 4);
863 $dtHoliday += (86400 * 3);
866 $dtHoliday += (86400 * 2);
874 $dtHoliday += (86400 * 6);
877 $dtHoliday += (86400 * 5);
880 $dtHoliday += (86400 * 21); # add 3 weeks to
get 4th Thursday
881 $holidays[] = date(
'Y-m-d',$dtHoliday);
886 $dtHoliday = mktime(12, 0, 0, 12, 25, $i);
888 $holidays[] = date(
'Y-m-d',$dtHoliday);
899 Function GetNearestWeekday($dtTimeStamp) {
902 $intWeekday = idate(
'w', $dtTimeStamp);
903 switch ($intWeekday) {
904 case 0: #Sunday - move forward to Monday
905 $dtTimeStamp += 86400;
907 case 6: #Saturday - move back to Friday
908 $dtTimeStamp -= 86400;
910 case 1: # Monday - Friday -
do nothing
921 Function GetNextBusiness($dtTimeStamp) {
924 $intWeekday = idate(
'w', $dtTimeStamp);
925 switch ($intWeekday) {
926 case 0: #Sunday - move forward to Monday
927 $dtTimeStamp += 86400;
929 case 6: #Saturday - move forward to Monday
930 $dtTimeStamp += (86400*2);
932 case 1: # Monday - Friday -
do nothing