user = $user; $this->format = $httpStatusCode; $this->module = "User"; $this->model = "User"; $this->admin = $admin; $this->password_logs = $password_logs; $this->loyalty_card = $loyalty_card; $this->personal_details = $personal_details; $this->otp_logs = $otp_logs; $this->admin_logs = $admin_logs; $this->lcard_logs = $lcard_logs; $this->system_preferences = $system_preferences; $this->otp_attempts = $otp_attempts; $this->mobile_usage = $mobile_usage; $this->mpin_codes = $mpin_codes; } /** * CMS api * * @return \Illuminate\Http\Response */ public function cms_usernameLogin(Request $request) { $admin = $this->admin->getByField([ 'username' => $request->get('username'), 'is_active' => 1, ]); if($admin->count()) { if($admin[0]['status'] == 1) { $data['inactive'] = true; return $this->format->unprocessableEntity("Username does not exist.",$data); } elseif($admin[0]['is_active'] == 1) { // note : password checking must be in the password form // $password_log = $this->password_logs->getLastLog($admin[0]['admin_id']); // if($password_log) // { // $hasExceeded = StringHelper::check_time_exceeded($password_log['created_dt'], '+15 minutes'); // if($password_log['generated_password'] != null && $hasExceeded == false) // { // $data['expired'] = true; // return $this->format->unprocessableEntity("Your password is expired",$data); // } // } $data['is_verified'] = true; $data['role'] = $admin[0]['role']; return $this->format->success("Success",$data); } } $data['is_verified'] = false; return $this->format->unprocessableEntity("Username does not exist.",$data); } public function cms_login() { if(Auth::attempt(['username' => request('username'), 'password' => request('password')])) { $user = Auth::user(); $admin = $this->admin->getByField([ 'username' => request('username'), 'is_active' => 1, ]); if($admin[0]['is_passwordChanged'] == 1) { $this->admin_logs->log($admin[0]['admin_id'],self::MODULE,'LOGIN'); // $success['token'] = $user->createToken('Admin')->accessToken; $data = [ 'grant_type' => 'password', 'client_id' => env("PASSPORT_ADMIN_CLIENT_ID", 2), 'client_secret' => env("PASSPORT_ADMIN_CLIENT_SECRET", "test"), 'username' => $admin[0]['email'], 'password' => request('password'), 'scope' => '' ]; $request = Request::create('/oauth/token', 'POST', $data); $result = app()->handle($request)->getContent(); $result = json_decode($result); $success['token'] = $result->access_token; // $success['refresh_token'] = $result->refresh_token; $message = 'Success'; } else { $password_log = $this->password_logs->getLastLog($admin[0]['admin_id']); if($password_log) { $hasExceeded = StringHelper::check_time_exceeded($password_log['created_dt'], '+15 minutes'); if($password_log['generated_password'] != null && $hasExceeded == false) { $data['expired'] = true; return $this->format->unprocessableEntity("Your password is expired",$data); } } $success['prompt_password'] = 1; $success['admin_uuid'] = $admin[0]['admin_uuid']; $message = 'User must change password'; } return $this->format->success($message,$success); } else{ return $this->format->unauthorized("Incorrect Password"); } } public function cms_changePassword(UserFormValidation $request) { $admin = $this->admin->getByField(['admin_uuid' => $request->get('admin_uuid')]); //added this to check if the admin uuid is correct and to avoid Undefined offset: 0 if ($admin->count() == 0){ return $this->format->unauthorized(); } // Shall not be the same with the previous 2 passwords. $logs = $this->password_logs->getByField([ 'admin_id' =>$admin[0]['admin_id'], 'is_generated' => 0 ]); $good_password = true; if(count($logs) > 0) { $ctr = 1; foreach ($logs as $key => $value) { if($ctr <= 2) { if($value['password'] == md5($request->get('password'))) $good_password = false; } $ctr++; } } if($good_password) { $success_admin = $this->admin->changePassword($request); $success_user = $this->user->changePassword($request,$admin[0]['username']); $this->password_logs->store($admin[0]['admin_id'],$request->get('password'),$admin[0]['admin_id']); if($success_user && $success_admin) { $this->admin_logs->log($admin[0]['admin_id'],self::MODULE,'UPDATE','Changed Password'); if(Auth::attempt(['username' => $admin[0]['username'], 'password' => $request->get('password')])) { $auth = Auth::user(); // $success['token'] = $auth->createToken('Admin')->accessToken; $data = [ 'grant_type' => 'password', 'client_id' => env("PASSPORT_ADMIN_CLIENT_ID", 2), 'client_secret' => env("PASSPORT_ADMIN_CLIENT_SECRET", "test"), 'username' => $admin[0]['email'], 'password' => $request->get('password'), 'scope' => '' ]; $auth_request = Request::create('/oauth/token', 'POST', $data); $result = app()->handle($auth_request)->getContent(); $result = json_decode($result); $success['token'] = $result->access_token; // $success['refresh_token'] = $result->refresh_token; $this->admin_logs->log($admin[0]['admin_id'],self::MODULE,'LOGIN'); return $this->format->success("SUCCESS",$success); } else { return $this->format->unauthorized(); } } } else { $data['password'] = 'Shall not be the same with the previous 2 passwords'; return $this->format->unprocessableEntity("Shall not be the same with the previous 2 passwords",$data); } } public function logout_cms() { if (Auth::check()) { // Auth::user()->AauthAcessToken()->delete(); Auth::user()->token()->revoke(); return $this->format->success("Logout Success"); } } /** * Mobile api * * @return \Illuminate\Http\Response */ public function mobile_loginCardNumber(LoginMobileNumberFormValidation $request) { $member_det = $this->loyalty_card->getByField([ 'mobile' => '63'.$request->get('mobile_number'), 'is_active' => 1 ]); $cardnumber = null; if($member_det != null && count($member_det) > 0 && $member_det[0]['card_number'] != null){ $cardnumber = $member_det[0]['card_number']; }else{ return $this->format->mobile_error("Mobile number is not yet registered",['code' => 2]); } $cyware = new CywareLibrary(); $cyware->setCardNumber($cardnumber); $cyware->state_validate(); if ($cyware->response['status_code'] == "200" && $cyware->response['data'] != null) { // check if locked $member_det = $this->loyalty_card->getByField([ 'card_number' => $cardnumber, 'is_active' => 1 ]); if(count($member_det)) { if($member_det[0]['is_locked'] == 1) { if(!StringHelper::check_time_exceeded($member_det[0]['lock_dt'],'+24 hours')) { $this->loyalty_card->activate_locked($member_det[0]['lcard_uuid']); $this->lcard_logs->log($member_det[0]['lcard_id'],'LOGIN','UPDATE','System automatically changes lock status to activated'); } else { $customer_service_email = $this->system_preferences->getByField('name','contact_email_address_mobile'); $customer_service_number = $this->system_preferences->getByField('name','contact_number_mobile'); return $this->format->mobile_error('The account you are trying to access is locked. Please contact Customer Service for assistance, call or email customer service.',[ 'code' => 1, 'email' => $customer_service_email[0]['value'], 'number' => $customer_service_number[0]['value'], ]); } } // todo remove this comment on live // if($member_det[0]['deviceUUID'] != "" && $member_det[0]['deviceUUID'] != $request->get('deviceUUID')) // { // return $this->format->mobile_error('Your account is already logged in a different device',['code' => 3]); // } } return $this->format->mobile_success('Success',[ 'is_valid' => 1, 'card_number' => $cardnumber ]); }else{ return $this->format->mobile_error($cyware->response['message'],['code' => 2]); } } public function mobile_loginMobileNumber(LoginMobileNumberFormValidation $request) { $cyware = new CywareLibrary(); $cyware->setMobile('63'.$request->get('mobile_number')); $cyware->state_mobilevalidate(); if ($cyware->response['status_code'] == "200" && $cyware->response['data'] != null) { //get card number details $dataResult = $cyware->response['data']; $cardnumber = null; if(is_array($dataResult)){ //get latest card foreach ($dataResult as $key => $part) { $sort[$key] = strtotime($part->app_date.$part->app_time); } array_multisort($sort, SORT_DESC, $dataResult); $cardnumber = $dataResult[0]->card_number; }else $cardnumber = $dataResult->card_number; // check if locked $member_det = $this->loyalty_card->getByField([ 'card_number' => $cardnumber, 'is_active' => 1 ]); if(count($member_det)) { if($member_det[0]['is_locked'] == 1) { if(!StringHelper::check_time_exceeded($member_det[0]['lock_dt'],'+24 hours')) { $this->loyalty_card->activate_locked($member_det[0]['lcard_uuid']); $this->lcard_logs->log($member_det[0]['lcard_id'],'LOGIN','UPDATE','System automatically changes lock status to activated'); } else { $customer_service_email = $this->system_preferences->getByField('name','contact_email_address_mobile'); $customer_service_number = $this->system_preferences->getByField('name','contact_number_mobile'); return $this->format->mobile_error('The account you are trying to access is locked. Please contact Customer Service for assistance, call or email customer service.',[ 'code' => 1, 'email' => $customer_service_email[0]['value'], 'number' => $customer_service_number[0]['value'], ]); } } // todo remove this comment on live // if($member_det[0]['deviceUUID'] != "" && $member_det[0]['deviceUUID'] != $request->get('deviceUUID')) // { // return $this->format->mobile_error('Your account is already logged in a different device',['code' => 3]); // } } $lcard_uuid = $member_det[0]['lcard_uuid']; return $this->format->mobile_success('Success',[ 'is_valid' => 1, 'card_number' => $cardnumber, 'user_id' => $lcard_uuid ]); }else{ return $this->format->mobile_error($cyware->response['message'],['code' => 2]); } } public function mobile_loginCardNumber_enroll(LoginCardNumberFormValidation $request) { // // Number Verification Code // $loyalty_card = $this->loyalty_card->getByField([ // 'mobile' => $request->get('mobile'), // 'is_active' => 1, // ]); $cyware = new CywareLibrary(); $cyware->setCardNumber($request->get('card_number')); $cyware->state_entry(); if ($cyware->response['status_code'] == "200" && $cyware->response['message'] == 'Pin is required') { $cyware->setCardNumber($request->get('card_number')); $cyware->state_validate(); if ($cyware->response['status_code'] == "200" && $cyware->response['message'] == 'No Records Found') { return $this->format->mobile_success('Success',[ 'is_valid' => 1 ]); } else { $message = $cyware->response['message']; $code = 2; if(isset($cyware->response['message']) && $cyware->response['message'] == "Success") { // check if locked $member_det = $this->loyalty_card->getByField([ 'card_number' => $request->get('card_number'), 'is_active' => 1 ]); if(count($member_det)) { if($member_det[0]['is_locked'] == 1) { if(!StringHelper::check_time_exceeded($member_det[0]['lock_dt'],'+24 hours')) { $this->loyalty_card->activate_locked($member_det[0]['lcard_uuid']); $this->lcard_logs->log($member_det[0]['lcard_id'],'LOGIN','UPDATE','System automatically changes lock status to activated'); } else { $customer_service_email = $this->system_preferences->getByField('name','contact_email_address_mobile'); $customer_service_number = $this->system_preferences->getByField('name','contact_number_mobile'); return $this->format->mobile_error('The account you are trying to access is locked. Please contact Customer Service for assistance, call or email customer service.',[ 'code' => 1, 'email' => $customer_service_email[0]['value'], 'number' => $customer_service_number[0]['value'], ]); } } // todo remove this comment on live // if($member_det[0]['deviceUUID'] != "" && $member_det[0]['deviceUUID'] != $request->get('deviceUUID')) // { // return $this->format->mobile_error('Your account is already logged in a different device',['code' => 3]); // } } $message = 'Card Number is already registered. Do you want to proceed to login?'; $code = 4; return $this->format->mobile_error($message,['code' => $code,'number' => $cyware->response['data']->mobile]); } return $this->format->mobile_error($message,['code' => $code,'number' => $cyware->response['data']->mobile]); } } else { return $this->format->mobile_error($cyware->response['message'],['code' => 2]); } } public function mobile_loginBirthdate(LoginBirthdateFormValidation $request) { $cyware = new CywareLibrary(); $cyware->setCardNumber($request->get('card_number')); $cyware->state_validate(); if ($cyware->response['status_code'] == "200" && $cyware->response['data'] != null) { if(Carbon::parse($request->get('birthdate'))->age < 18) { return $this->format->mobile_error('You must be at least 18 years old to join the Loyalty Program'); } elseif($cyware->response['data']->birthdate != $request->get('birthdate')) { return $this->format->mobile_error( 'Incorrect Birthdate'); } else { $loyalty_card = $this->loyalty_card->getByField([ 'card_number' => $request->get('card_number'), 'is_active' => 1 ],'codeCardType'); if(count($loyalty_card)) { $cyware->state_retrieve(); // update device uuid $this->loyalty_card->update_deviceuuid($loyalty_card[0]['lcard_id'],$request->get('deviceUUID')); $success = [ 'mobile_number' => $loyalty_card[0]['mobile'], // 'card_type' => $loyalty_card[0]['card_type']['code'], // 'card_number' => $loyalty_card[0]['card_number'], 'lcard_uuid' => $loyalty_card[0]['lcard_uuid'], 'state_retrieve' => $cyware->response["data"] ]; $this->lcard_logs->log($loyalty_card[0]['lcard_id'],'LOGIN','LOGIN','Member logs in a verified account'); } else { // add details to database $pd_id = $this->personal_details->store($cyware->response['data']); $lcard_store = $this->loyalty_card->store($pd_id, $cyware->response['data'], $request->get('deviceUUID'),1); $this->user->store_member($cyware->response['data']); $this->mobile_usage->add_inactive(); $success = [ 'mobile_number' => $cyware->response['data']->mobile, // 'card_type' => $cyware->response['data']->card_type_code, // 'card_number' => $cyware->response['data']->card_number, 'lcard_uuid' => $lcard_store['lcard_uuid'], ]; $this->lcard_logs->log($lcard_store['lcard_id'],'LOGIN','STORE','Member added a verified account to database'); } return $this->format->mobile_success('Success',$success); } }else{ return $this->format->mobile_error('Error',['card_number' => $cyware->response['message']]); } } public function create_otp(Request $request) { $loyalty_card = $this->loyalty_card->getByField([ 'lcard_uuid' => $request->get('lcard_uuid'), 'is_active' => 1 ]); if(count($loyalty_card)) { // get if loyalty card is less than 30 seconds // this is due to iOS' double request for OTP $last_log = $this->otp_logs->getLastLog($loyalty_card[0]['lcard_id']); if((isset($last_log->created_at) && strtotime($last_log->created_at.' +30 seconds') > strtotime(date('Y-m-d H:i:s'))) && $request->is_resend == 'true') return $this->format->mobile_success('Success'); if($request->has('is_resend') && $request->is_resend != 'true') { // reset otp_attempts $this->otp_attempts->delete($loyalty_card[0]['lcard_id']); } if(env("M360_ENV", 'TEST') == 'LOCAL') $otp = 1234; else $otp = StringHelper::random_num(4); $content = 'Your Unioil Mobile Application OTP Code is '.$otp; $transid = date('YmdHis').$loyalty_card[0]['lcard_id']; $mobile = $request->has('mobile') ? '63'.$request->mobile : $loyalty_card[0]['mobile']; $m360 = new M360(); $m360->set_msisdn($mobile); $m360->set_content($content); $m360->set_rcvd_transid($transid); $m360->send(); if($m360->success()) { // error_log( "SMS Sent!" ); $data = [ 'otp' => $otp, 'msisdn' => $mobile, 'content' => $content, 'rcvd_transid' => $transid, 'transid' => $m360->get_transid() ]; if($this->otp_logs->store($loyalty_card[0]['lcard_id'],$data)) { $this->lcard_logs->log($loyalty_card[0]['lcard_id'],'OTP','GENERATE','Member requested to generate an OTP'); return $this->format->mobile_success('Success'); } else { return $this->format->mobile_error('Something went wrong'); } } else { return $this->format->mobile_error($m360->get_response_name(),$m360->get_response_message()); } } else { return $this->format->mobile_error('User doesn\'t exist'); } } public function mobile_otp(Request $request){ if($request->has('mobile')){ $mobile = '63'.$request->mobile; $loyalty_card = $this->loyalty_card->getByField([ 'mobile' => $mobile, 'is_active' => 1, ]); if(count($loyalty_card)>0){ return $this->format->mobile_error('Mobile number already used.'); }else{ $lastlog = $this->otp_logs->getLastLogByNumber($mobile); if($lastlog != null){ $timeB = time(); $lastlog = strtotime($lastlog->created_at); if($lastlog+30 > $timeB){ return $this->format->mobile_error("OTP too fast to request."); } } $otp = StringHelper::random_num(4); $content = 'Your Unioil Mobile Application OTP Code is '.$otp; $transid = date('YmdHis')."validate"; $m360 = new M360(); $m360->set_msisdn($mobile); $m360->set_content($content); $m360->set_rcvd_transid($transid); $m360->send(); if($m360->success()){ $data = [ 'otp' => $otp, 'msisdn' => $mobile, 'content' => $content, 'rcvd_transid' => $transid, 'transid' => $m360->get_transid() ]; // return $this->format->mobile_success('Success'); if($this->otp_logs->store("validation",$data)){ $this->lcard_logs->log("validation",'OTP','GENERATE','Member requested to generate an OTP'); return $this->format->mobile_success('Success', [ 'trans_id' => $transid ]); }else{ return $this->format->mobile_error('Something went wrong'); } }else{ return $this->format->mobile_error($m360->get_response_name(),$m360->get_response_message()); } // return $this->format->mobile_success("Mobile number is valid."); } }else{ return $this->format->mobile_error("Mobile number is required"); } } public function mobile_updateMpin(MpinFormValidation $request){ //check if code exist $loyalty_card = $this->loyalty_card->getByField([ 'lcard_uuid' => $request->get('lcard_uuid'), 'is_active' => 1 ]); if(count($loyalty_card)) { $cardNumber = $loyalty_card[0]['card_number']; //check if mpin exist $mpin = $this->mpin_codes->getMpin($cardNumber); if($mpin){ //update $data = []; $data['mpin_code'] = $request->get('mpin'); $res = $this->mpin_codes->updateMpin($cardNumber,$data); if($res){ return $this->format->mobile_success('Success', [ 'mpin' => $request->get('mpin') ]); }else{ return $this->format->mobile_error('Something went wrong.'); } }else{ //store $data = []; $data['lcard_id'] = $cardNumber; $data['mpin_code'] = $request->get('mpin'); $res = $this->mpin_codes->store($data); if($res){ return $this->format->mobile_success('Success', [ 'mpin' => $request->get('mpin') ]); }else{ return $this->format->mobile_error('Something went wrong.'); } } }else{ return $this->format->mobile_error('User doesn\'t exist'); } } public function mobile_getPin(Request $request){ $loyalty_card = $this->loyalty_card->getByField([ 'lcard_uuid' => $request->get('lcard_uuid'), 'is_active' => 1 ]); if(count($loyalty_card)) { $cardNumber = $loyalty_card[0]['card_number']; $mpin = $this->mpin_codes->getMpin($cardNumber); if($mpin){ return $this->format->mobile_success('Success', [ 'mpin' => $mpin->mpin_code ]); }else{ return $this->format->mobile_error('MPIN is not yet set by the user.'); } }else{ return $this->format->mobile_error('User doesn\'t exist'); } } public function mobile_validate_otp(Request $request){ $otp_log = $this->otp_logs->getByField([ 'rcvd_transid' => $request->trans_id ]); if(count($otp_log)>0){ $_otp = $otp_log[0]->otp; $_otp_id = $otp_log[0]->otplog_id; $_otp_used = $otp_log[0]->used; // return $this->format->mobile_success("test", $otp_log[0]->otp); if($_otp_used == 0){ if($_otp == $request->otp){ if($this->otp_logs->setUsed($_otp_id)){ return $this->format->mobile_success('Success'); }else{ return $this->format->mobile_error("Something went wrong."); } }else{ return $this->format->mobile_error('Incorrect OTP. The OTP you have entered does not exist.',['code' => 2]); } }else{ return $this->format->mobile_error('The OTP you have entered has already used.'); } }else{ return $this->format->mobile_error('Incorrect OTP. The OTP you have entered does not exist.',['code' => 2]); } } public function validate_otp(Request $request) { // lock after 3 attempts $numberOfAttempts = 0; $attempts = $this->loyalty_card->numberOfOTPAttempts($request->get('lcard_uuid')); if(!is_null($attempts)) { $numberOfAttempts = $attempts->otpAttempts->count(); } if($numberOfAttempts >= 3) { $customer_service_email = $this->system_preferences->getByField('name','contact_email_address_mobile'); $customer_service_number = $this->system_preferences->getByField('name','contact_number_mobile'); return $this->format->mobile_error('You already entered the wrong OTP 3 times. Your account is locked for 24 hours. Please contact Customer Service for assistance, call or email customer service.',[ 'code' => 1, 'email' => $customer_service_email[0]['value'], 'number' => $customer_service_number[0]['value'], ]); } else { $loyalty_card = $this->loyalty_card->getByField([ 'lcard_uuid' => $request->get('lcard_uuid'), 'is_active' => 1 ],'personalDetails'); $getuserDetails = $this->loyalty_card->show($request->get('lcard_uuid'),['personalDetails','codeVehicleOwn','codeCivilStatus','codeGender','codeCardType','codeCity','codeFuelType']); $data = new MobileUserProfileResource($getuserDetails); $userDetails = null; if($data != null){ $userDetails = $data->toArray($getuserDetails); } $numberOfAttempts++; $this->otp_attempts->store($loyalty_card[0]['lcard_id'],$request->get('otp')); $this->lcard_logs->log($loyalty_card[0]['lcard_id'],'OTP','ATTEMPT','Member entered otp '.$request->get('otp')); // check if correct $otpLog = $this->otp_logs->getByField(['lcard_id' => $loyalty_card[0]['lcard_id'], 'otp' => $request->get('otp')]); //var_dump($otpLog); if(count($otpLog)) { $latestOtp = $this->otp_logs->getLastLog($loyalty_card[0]['lcard_id']); // checks if otp entered is expired and it's the latest otp created if(!StringHelper::check_time_exceeded($otpLog[0]['created_at'],'+5 minutes') || $latestOtp->otp != $request->get('otp')) { if($numberOfAttempts >= 3) { return $this->format->mobile_error('You have entered the wrong OTP for 3 times. Your account is now locked for 24 hours, call or email customer service.',$this->lock_member($loyalty_card)); } return $this->format->mobile_error('The OTP you have entered has already expired. Please select the Resend OTP option',['code' => 3]); } else { if($loyalty_card[0]['cyware_synced'] == 0) { $cyware_response = $this->cyware_activate($loyalty_card[0]); if($cyware_response['success'] == true && isset($cyware_response['data'])) { $this->loyalty_card->cyware_activate($loyalty_card[0]['lcard_id'],$cyware_response['data']); $this->user->store_member($cyware_response['data']); $this->lcard_logs->log($loyalty_card[0]['lcard_id'],'LOGIN','ACTIVATE','Member activated a card'); } else { return $this->format->mobile_error($cyware_response['message']); } } if(Auth::attempt([ 'username' => $loyalty_card[0]['card_number'], 'password' => $loyalty_card[0]['birthdate']->toDateString() ])) { if($loyalty_card[0]['is_validated'] == 0) { $this->loyalty_card->validateMember($loyalty_card[0]['lcard_id']); $this->mobile_usage->add_active(); } $mpin = $this->mpin_codes->getMpin($loyalty_card[0]['card_number']); $this->otp_logs->setUsed($latestOtp->otplog_id); $user = Auth::user(); $success['is_valid'] = 1; // $success['token'] = $user->createToken('Mobile')->accessToken; // for multiple login // ---------------------------------------------------------------- new login start $data = [ 'grant_type' => 'password', 'client_id' => env("PASSPORT_ADMIN_CLIENT_ID", 2), 'client_secret' => env("PASSPORT_ADMIN_CLIENT_SECRET", "test"), 'username' => $loyalty_card[0]['card_number'], 'password' => $loyalty_card[0]['birthdate']->toDateString(), 'scope' => '' ]; // dd($data); $request = Request::create('/oauth/token', 'POST', $data); $result = app()->handle($request)->getContent(); $result = json_decode($result); $success['token'] = $result->access_token; $success['userDetails'] = $userDetails; if($mpin){ $success['userDetails']['mpin'] = $mpin->mpin_code; } // ---------------------------------------------------------------- new login end $this->lcard_logs->log($loyalty_card[0]['lcard_id'],'LOGIN','LOGIN','Member successfully logs in'); return $this->format->mobile_success('Sucess',$success,$data); } } } else { if($numberOfAttempts >= 3) { return $this->format->mobile_error('You have entered the wrong OTP for 3 times. Your account is now locked for 24 hours, call or email customer service.',$this->lock_member($loyalty_card)); } return $this->format->mobile_error('Incorrect OTP. The OTP you have entered does not exist.',['code' => 2]); } } } private function cyware_activate($loyalty_card) { $err = ''; $cyware = new CywareLibrary(); $cyware->setCardNumber($loyalty_card['card_number']); $cyware->setPin($loyalty_card['pin']); $cyware->setFirstName($loyalty_card['personalDetails']['firstname']); $cyware->setLastName($loyalty_card['personalDetails']['lastname']); $cyware->setBirthday(date('Ymd',strtotime($loyalty_card['birthdate']))); $cyware->setMobile($loyalty_card['mobile']); $cyware->setEmail($loyalty_card['email']); $cyware->state_entry(); if ($cyware->response['status_code'] == 200 && $cyware->response['message'] == 'success') { $cyware->state_validate(); if ($cyware->response['status_code'] == 200 && $cyware->response['data'] != null) { return ['success' => true , 'data' => $cyware->response['data']]; } else $err = $cyware->response['message']; } else $err = $cyware->response['message']; return ['success' => false , 'message' => $err]; } private function lock_member($loyalty_card) { $this->loyalty_card->lockMember($loyalty_card[0]['lcard_id'],'01'); $this->lcard_logs->log($loyalty_card[0]['lcard_id'],'OTP','LOCKED','Account is locked due to wrong OTP entered for 3 times during login'); $this->mobile_usage->add_locked(); $customer_service_email = $this->system_preferences->getByField('name','contact_email_address_mobile'); $customer_service_number = $this->system_preferences->getByField('name','contact_number_mobile'); return [ 'code' => 1, 'email' => $customer_service_email[0]['value'], 'number' => $customer_service_number[0]['value'], ]; } public function mobile_validatePin(Request $request) { $cyware = new CywareLibrary(); $cyware->setCardNumber($request->get('card_number')); $cyware->setPin($request->get('pin')); $cyware->state_entry(); if ($cyware->response['status_code'] == "200" && $cyware->response['message'] == 'First name is required') { return $this->format->mobile_success('Success'); } else { return $this->format->mobile_error($cyware->response['message']); } } public function mobile_activateCard(LoginActivateCardFormValidation $request) { // check if exists $loyalty_card = $this->loyalty_card->getByField([ 'card_number' => $request->card_number, 'cyware_synced' => 0, 'is_active' => 1 ],'personalDetails'); if(count($loyalty_card) > 0) { $pd_id = $this->personal_details->update_non_cyware_synced($loyalty_card[0]['pd_id'],$request); $lcard_store = $this->loyalty_card->update_non_cyware_synced($loyalty_card[0]['lcard_id'], $request); $this->lcard_logs->log($loyalty_card[0]['lcard_id'],'LOGIN','UPDATE','Member updated form for card activation'); } else { $pd_id = $this->personal_details->store($request); $lcard_store = $this->loyalty_card->store($pd_id, $request); $this->lcard_logs->log($lcard_store['lcard_id'],'LOGIN','STORE','Member filed for card activation'); // ------ send OTP start $loyalty_card = $this->loyalty_card->getByField([ 'lcard_uuid' => $lcard_store['lcard_uuid'], 'is_active' => 1 ]); } if(count($loyalty_card)) { // reset otp_attempts $this->otp_attempts->delete($loyalty_card[0]['lcard_id']); if(env("M360_ENV", 'TEST') == 'LOCAL') $otp = 1234; else $otp = StringHelper::random_num(4); $content = 'Your Unioil Mobile Application OTP Code is '.$otp; $transid = date('YmdHis').$loyalty_card[0]['lcard_id']; $m360 = new M360(); $m360->set_msisdn($loyalty_card[0]['mobile']); $m360->set_content($content); $m360->set_rcvd_transid($transid); $m360->send(); if($m360->success()) { // error_log('SMS Sent Activation!'); $data = [ 'otp' => $otp, 'msisdn' => $loyalty_card[0]['mobile'], 'content' => $content, 'rcvd_transid' => $transid, 'transid' => $m360->get_transid() ]; if($this->otp_logs->store($loyalty_card[0]['lcard_id'],$data)) { $this->lcard_logs->log($loyalty_card[0]['lcard_id'],'OTP','GENERATE','Member requested to generate an OTP'); return $this->format->mobile_success('Success',[ 'mobile_number' => $loyalty_card[0]['mobile'], 'lcard_uuid' => $loyalty_card[0]['lcard_uuid'], ]); } else { return $this->format->mobile_error('Something went wrong'); } } else { // return $this->format->mobile_error($m360->get_response_name(),$m360->get_response_message()); return $this->format->mobile_error('There was a problem sending your OTP. Please try again.',$m360->get_response_message()); } } else { return $this->format->mobile_error('User doesn\'t exist'); } // ------ send OTP end } public function logout_mobile() { if (Auth::check()) { $this->lcard_logs->log(0,'LOGIN','LOGOUT','Member logged out'); $this->loyalty_card->remove_deviceuuid(Auth::user()->username); // Auth::user()->AauthAcessToken()->delete(); Auth::user()->token()->revoke(); return $this->format->mobile_success("Logout Success"); } } public function checkTime() { echo date('Y-m-d H:i:s').'
'; echo config('app.timezone'); } public function convertmd5() { echo md5(request('value')); } public function checkOTP($card_number) { $loyalty_card = $this->loyalty_card->getByField([ 'card_number' => $card_number, 'is_active' => 1, ]); if(count($loyalty_card)>0) { $logs = $this->otp_logs->getLastLog_limit(1, $loyalty_card[0]->lcard_id); if(count($logs) > 0) { foreach ($logs as $k => $v) { echo '

'.$v->otp.'

'.($v->used == 1 ? 'used' : 'not used').' '.date('F d, Y h:i A',strtotime($v->created_at)).'
'; } } } else { echo 'Card Number doesn\'t exists'; } } //check mobile number already exist public function checkMobile($mobile) { $loyalty_card = $this->loyalty_card->getByField([ 'mobile' => $mobile, 'is_active' => 1, ]); if(count($loyalty_card)>0) { return $this->format->mobile_error('Mobile number already used.'); } else { return $this->format->mobile_success("Mobile number is valid."); } } //todo delete for testing only public function state_validate() { $cyware = new CywareLibrary(); $cyware->setCardNumber($_GET['as']); $cyware->setBirthday('19800222'); $cyware->state_validate(); if ($cyware->response['data'] == "200"){ return $this->format->success("curl success",$cyware->response['data']); }else{ return $this->format->success($cyware->response['message'],$cyware->response['data']); } } public function state_entry() { $cyware = new CywareLibrary(); $cyware->setCardNumber('1100000000000001'); $cyware->setFirstName('vic'); $cyware->setLastName('vic'); $cyware->setBirthday('19991010'); $cyware->setMobile('639178032215'); // must have 63 $cyware->setEmail('gasdga@fasd.com'); $cyware->setPin('99798722'); $cyware->state_entry(); $cyware->state_entry(); if ($cyware->response['data'] == "200"){ return $this->format->success("curl success",$cyware->response['data']); }else{ return $this->format->success($cyware->response['message'],$cyware->response['data']); } } public function state_trans() { $cyware = new CywareLibrary(); $cyware->setCardNumber('1100000000000001'); $cyware->setStartDate('20180101'); $cyware->setEndDate('20181231'); $cyware->state_trans(); if ($cyware->response['data'] == "200"){ return $this->format->success("curl success",$cyware->response['data']); }else{ return $this->format->success($cyware->response['message'],$cyware->response['data']); } } //this func is not yet available in phase 1 / but just in case public function state_promo() { $cyware = new CywareLibrary(); $cyware->setCardNumber('1100000000000001'); $cyware->state_promo(); if ($cyware->response['data'] == "200"){ return $this->format->success("curl success",$cyware->response['data']); }else{ return $this->format->success($cyware->response['message'],$cyware->response['data']); } } public function state_retrieve() { $cyware = new CywareLibrary(); $cyware->setCardNumber('1100000000000001'); $cyware->state_retrieve(); if ($cyware->response['data'] == "200"){ return $this->format->success("curl success",$cyware->response['data']); }else{ return $this->format->success($cyware->response['message'],$cyware->response['data']); } } public function StateRetrieve($data){ $newData = $data->getData(); $mainData = []; $mainData["lcard_uuid"] = $newData->data->lcard_uuid; $mainData["card_number"] = $newData->data->card_number; $mainData["pin"] = $newData->data->pin; $mainData["birthdate"] = $newData->data->birthdate; $mainData["mobile"] = $newData->data->mobile; $mainData["email"] = $newData->data->email; $mainData["firstname"] = $newData->data->firstname; $mainData["lastname"] = $newData->data->lastname; $mainData["photo"] = $newData->data->photo; $mainData["card_type"] = $newData->data->card_type; $mainData["card_code"] = $newData->data->card_code; $mainData["card_image"] = $newData->data->card_image; $mainData["card_bg_image"] = $newData->data->card_bg_image; $mainData["card_black_label"] = $newData->data->card_black_label; $mainData["expiry_date"] = $newData->data->expiry_date; $mainData["points"] = $newData->data->points; //DATA THAT MUST GET FROM STATE RETRIEVE $mainData["middlename"] = $newData->retrieved->middle_initial; $mainData["city_name"] = $newData->retrieved->address; $mainData["address"] = $newData->retrieved->address; $mainData["civilstatus_code"] = $newData->retrieved->civil_status_code; $mainData["gender_code"] = $newData->retrieved->gender_code; $mainData["vo_code"] = $newData->retrieved->vehicle_own_code; $mainData["fueltype_code"] = $newData->retrieved->fuel_type_code; //$mainData['log'] = "start:".$datestart." ---- end:".$dateend; $newData->data = $mainData; return response()->json($newData); } public function state_update() { $cyware = new CywareLibrary(); $cyware->setCardNumber('1100000000000001'); $cyware->setFirstName('vic'); $cyware->setLastName('abalos'); $cyware->setAddress('dun'); $cyware->setMobile('639178032215'); $cyware->setEmail('email@gmaill.com'); $cyware->setCivilStatusCode('S'); $cyware->setGenderCode('0'); $cyware->setCivilStatusCode('S'); $cyware->setFuelType('1'); $cyware->state_update(); if ($cyware->response['data'] == "200"){ return $this->format->success("curl success",$cyware->response['data']); }else{ return $this->format->success($cyware->response['message'],$cyware->response['data']); } } public function state_points() { $cyware = new CywareLibrary(); $cyware->setCardNumber('1100000000000001'); $cyware->setSiNum(rand(1000,3000)); $cyware->setTotalAmount('100'); $cyware->state_points(); if ($cyware->response['data'] == "200"){ return $this->format->success("curl success",$cyware->response['data']); }else{ return $this->format->success($cyware->response['message'],$cyware->response['data']); } } public function state_redeemed() { $cyware = new CywareLibrary(); $cyware->setCardNumber('1100000000000001'); $cyware->setStartDate('20180101'); $cyware->setEndDate('20181231'); $cyware->state_redeemed(); if ($cyware->response['data'] == "200"){ return $this->format->success("curl success",$cyware->response['data']); }else{ return $this->format->success($cyware->response['message'],$cyware->response['data']); } } public function stations_fuel_prices() { $cyware = new StratuscastLibrary(); $cyware->getAllFuelPrice(); if ($cyware->response['status_code'] == "200"){ return $this->format->success("curl success",$cyware->response['data']); } } public function station_fuel_price_station() { $cyware = new StratuscastLibrary(); $cyware->getFuelPriceBystation($_GET['station']); if ($cyware->response['status_code'] == "200"){ return $this->format->success("curl success",$cyware->response['data']); } } public function city_provinces() { $cyware = new StratuscastLibrary(); $cyware->getCityAndProvince(); if ($cyware->response['status_code'] == "200"){ return $this->format->success("curl success",$cyware->response['data']); } } public function city() { $cyware = new StratuscastLibrary(); $cyware->getCity(); if ($cyware->response['status_code'] == "200"){ return $this->format->success("curl success",$cyware->response['data']); } } public function province() { $cyware = new StratuscastLibrary(); $cyware->getProvince(); if ($cyware->response['status_code'] == "200"){ return $this->format->success("curl success",$cyware->response['data']); } } public function aboutus() { $cyware = new StratuscastLibrary(); $cyware->getAboutUs(); if ($cyware->response['status_code'] == "200"){ return $this->format->success("curl success",$cyware->response['data']); } } public function product() { $cyware = new StratuscastLibrary(); $cyware->getProduct($_GET['id']); if ($cyware->response['status_code'] == "200"){ return $this->format->success("curl success",$cyware->response['data']); } } public function checkmobileotp($mobile){ $mobile = $mobile != null ? $mobile: ""; $lastlog = $this->otp_logs->getLastLogByNumber($mobile); if($lastlog){ return $lastlog->content; } return "Sorry, this request is not available or no data found"; } }