21 function smo_config($dbh, $accountToUse, $email=
'', &$parms) {
23 $platform = HCU_array_key_value(
'platform', $parms);
24 if (HCU_array_key_value(
'beta', $parms)) {
25 $authparms[
'authId'] = HCU_array_key_value(
'betaAuthId', $parms);
26 $authparms[
'Key'] = HCU_array_key_value(
'betaAuthKey', $parms);
27 $authparms[
'Domain'] = HCU_array_key_value(
'betaAuthDomain', $parms);
28 $authparms[
'partnerId'] = HCU_array_key_value(
'betaPartnerId', $parms);
29 $authparms[
'encKey'] = HCU_array_key_value(
'betaEncKey', $parms);
30 $authparms[
'apiURL'] = HCU_array_key_value(
'betaAPIurl', $parms);
31 $authparms[
'redirURL'] = (in_array ($platform, [
'APP',
'ADA'] ) ? HCU_array_key_value(
'betaMBLurl', $parms) : HCU_array_key_value(
'betaSSOurl', $parms));
35 $authparms[
'authId'] = HCU_array_key_value(
'prodAuthId', $parms);
36 $authparms[
'Key'] = HCU_array_key_value(
'prodAuthKey', $parms);
37 $authparms[
'Domain'] = HCU_array_key_value(
'prodAuthDomain', $parms);
38 $authparms[
'partnerId'] = HCU_array_key_value(
'prodPartnerId', $parms);
39 $authparms[
'encKey'] = HCU_array_key_value(
'prodEncKey', $parms);
40 $authparms[
'apiURL'] = HCU_array_key_value(
'prodAPIurl', $parms);
41 $authparms[
'redirURL'] = (in_array ($platform, [
'APP',
'ADA'] ) ? HCU_array_key_value(
'prodMBLurl', $parms) : HCU_array_key_value(
'prodSSOurl', $parms));
46 if (HCU_array_key_value(
'PadMbrSize', $parms) > 0) {
47 $authparms[
'memberId'] = substr(str_repeat(
'0', $parms[
'PadMbrSize']) . $accountToUse, (-1 * $parms[
'PadMbrSize']), $parms[
'PadMbrSize']);
50 $authparms[
'memberId'] = $accountToUse;
53 $authparms[
'email'] = $email;
56 $reqparms = array(
'authId'=>1,
65 $missing = array_diff_key($reqparms,$authparms);
66 if (
sizeof($missing)) {
67 throw new Exception(
"Missing Parameters (" . join(
", ",array_keys($missing)) .
" )", 100);
69 $parms[
'authparms'] = $authparms;
78 function smo_getAuthorization( $parms ) {
79 $reqparms = array(
'apiURL' => 1);
80 $missing = array_diff_key($reqparms,$parms[
'authparms']);
81 if (
sizeof($missing)) {
82 throw new Exception(
"Missing Parameters (" . join(
", ",array_keys($missing)) .
" )", 100);
84 $request = smo_request($parms);
85 $reqURL =
"{$parms['authparms']['apiURL']}/auth";
86 $parms[
"environment"][
"logPoint"] =
"smo_getAuthToken";
87 $token = smo_embcurl($parms, $reqURL,
'POST', [
"Content-Type:application/json"], $request) ;
88 return array(
'request' => $request,
'token' => $token);
96 function smo_getRedirect( $parms ) {
97 $reqparms = array(
'apiURL' => 1,
'redirURL' => 1,
'smoToken' => 1);
98 $missing = array_diff_key($reqparms,$parms[
'authparms']);
99 if (
sizeof($missing)) {
100 throw new Exception(
"Missing Parameters (" . join(
", ",array_keys($missing)) .
" )", 100);
102 # if desktop / mobile responsive use redirURL; if app use mblreURL 103 $request = json_encode(array(
'authCode' => $parms[
'authparms'][
'smoToken'],
'appUrl' =>
"{$parms['authparms']['redirURL']}"));
104 $reqURL =
"{$parms['authparms']['apiURL']}/redirect";
105 $parms[
"environment"][
"logPoint"] =
"smo_getRedirect";
106 $redirection = smo_embcurl($parms, $reqURL,
'POST', [
"Content-Type:application/json"], $request) ;
107 return array(
'request' => $request,
'redirect' => $redirection);
115 function smo_request( $parms ) {
116 $reqparms = array(
'partnerId' => 1,
117 'encKey' => 1,
'memberId' => 1,
121 $missing = array_diff_key($reqparms,$parms[
'authparms']);
122 if (
sizeof($missing)) {
123 throw new Exception(
"Missing Parameters (" . join(
", ",array_keys($missing)) .
" )", 100);
126 $enc_partnerId = encrypt_smo_openssl($parms[
'authparms'][
'partnerId'], $parms[
'authparms'][
'encKey']);
127 $enc_partnerMemberId = encrypt_smo_openssl($parms[
'authparms'][
'memberId'], $parms[
'authparms'][
'encKey']); # uses
'accountToUse' 128 # testing remove for prod 129 $enc_partnerMemberId = encrypt_smo_openssl($parms[
'MIR'][
'data'][
'accountnumber'], $parms[
'authparms'][
'encKey']); # uses
'accountToUse' 132 [
'key' =>
'partnerId',
133 'value' => $enc_partnerId,
134 'encrypted' =>
true],
135 [
'key' =>
'partnerMemberId',
136 'value' => $enc_partnerMemberId,
137 'encrypted' =>
true]);
139 if (HCU_array_key_value(
'email', $parms[
'authparms']) ) {
140 $enc_email = encrypt_smo_openssl($parms[
'authparms'][
'email'], $parms[
'authparms'][
'encKey']);
143 'value' => $enc_email,
144 'encrypted' =>
true];
147 if (HCU_array_key_value(
'firstname', $parms[
'MIR'][
'data']) ) {
148 $enc_attrib = encrypt_smo_openssl($parms[
'MIR'][
'data'][
'firstname'], $parms[
'authparms'][
'encKey']);
150 [
'key' =>
'firstName',
151 'value' => $enc_attrib,
152 'encrypted' =>
true];
155 if (HCU_array_key_value(
'lastname', $parms[
'MIR'][
'data']) ) {
156 $enc_attrib = encrypt_smo_openssl($parms[
'MIR'][
'data'][
'lastname'], $parms[
'authparms'][
'encKey']);
158 [
'key' =>
'lastName',
159 'value' => $enc_attrib,
160 'encrypted' =>
true];
163 if (HCU_array_key_value(
'address1', $parms[
'MIR'][
'data']) ) {
164 $enc_attrib = encrypt_smo_openssl($parms[
'MIR'][
'data'][
'address1'], $parms[
'authparms'][
'encKey']);
166 [
'key' =>
'address1',
167 'value' => $enc_attrib,
168 'encrypted' =>
true];
171 if (HCU_array_key_value(
'city', $parms[
'MIR'][
'data']) ) {
172 $enc_attrib = encrypt_smo_openssl($parms[
'MIR'][
'data'][
'city'], $parms[
'authparms'][
'encKey']);
175 'value' => $enc_attrib,
176 'encrypted' =>
true];
179 if (HCU_array_key_value(
'state', $parms[
'MIR'][
'data']) ) {
180 $enc_attrib = encrypt_smo_openssl($parms[
'MIR'][
'data'][
'state'], $parms[
'authparms'][
'encKey']);
183 'value' => $enc_attrib,
184 'encrypted' =>
true];
187 if (HCU_array_key_value(
'zip', $parms[
'MIR'][
'data']) ) {
188 $enc_attrib = encrypt_smo_openssl($parms[
'MIR'][
'data'][
'zip'], $parms[
'authparms'][
'encKey']);
191 'value' => $enc_attrib,
192 'encrypted' =>
true];
195 if (HCU_array_key_value(
'dob', $parms[
'MIR'][
'data']) ) {
196 $enc_attrib = encrypt_smo_openssl($parms[
'MIR'][
'data'][
'dob'], $parms[
'authparms'][
'encKey']);
199 'value' => $enc_attrib,
200 'encrypted' =>
true];
203 if (HCU_array_key_value(
'ssn', $parms[
'MIR'][
'data']) ) {
204 $enc_attrib = encrypt_smo_openssl($parms[
'MIR'][
'data'][
'ssn'], $parms[
'authparms'][
'encKey']);
207 'value' => $enc_attrib,
208 'encrypted' =>
true];
214 $request = json_encode(array(
'authId' => $parms[
'authparms'][
'authId'],
215 'authKey' => $parms[
'authparms'][
'Key'],
216 'domain' => $parms[
'authparms'][
'Domain'],
217 'attributes' => $attributes) );
232 function smo_embcurl($parms, $reqURL, $reqMethod, $reqHeaders, $reqData =
'') {
234 CURLOPT_RETURNTRANSFER => 1,
235 CURLOPT_SSL_VERIFYPEER => 0,
236 CURLOPT_SSL_VERIFYHOST => 0,
237 CURLOPT_HEADER => FALSE,
238 CURLOPT_URL =>
"$reqURL");
241 @curl_setopt_array($ch, $curlopts);
242 if ($reqMethod !=
'GET') {
243 @curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $reqMethod);
245 if (strlen($reqData) > 0) {
246 @curl_setopt($ch, CURLOPT_POSTFIELDS, $reqData);
248 @curl_setopt($ch, CURLOPT_HTTPHEADER, $reqHeaders);
250 $response = @curl_exec($ch);
251 if ($parms[
"logging"] ==
"enabled") {
252 $logParms = $parms[
"environment"];
253 $logParms[
"token"] =
'';
254 $logParms[
"txnId"] = time();
255 $logParms[
"request"] =
"curl ";
256 if ($reqMethod !=
'GET') {
257 $logParms[
"request"] .=
"-X $reqMethod ";
259 if (is_array($reqHeaders)) {
260 foreach ($reqHeaders as $hdr) {
261 $logParms[
"request"] .=
"-H '$hdr' ";
264 if (strlen($reqData) > 0) {
265 $logParms[
"request"] .=
"-d '$reqData' ";
267 $logParms[
"request"] .=
"'$reqURL' ";
269 $logParms[
"request"] .=
"\n{$parms['platform']}";
271 $logParms[
"reply"] = print_r(curl_getinfo($ch),
true);
272 $logParms[
"reply"] .=
"\n$response";
274 LogSSOActivity($logParms);
276 $respHTTP = curl_getinfo($ch, CURLINFO_HTTP_CODE);
277 if ($respHTTP >= 400 && $respHTTP < 600) {
278 # HTTP Response 4xx client error or 5xx server error 279 $respArr = array(
"error" => array(
"status" =>
"hcuH" . $respHTTP,
"message" =>
"Connection Failed HTTP Error"));
280 } elseif (curl_errno($ch)) {
281 $respArr = array(
"error" => array(
"status" =>
"hcuC" . curl_errno($ch),
"message" =>
"Curl Error"));
282 } elseif (!isset($response) || $response ==
'') {
283 $respArr = array(
"error" => array(
"status" =>
"hcuE" . curl_errno($ch),
"message" =>
"Empty Response"));
285 $respArr = json_decode($response, TRUE);
286 if (HCU_array_key_value(
'hasErrors', $respArr) ) {
287 $respArr[
'error'] = array(
"status" =>
"dmiE",
"message" => HCU_array_key_value(
'errorMessage',$respArr));
308 function smo_populateMIR($MIR, $Ml, $reqMIR, $datefmt =
'mdY', $noEmpty =
false) {
334 date_default_timezone_set(
'America/Denver');
335 if ( HCU_array_key_value(
'dob', $MIR) && ($st=strtotime($MIR[
'dob'])) && $st > strtotime(
'-100 year') && $st < time()) {
336 $MIR[
'dob'] = date($datefmt, $st);
341 $rmlist = array(
' ',
'-');
342 $MIR[
'ssn'] = str_replace($rmlist,
'', HCU_array_key_value(
'ssn', $MIR) );
343 if (!ctype_digit($MIR[
'ssn']) || strlen($MIR[
'ssn']) <> 9) {
347 $MIR[
'zip'] = str_replace($rmlist,
'', HCU_array_key_value(
'zip', $MIR) );
348 if (strlen($MIR[
'zip']) < 5) {
351 $MIR[
'zip'] = substr($MIR[
'zip'],0,5); # 5 digits only
354 $rmlist = array(
"#",
"&",
"/",
"%",
",",
":",
"=",
"?",
"'");
356 $Ml = str_replace($rmlist,
"", $Ml);
357 if (validateEmail($Ml)) {
360 $MIR[
'email'] = str_replace($rmlist,
"", HCU_array_key_value(
'email', $MIR) );
361 if (!validateEmail($MIR[
'email'])) {
362 unset($MIR[
'email']);
366 $MIR[
'firstname'] = str_replace($rmlist,
"", HCU_array_key_value(
'firstname', $MIR) );
367 $MIR[
'lastname'] = str_replace($rmlist,
"", HCU_array_key_value(
'lastname', $MIR) );
368 $MIR[
'address1'] = str_replace($rmlist,
"", HCU_array_key_value(
'address1', $MIR) );
369 $MIR[
'address2'] = str_replace($rmlist,
"", HCU_array_key_value(
'address2', $MIR) );
370 $MIR[
'city'] = str_replace($rmlist,
"", HCU_array_key_value(
'city', $MIR) );
371 $MIR[
'state'] = str_replace($rmlist,
"", HCU_array_key_value(
'state', $MIR) );
372 if (strlen($MIR[
'state']) <> 2) {
373 unset($MIR[
'state']);
375 $MIR[
'accountnumber'] = str_replace($rmlist,
"", $MIR[
'accountnumber']);
376 # default country code to US. Assume CU will specify for other countries 377 if (!HCU_array_key_value(
'cc', $MIR) ) {
382 if (!HCU_array_key_value(
'email',$MIR)) {
383 unset($MIR[
'email']);
385 if (!HCU_array_key_value(
'firstname',$MIR)) {
386 unset($MIR[
'firstname']);
388 if (!HCU_array_key_value(
'lastname',$MIR)) {
389 unset($MIR[
'lastname']);
391 if (!HCU_array_key_value(
'address1',$MIR)) {
392 unset($MIR[
'address1']);
394 if (!HCU_array_key_value(
'address2',$MIR)) {
395 unset($MIR[
'address2']);
397 if (!HCU_array_key_value(
'city',$MIR)) {
400 if (!HCU_array_key_value(
'state',$MIR)) {
401 unset($MIR[
'state']);
403 if (!HCU_array_key_value(
'zip',$MIR)) {
406 if (!HCU_array_key_value(
'accountnumber',$MIR)) {
407 unset($MIR[
'accountnumber']);
409 if (!HCU_array_key_value(
'dob',$MIR)) {
412 if (!HCU_array_key_value(
'ssn',$MIR)) {
417 $missing = array_diff_key($reqMIR, $MIR);
418 if (
sizeof($missing)) {
419 throw new Exception(
"Invalid Member Info (" . join(
", ", array_keys($missing)) .
")");
421 $return[
'status'][
'response'] =
true;
422 $return[
'status'][
'message'] =
'Success';
423 $return[
'data'] = $MIR;
424 }
catch (Exception $e) {
425 $return[
'status'][
'response'] =
false;
426 $return[
'status'][
'message'] = $e->getMessage();
427 $return[
'data'] = array();
440 function smo_getMIR($HB_ENV, $accountToUse, $useBeta=
false) {
464 if ($HB_ENV[
'live']) {
469 $MIR = GetMemberInfo($HB_ENV, array(
"member" => $accountToUse));
470 $MIRcode = HCU_array_key_value(
'code', $MIR);
471 if ( $MIRcode !==
"000") {
472 throw new Exception(
"Invalid MIR {$MIRcode}");
475 $MIR = array(
'data' => array(
'accountnumber' => $accountToUse,
476 'email' => $HB_ENV[
'Ml'] ) );
478 #============== begin test hack 480 # If we are in testing mode, override the MIR with some of the 481 # test data from SavvyMoney. Beta site only works with beta data. 482 # note that keys to the array are member numbers from the list of 483 # of testers. 261758,542728,815796,552537 are ISUCU testers 484 # 666665 is localhost scrubcu 485 # 177701, 958777 are localhost cruisecu 486 # not sure 177701 will work right, as first attmept made before 487 # override data - may have trashed it on the far side. Or might 491 '261758' => array(
'data' => [
492 'accountnumber' =>
"$accountToUse",
493 'email' => $HB_ENV[
'Ml'],
494 'firstname' =>
'DONALD',
495 'lastname' =>
'THOMAS',
496 'address1' =>
'9883 2131 TR N',
500 'ssn' =>
'666026470',
501 'dob' =>
'01/01/1982',
502 'expectedScore' =>
'665']),
503 '542728' => array(
'data' => [
504 'accountnumber' =>
"$accountToUse",
505 'email' => $HB_ENV[
'Ml'],
506 'firstname' =>
'LARRY',
507 'lastname' =>
'RAVETZ',
508 'address1' =>
'7802 21ST AV',
509 'city' =>
'FLUSHING',
512 'ssn' =>
'666111996',
513 'dob' =>
'01/01/1995',
514 'expectedScore' =>
'732']),
515 '815796' => array(
'data' => [
516 'accountnumber' =>
"$accountToUse",
517 'email' => $HB_ENV[
'Ml'],
518 'firstname' =>
'MARGARET',
519 'lastname' =>
'DANESHMAND',
520 'address1' =>
'7536 21ST AV',
524 'ssn' =>
'666081975',
525 'dob' =>
'01/01/1977',
526 'expectedScore' =>
'776']),
527 '552537' => array(
'data' => [
528 'accountnumber' =>
"$accountToUse",
529 'email' => $HB_ENV[
'Ml'],
530 'firstname' =>
'JAMES',
531 'lastname' =>
'FOLEY',
532 'address1' =>
'8840 21ST ST SW',
536 'ssn' =>
'666706646',
537 'dob' =>
'01/01/1960',
538 'expectedScore' =>
'557']),
539 '177701' => array(
'data' => [
540 'accountnumber' =>
"$accountToUse",
541 'email' => $HB_ENV[
'Ml'],
542 'firstname' =>
'MARGARET',
543 'lastname' =>
'DANESHMAND',
544 'address1' =>
'7536 21ST AV',
548 'ssn' =>
'666081975',
549 'dob' =>
'01/01/1977',
550 'expectedScore' =>
'776']),
551 '958777' => array(
'data' => [
552 'accountnumber' =>
"$accountToUse",
553 'email' => $HB_ENV[
'Ml'],
554 'firstname' =>
'JAMES',
555 'lastname' =>
'FOLEY',
556 'address1' =>
'8840 21ST ST SW',
560 'ssn' =>
'666706646',
561 'dob' =>
'01/01/1960',
562 'expectedScore' =>
'557']),
563 '666665' => array(
'data' => [
564 'accountnumber' =>
"$accountToUse",
565 'email' => $HB_ENV[
'Ml'],
566 'firstname' =>
'JAMES',
567 'lastname' =>
'FOLEY',
568 'address1' =>
'8840 21ST ST SW',
572 'ssn' =>
'666706646',
573 'dob' =>
'01/01/1960',
574 'expectedScore' =>
'557'])
576 if (HCU_array_key_exists($accountToUse, $testData)) {
577 $MIR = $testData[$accountToUse];
580 #============== end test hack 582 $Ml = HCU_array_key_value(
'email',$HB_ENV);
583 # integration uses other values, but if missing user is prompted to 586 'accountnumber' => 1,
590 $parsedMIR = smo_populateMIR($MIR[
'data'], $Ml, $reqMIR,
'mdY',
true);
591 if (!$parsedMIR[
'status'][
'response']) {
592 throw new Exception($parsedMIR[
'status'][
'message']);
595 }
catch (Exception $e) {
596 $parsedMIR = array(
'status' => array(
'response' =>
false,
597 'message' => $e->getMessage() ),
'data' => array() );