Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
WIKIPEDIA
/
imaliapi
/
app
/
Http
/
Controllers
:
UserController.php.save
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace App\Http\Controllers; use App\AmountGenerate; use App\Bank\MasterAccount; use App\Bank\Payment; use App\Classes\GenerateToken; use App\Classes\CurrentPassword; use App\Classes\Kyc; use App\Classes\AuthPIN; use App\Classes\Record; use App\Classes\SendSMS; use App\Classes\SmsManager; use App\Classes\TransactionGeneration; use App\Credelec; use App\Imali\BankConection; use App\Imali\ImaliAccount; use App\Imali\RechargeImaliAccount; use App\PhoneValidation; use App\PurchaseVoucher; use App\ReverteImaliAccount; use App\SendMoneyB2B; use App\SendMoneyImaliMpesa; use App\TransferHistory; use App\User; use App\Wallet; use App\WalletFee; use App\Water; use App\WithDrawall; use App\WithdrawalsRequest; use Illuminate\Http\Request; use Illuminate\Http\UploadedFile; use Illuminate\Support\Facades\Hash; use Webpatser\Uuid\Uuid; use Paymentsds\MPesa\Client; use Illuminate\Support\Facades\Storage; use URL; use File; use App\AccountDeletionReason; use App\AccountDeletionRequest; class UserController extends Controller { protected SmsManager $smsManager; public function __construct() { $this->smsManager = new SmsManager(); $this->baseUrl = URL::to("/").'/images/avatar/'; $this->storagePath=public_path().'/images/avatar'; } public function getAccountDeletionRequests(){ $deletionRequests=AccountDeletionRequest::query()->select('')->limit(10); return response()->json(['data'=>$deletionRequests]); } public function getAccountDeletionReasons(){ $reasons=AccountDeletionReason::get(); return response()->json(['data'=>$reasons]); } public function makeAccountDeletionRequest(Request $request){ $this->validate($request,[ 'account_number'=>'required', 'account_deletion_reason_id'=>'required', 'pin'=>'required', ],[ 'account_number.required'=>'Campo account_number obrigatório', 'pin.required'=>'Campo pin obrigatório', 'account_deletion_reason_id'=>'Campo account_deletion_reason_id obrigatório!', ]); $imaliAccount=ImaliAccount::query()->where('account_number',$request->account_number)->first(); $user=User::query()->where('id',2)->first(); if(!$imaliAccount) return response()->json(['message'=>'Conta imali inválida!'],400); //Verificando se a conta que esta fazendo o pedido é a mesma que esta loggada if($request->account_number != $request->user()->imaliAccount->account_number) return response()->json(['message'=>'Conta imali inválida!'],400); //Validar PIN if(!AuthPIN::validatePIN($request->user()->id,$request->pin,$request->user()->pin)) return response()->json(['message'=>'PIN incorrecto!'],400); // a conta não pode ser cancelada com saldo if($imaliAccount->balance > 0) return response()->json(['message'=>'Não é possível cancelar a tua conta imali, pois ainda tem saldo disponível.'],400); if($imaliAccount->captive_balance > 0) return response()->json(['message'=>'Não é possível cancelar a tua conta imali, pois tens transaçõs por serem concluídas.'],400); $imaliaccount_has_adr=AccountDeletionRequest::query()->where('account_number',$request->account_number)->first(); if($imaliaccount_has_adr) return response()->json(['message'=>'Esta conta '.$request->account_number.', já efectuou um pedido de cancelamento de conta.'],409); if($request->account_deletion_reason_id == 8){ $this->validate($request,[ 'commentary_reason'=>'required|min:15', ],[ 'commentary_reason.required'=>'Campo commentary_reason obrigatório', 'commentary_reason.required'=>'Campo commentary_reason tem que ter no mínimo 15 caracteres', ]); } AccountDeletionRequest::create([ 'account_number'=>$request->account_number, 'account_deletion_reason_id'=>$request->account_deletion_reason_id, 'commentary_reason'=>$request->commentary_reason, ]); $user->status=0; $user->is_online=0; $user->update(); return response()->json(['message'=>'Pedido de encerramento de conta foi enviado com sucesso!'],200); } public function hideAndShowBalance(Request $request) { $user = User::find($request->user()->id); if ($user) { if ($user->balance_visibility == false) { $user->update(['balance_visibility' => true]); return response()->json(['message' => 'Actualizado com Sucesso para Verdadeiro'], 200); } else { $user->update(['balance_visibility' => false]); return response()->json(['message' => 'Actualizado com Sucesso para Falso'], 200); } } else { return response()->json(['message' => 'Utilizador não encontrado'], 400); } } public function validatePin(Request $request) { $this->validate($request, [ 'pin' => 'required|min:4' ]); if (Hash::check($request->pin, $request->user()->pin)) { return response()->json(['message' => 'ok'], 200); } else { return response()->json(['message' => 'Pin Incorrecto'], 405); } } public function getMyMonthConsuming(Request $request) { $currentMonth = date('m'); // $data = DB::table("items") // ->whereRaw('MONTH(created_at) = ?',[$currentMonth]) // ->get(); // $data = Item::select('*') // ->whereMonth('created_at', Carbon::now()->month) // ->get(); $voucher = PurchaseVoucher::query() ->whereRaw('MONTH(created_at) = ?', [$currentMonth]) ->where('user_id', $request->user()->id) ->sum('price'); $transfer = TransferHistory::query() ->whereRaw('MONTH(created_at) = ?', [$currentMonth]) ->where('user_id', $request->user()->id) ->where('user_status', 'payer') ->sum('amount'); $payments = Payment::query() ->whereRaw('MONTH(created_at) = ?', [$currentMonth]) ->where('sender_id', $request->user()->id) ->sum('amount'); $credelec = Credelec::query() ->whereRaw('MONTH(created_at) = ?', [$currentMonth]) ->where('user_id', $request->user()->id) ->sum('amount'); $water = Water::query() ->whereRaw('MONTH(created_at) = ?', [$currentMonth]) ->where('user_id', $request->user()->id) ->sum('purchaseValue'); return response()->json(['water' => $water, 'voucher' => $voucher, 'transfer' => $transfer, 'payments' => $payments, 'credelec' => $credelec]); } public function getUser() { // $user = User::query() // ->join('imali_accounts', 'imali_accounts.user_id', '=', 'users.id') // ->where('users.id', auth()->user()->id) // ->select('users.*', 'imali_accounts.account_number', 'imali_accounts.balance', 'imali_accounts.points', 'imali_accounts.account_number', 'imali_accounts.reference') // ->first(); $user = ImaliAccount::query() ->join('users', 'imali_accounts.user_id', '=', 'users.id') ->join('imali_account_configs', 'imali_accounts.imali_account_config', '=', 'imali_account_configs.id') ->where('users.id', auth()->user()->id) ->select('users.*', 'imali_accounts.account_number', 'imali_accounts.balance', 'imali_accounts.points', 'imali_accounts.account_number', 'imali_accounts.reference', 'imali_account_configs.nr_transaction', 'imali_account_configs.max_value_operation', 'imali_account_configs.level') ->first(); $user->makeHidden(['id', 'profile', 'password', 'pin', 'firebase_token', 'created_at', 'updated_at' , 'phone_reference', 'user_id', 'bi', 'document_id', 'remember_token', 'email_verified_at']); return response()->json($user); } public function getMyImaliAccount($id) { $imali = ImaliAccount::query()->where('user_id', $id)->first(); return response()->json($imali); } public function rechargeByReference(Request $request) { $imaliAccount = ImaliAccount::query()->where('reference', $request->reference)->first(); $transactionString = new TransactionGeneration(); $user = ImaliAccount::query()->join('users', 'users.id', '=', 'imali_accounts.user_id') ->where('users.id', $imaliAccount->user_id) ->select('users.*', 'imali_accounts.account_number') ->first(); $kyc = new Kyc(); $kyckCheck = $kyc->checkRecharge($request); if ($kyckCheck) { return $kyckCheck; } else { if ($imaliAccount) { $balanceActual = $imaliAccount->balance + $request->amount; $masterAccount = MasterAccount::find(2); $recharge = RechargeImaliAccount::create([ 'imali_account_id' => $imaliAccount->id, 'transaction_id' => $transactionString->generateTransaction(), 'description' => $request->description, 'amount' => $request->amount, 'last_balance' => $imaliAccount->balance, 'balance' => $balanceActual, 'recharge_way' => 'Agente i.Mali 0001', 'estado' => 'sucesso', 'estado_color' => '#388E3C', 'master_account_id' => $masterAccount->id ]); $masterBalance = $masterAccount->balance + $request->amount; $masterAccount->update(['balance' => $masterBalance]); if ($recharge) { $imaliAccount->update(['balance' => $balanceActual]); $notification = array( // 'icon' => 'ic_imali_logo_verde_01', 'icon' => 'ic_i_mali_cover', 'title' => 'Carregamento ' . $recharge->amount . ' MT', 'body' => 'Parabéns, ' . ' carregaste com ' . $recharge->amount . ' MT ' . ' na sua conta ' . $imaliAccount->account_number, 'click_action' => 'com.imali.payapp.payment_RECHARGE_DETAILS', // 'color' => '#008577' 'color' => '#ffffff' ); $data = array( 'transaction' => $recharge->transaction_id, 'name' => $user->name, 'description' => $request->description, 'amount' => (double)$recharge->amount, 'phone' => $user->phone, 'reference' => $imaliAccount->reference, 'data' => $recharge->created_at, 'estado' => $recharge->estado, 'route' => 'RECHARGE_DETAILS', 'recharge_way' => $recharge->recharge_way, 'account_number' => $user->account_number, 'terminal' => 'firebase' ); $this->pushNotifification($user->firebase_token, $notification, $data); $this->smsManager->sendSMSForUserRecharge($recharge); } if ($recharge) { // Mail::to($user->email)->send(new Carregamento($recharge)); } $log = new Record(); $log->createLog([ 'description' => $imaliAccount->account_number, 'details' => $user->name . ' ' . $user->last_name, 'operation' => 'Recharge by Reference', 'status' => 'success', 'user_id' => $request->user()->id ]); if ($recharge) { return response()->json(['message' => 'Carregamento, feito com Sucesso'], 200); } } //////// } } public function rechargeByReference2(Request $request) { // return $request->all(); foreach ($request->contentData as $requestData) { $imaliAccount = ImaliAccount::query()->where('reference', $requestData['payment_reference'])->first(); $transactionString = new TransactionGeneration(); if ($imaliAccount) { $user = ImaliAccount::query()->join('users', 'users.id', '=', 'imali_accounts.user_id') ->where('users.id', $imaliAccount->user_id) ->select('users.*') ->first(); $balanceActual = $imaliAccount->balance + $requestData['paid_amount']; $masterAccount = MasterAccount::find(2); $recharge = RechargeImaliAccount::create([ 'imali_account_id' => $imaliAccount->id, 'transaction_id' => $transactionString->generateTransaction(), 'amount' => $requestData['paid_amount'], 'bank_date' => $requestData['datetime_of_transaction'], 'account_reference' => $requestData['payment_reference'], 'last_balance' => $imaliAccount->balance, 'balance' => $balanceActual, 'recharge_way' => $requestData['terminal_locality'], 'estado' => 'sucesso', 'estado_color' => '#388E3C', 'master_account_id' => $masterAccount->id, 'content_id' => $requestData['content_id'] ]); $masterBalance = $masterAccount->balance + $requestData['paid_amount']; $masterAccount->update(['balance' => $masterBalance]); if ($recharge) { $imaliAccount->update(['balance' => $balanceActual]); $notification = array( 'icon' => 'ic_imali_logo_verde_01', // 'icon' => 'ic_i_mali_cover', 'title' => 'Carregamento ' . $recharge->amount . ' MT', 'body' => 'Parabéns, ' . ' carregaste com ' . $recharge->amount . ' MT ' . ' na sua conta ' . $imaliAccount->account_number, // 'click_action' => 'com.imali.payapp.payment_TRANSFER_DETAILS', 'click_action' => 'com.imali.payapp.payment_RECHARGE_DETAILS', // 'color' => '#008577' 'color' => '#ffffff' ); $data = array( 'transaction' => $recharge->transaction_id, 'name' => $user->name, 'amount' => (double)$recharge->amount, 'phone' => $user->phone, 'reference' => $imaliAccount->reference, 'data' => $recharge->created_at, 'estado' => $recharge->estado, 'route' => 'RECHARGE_DETAILS', 'recharge_way' => $recharge->recharge_way, 'terminal' => 'firebase' ); $this->pushNotifification($user->firebase_token, $notification, $data); $this->smsManager->sendSMSForUserRecharge($recharge); } // if ($recharge) { //// Mail::to($user->email)->send(new Carregamento($recharge)); // } // $log = new Record(); // $log->createLog([ // 'description' => $imaliAccount->account_number, // 'details' => $user->name . ' ' . $user->last_name, // 'operation' => 'Recharge by Reference', // 'status' => 'success', // 'user_id' => $request->user()->id // ]); if ($recharge) { // return response()->json(['message' => 'Carregamento, feito com Sucesso'], 200); } } else { // PendingRecharge::create([ // 'reference' => $requestData['payment_reference'], // 'amount' => $requestData['paid_amount'], // 'content_id' => $requestData['content_id'] // // 'content_id' => $request->content_id // ]); $recharge = RechargeImaliAccount::create([ 'imali_account_id' => 0, 'transaction_id' => $transactionString->generateTransaction(), 'amount' => $requestData['paid_amount'], 'account_reference' => $requestData['payment_reference'], 'bank_date' => $requestData['datetime_of_transaction'], 'last_balance' => 0, 'balance' => 0, 'recharge_way' => $requestData['terminal_locality'], 'estado' => 'falhou', 'estado_color' => '#388E3C', 'master_account_id' => 0, 'content_id' => $requestData['content_id'] ]); // return response()->json(['message' => 'Referencia inválida'], 400); } // $kyc = new Kyc(); //// $kyckCheck = $kyc->checkRecharge($request); // $kyckCheck = $kyc->checkRechargeByBank($requestData); // // if ($kyckCheck) { // return $kyckCheck; // } else { // // // } } return response()->json(['message' => 'Carregamento, feito com Sucesso'], 200); } public function rechargeAccount2(Request $request) { $transactionString = new TransactionGeneration(); $public_key = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmptSWqV7cGUUJJhUBxsMLonux24u+FoTlrb+4Kgc6092JIszmI1QUoMohaDDXSVueXx6IXwYGsjjWY32HGXj1iQhkALXfObJ4DqXn5h6E8y5/xQYNAyd5bpN5Z8r892B6toGzZQVB7qtebH4apDjmvTi5FGZVjVYxalyyQkj4uQbbRQjgCkubSi45Xl4CGtLqZztsKssWz3mcKncgTnq3DHGYYEYiKq0xIj100LGbnvNz20Sgqmw/cH+Bua4GJsWYLEqf/h/yiMgiBbxFxsnwZl0im5vXDlwKPw+QnO2fscDhxZFAwV06bgG0oEoWm9FnjMsfvwm0rUNYFlZ+TOtCEhmhtFp+Tsx9jPCuOd5h2emGdSKD8A6jtwhNa7oQ8RtLEEqwAn44orENa1ibOkxMiiiFpmmJkwgZPOG/zMCjXIrrhDWTDUOZaPx/lEQoInJoE2i43VN/HTGCCw8dKQAwg0jsEXau5ixD0GUothqvuX3B9taoeoFAIvUPEq35YulprMM7ThdKodSHvhnwKG82dCsodRwY428kg2xM/UjiTENog4B6zzZfPhMxFlOSFX4MnrqkAS+8Jamhy1GgoHkEMrsT5+/ofjCx0HjKbT5NuA2V/lmzgJLl3jIERadLzuTYnKGWxVJcGLkWXlEPYLbiaKzbJb2sYxt+Kt5OxQqC1MCAwEAAQ=="; $api_host = "api.sandbox.vm.co.mz"; $api_key = "40dtaa0qj1xcw1rwytyszgq83lp523m0"; $origin = "*"; $service_provider_code = "171717"; $config = new \abdulmueid\mpesa\Config($public_key, $api_host, $api_key, $origin, $service_provider_code, '', ''); $transaction = new \abdulmueid\mpesa\Transaction($config); $msisdn = '258' . $request->phone; $amount = $request->amount; $reference = 'T12344C'; // $third_party_reference = '111PA2D'; $third_party_reference = $transactionString->generateTransaction(); $user = User::query()->where('user_id', $request->user_id)->first(); $imaliAccount = ImaliAccount::query()->where('user_id', $user->id)->first(); if ($imaliAccount) { $payment = $transaction->payment($msisdn, $amount, $reference, $third_party_reference); if ($payment->getCode() == 'INS-0') { if ($imaliAccount) { $balanceActual = $imaliAccount->balance + $request->amount; $masterAccount = MasterAccount::find(1); $recharge = RechargeImaliAccount::create([ 'imali_account_id' => $imaliAccount->id, 'transaction_id' => $transactionString->generateTransaction(), 'amount' => $request->amount, 'last_balance' => $imaliAccount->balance, 'balance' => $balanceActual, 'recharge_way' => 'M-pesa' . $request->phone, 'estado' => 'sucesso', 'estado_color' => '#388E3C', 'master_account_id' => $masterAccount->id ]); $masterBalance = $masterAccount->balance + $request->amount; $masterAccount->update(['balance' => $masterBalance]); if ($recharge) { $imaliAccount->update(['balance' => $balanceActual]); $log = new Record(); $log->createLog([ 'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name, 'details' => 'Carregamento, feito com Sucesso', 'operation' => 'Recharge by M-pesa', 'status' => 'success', 'user_id' => $request->user()->id ]); return response()->json(['message' => 'Carregamento, feito com Sucesso', 'code' => ''], 200); } } } if ($payment->getCode() == 'INS-2006') { $log = new Record(); $log->createLog([ 'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name, 'details' => 'Saldo Insuficiente', 'operation' => 'Recharge by M-pesa', 'status' => 'Error', 'user_id' => $request->user()->id ]); return response()->json(['message' => 'Saldo Insuficiente'], 422); } if ($payment->getCode() == 'INS-9') { $log = new Record(); $log->createLog([ 'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name, 'details' => 'Excedeu o tempo limite de transacção', 'operation' => 'Recharge by M-pesa', 'status' => 'Error', 'user_id' => $request->user()->id ]); return response()->json(['message' => 'Excedeu o tempo limite de transacção'], 408); } if ($payment->getCode() == 'INS-9') { $log = new Record(); $log->createLog([ 'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name, 'details' => 'Valor inválido', 'operation' => 'Recharge by M-pesa', 'status' => 'Error', 'user_id' => $request->user()->id ]); return response()->json(['message' => 'Valor inválido'], 400); } if ($payment->getCode() == 'INS-995') { $log = new Record(); $log->createLog([ 'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name, 'details' => 'Conta Mpesa com Problemas', 'operation' => 'Recharge by M-pesa', 'status' => 'Error', 'user_id' => $request->user()->id ]); return response()->json(['message' => 'Conta Mpesa com Problemas'], 400); } if ($payment->getCode() == 'INS-996') { $log = new Record(); $log->createLog([ 'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name, 'details' => 'Este número nao tem conta Mpesa', 'operation' => 'Recharge by M-pesa', 'status' => 'Error', 'user_id' => $request->user()->id ]); return response()->json(['message' => 'Este número nao tem conta Mpesa'], 400); } } } public function rechargeAccount(Request $request) { $transactionString = new TransactionGeneration(); $public_key = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmptSWqV7cGUUJJhUBxsMLonux24u+FoTlrb+4Kgc6092JIszmI1QUoMohaDDXSVueXx6IXwYGsjjWY32HGXj1iQhkALXfObJ4DqXn5h6E8y5/xQYNAyd5bpN5Z8r892B6toGzZQVB7qtebH4apDjmvTi5FGZVjVYxalyyQkj4uQbbRQjgCkubSi45Xl4CGtLqZztsKssWz3mcKncgTnq3DHGYYEYiKq0xIj100LGbnvNz20Sgqmw/cH+Bua4GJsWYLEqf/h/yiMgiBbxFxsnwZl0im5vXDlwKPw+QnO2fscDhxZFAwV06bgG0oEoWm9FnjMsfvwm0rUNYFlZ+TOtCEhmhtFp+Tsx9jPCuOd5h2emGdSKD8A6jtwhNa7oQ8RtLEEqwAn44orENa1ibOkxMiiiFpmmJkwgZPOG/zMCjXIrrhDWTDUOZaPx/lEQoInJoE2i43VN/HTGCCw8dKQAwg0jsEXau5ixD0GUothqvuX3B9taoeoFAIvUPEq35YulprMM7ThdKodSHvhnwKG82dCsodRwY428kg2xM/UjiTENog4B6zzZfPhMxFlOSFX4MnrqkAS+8Jamhy1GgoHkEMrsT5+/ofjCx0HjKbT5NuA2V/lmzgJLl3jIERadLzuTYnKGWxVJcGLkWXlEPYLbiaKzbJb2sYxt+Kt5OxQqC1MCAwEAAQ=="; $api_host = "api.sandbox.vm.co.mz"; $api_key = "40dtaa0qj1xcw1rwytyszgq83lp523m0"; $origin = "*"; $service_provider_code = "171717"; $reference = 'T12344C'; $third_party_reference = $transactionString->generateTransaction(); $client = new Client([ 'apiKey' => $api_key, // API Key 'publicKey' => $public_key, // Public Key 'serviceProviderCode' => $service_provider_code // input_ServiceProviderCode ]); $paymentData = [ // 'from' => '+258845030902', // input_CustomerMSISDN 'from' => '258' . $request->phone, // input_CustomerMSISDN // 'from' => $request->phone, // input_CustomerMSISDN 'reference' => '111PA2D', // input_ThirdPartyReference 'transaction' => $third_party_reference, // input_TransactionReference 'amount' => $request->amount // input_Amount ]; $user = User::query()->where('user_id', $request->user_id)->first(); $imaliAccount = ImaliAccount::query()->where('user_id', $user->id)->first(); if ($imaliAccount) { // $payment = $transaction->payment($msisdn, $amount, $reference, $third_party_reference); // $results = $client->receive($paymentData); $results = $client->receive($paymentData); if ($results->success) { // Handle success // if ($result->getCode() == 'INS-0') { // return response()->json($result); if ($imaliAccount) { $balanceActual = $imaliAccount->balance + $request->amount; $masterAccount = MasterAccount::find(1); $recharge = RechargeImaliAccount::create([ 'imali_account_id' => $imaliAccount->id, 'transaction_id' => $transactionString->generateTransaction(), 'amount' => $request->amount, 'last_balance' => $imaliAccount->balance, 'balance' => $balanceActual, 'recharge_way' => 'M-pesa' . $request->phone, 'estado' => 'sucesso', 'estado_color' => '#388E3C', 'master_account_id' => $masterAccount->id ]); $masterBalance = $masterAccount->balance + $request->amount; $masterAccount->update(['balance' => $masterBalance]); if ($recharge) { $imaliAccount->update(['balance' => $balanceActual]); $log = new Record(); $log->createLog([ 'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name, 'details' => 'Carregamento, feito com Sucesso', 'operation' => 'Recharge by M-pesa', 'status' => 'success', 'user_id' => $request->user()->id ]); return response()->json(['message' => 'Carregamento, feito com Sucesso', 'code' => ''], 200)->header('Content-Type', 'application/json'); } } // } } else { // return response()->json($result); // Handle failure // if ($result->getCode() == 'INS-2006') { // // $log = new Record(); // $log->createLog([ // 'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name, // 'details' => 'Saldo Insuficiente', // 'operation' => 'Recharge by M-pesa', // 'status' => 'Error', // 'user_id' => $request->user()->id // ]); // // return response()->json(['message' => 'Saldo Insuficiente'], 422); // } // if ($result->getCode() == 'INS-9') { // // $log = new Record(); // $log->createLog([ // 'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name, // 'details' => 'Excedeu o tempo limite de transacção', // 'operation' => 'Recharge by M-pesa', // 'status' => 'Error', // 'user_id' => $request->user()->id // ]); // // return response()->json(['message' => 'Excedeu o tempo limite de transacção'], 408); // } // if ($result->getCode() == 'INS-9') { // // $log = new Record(); // $log->createLog([ // 'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name, // 'details' => 'Valor inválido', // 'operation' => 'Recharge by M-pesa', // 'status' => 'Error', // 'user_id' => $request->user()->id // ]); // // return response()->json(['message' => 'Valor inválido'], 400); // } // if ($result->getCode() == 'INS-995') { // // // $log = new Record(); // $log->createLog([ // 'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name, // 'details' => 'Conta Mpesa com Problemas', // 'operation' => 'Recharge by M-pesa', // 'status' => 'Error', // 'user_id' => $request->user()->id // ]); // // return response()->json(['message' => 'Conta Mpesa com Problemas'], 400); // } // if ($result->getCode() == 'INS-996') { // // $log = new Record(); // $log->createLog([ // 'description' => $imaliAccount->account_number . ' ' . $user->name . ' ' . $user->last_name, // 'details' => 'Este número nao tem conta Mpesa', // 'operation' => 'Recharge by M-pesa', // 'status' => 'Error', // 'user_id' => $request->user()->id // ]); // // return response()->json(['message' => 'Este número nao tem conta Mpesa'], 400); // } } } } public function bankConnections() { $banks = BankConection::all(); return response()->json(['data' => $banks], 200); } public function users() { $users = User::all(); return response()->json(['data' => $users], 200); } public function resendCode(Request $request) { $token = new GenerateToken(); $data = ['phone' => $request->phone, 'codigo' => $token->generatePhoneNumberCode()]; $this->smsManager->smsVerifyUser($data); $validate = PhoneValidation::query()->where('phone', $request->phone)->count(); if ($validate === 0) { $save = PhoneValidation::create([ 'phone' => $request->phone, 'contry_code' => $request->contry_code, 'expire_at' => now(), 'duration' => 5, 'codigo' => $data['codigo'], 'is_Validated' => 1 ]); if ($save) { $log = new Record(); $log->createLog([ 'description' => $request->phone . ' ' . $data['codigo'], 'details' => 'Código de Verificação enviado com sucesso!', 'operation' => 'Resend Verification code', 'status' => 'Success', 'user_id' => $request->user()->id ]); return response()->json(['message' => 'Código de Verificação enviado com sucesso!'], 200); } } else { $validate = PhoneValidation::query()->where('phone', $request->phone)->first(); $save = $validate->update(['codigo' => $data['codigo']]); if ($save) { $data = ['phone' => $request->phone, 'codigo' => $validate->codigo]; return response()->json(['message' => 'Código de Verificação reenviado com sucesso!', 'codigo' => $data['codigo'], 'phone' => $data['phone']], 200); } } } public function resendCodeOld(Request $request) { $token = new GenerateToken(); $validate = PhoneValidation::query()->where('phone', $request->phone)->count(); $phoneValidate = PhoneValidation::query()->where('phone', $request->phone)->first(); if ($validate === 0) { $data = ['phone' => $request->phone, 'codigo' => $token->generatePhoneNumberCode()]; $sms = new SendSMS(); $save = PhoneValidation::create([ 'phone' => $request->phone, 'expire_at' => now(), 'duration' => 5, 'codigo' => $data['codigo'], 'is_Validated' => 1 ]); $sent = $sms->verifyUser($data); if ($save) { $log = new Record(); $log->createLog([ 'description' => $request->phone . ' ' . $data['codigo'], 'details' => 'Código de Verificação enviado com sucesso!', 'operation' => 'Resend Verification code', 'status' => 'Success', 'user_id' => $request->user()->id ]); return response()->json(['message' => 'Código de Verificação enviado com sucesso!'], 200); } } else { $validate = PhoneValidation::query()->where('phone', $request->phone)->first(); // $save = $validate->update(['codigo' => $data['codigo']]); if ($validate) { $data = ['phone' => $request->phone, 'codigo' => $validate->phone]; $sms = new SendSMS(); $sms->verifyUser($data); return response()->json(['message' => 'Código de Verificação reenviado com sucesso!', 'codigo' => $data['codigo']], 200); } } } public function verifyUserNumber(Request $request) { // $firstReplace= str_replace(' ', '',$request->phone); // $request['phone'] = str_replace('-', '',$firstReplace); $this->validate($request, [ 'name' => 'required', 'phone' => 'required|unique:users|min:9', 'email' => 'required|email|unique:users,email', 'password' => 'required|min:8|confirmed', 'bi' => 'required|min:13' ], [ 'email.required' => 'O Campo Email é de carácter Obrigatório', 'email.unique' => 'Este Email já está em uso', 'phone.required' => 'O Número do celular é obrigatório', 'phone.unique' => 'O Número do celular já está em uso', 'phone.min' => 'O Campo Celular deve ter 9 dígitos', 'name.required' => 'O Campo Nome é obrigatório', 'bi.required' => 'O campo Bi é Obrigatório', // 'bi.min'=>'O campo Bi ter 13 dígitos', 'password.required' => 'O Campo Senha é obrigatório', 'password.confirmed' => 'Senhas incompatíveis', 'password.min' => 'A senha deve ter 8 digitos no mínimo' ]); $token = new GenerateToken(); $data = ['phone' => $request->phone, 'codigo' => $token->generatePhoneNumberCode()]; $this->smsManager->smsVerifyUser($data); $validate = PhoneValidation::query()->where('phone', '=', $request->phone)->count(); if ($validate === 0) { $save = PhoneValidation::create([ 'phone' => $request->phone, 'country_code' => $request->country_code, 'expire_at' => now(), 'duration' => 2, 'codigo' => $data['codigo'], 'is_Validated' => 1 ]); if ($save) { return response()->json(['message' => 'Codigo de Verificação enviado com sucesso!'], 200); } } else { $validate = PhoneValidation::query()->where('phone', $request->phone)->first(); $save = $validate->update(['codigo' => $data['codigo']]); if ($save) { return response()->json(['message' => 'Codigo de Verificação enviado com sucesso!', 'codigo' => $data['codigo']], 200); } } } public function checkCodigo(Request $request) { try { $validate = PhoneValidation::query()->where('phone', $request->phone)->where('codigo', $request->codigo)->count(); if ($validate > 0) { $log = new Record(); $log->createLog([ 'description' => $request->phone, 'details' => 'Celular Verificado com Successo!', 'operation' => 'Check Phone Validation', 'status' => 'Success', 'user_id' => 1 ]); return response()->json(['message' => 'Celular Verificado com Successo!'], 200); } else { $log = new Record(); $log->createLog([ 'description' => $request->phone, 'details' => 'Código inválido', 'operation' => 'Check Phone Validation', 'status' => 'Error', 'user_id' => 1 ]); return response()->json(['message' => 'Código inválido'], 400); } } catch (Exception $exception) { return response()->json($exception); } } public function getUsers() { return response()->json(['users' => User::all()]); } public function getImaliAccounts(Request $request) { $perPage=!!$request->input('per_page')?$request->input('per_page'):10; $orderType=$request->input('order_type') === 'ASC'?'ASC':'DESC'; $orderBy=!!$request->input('order_by') && $request->input('order_by')!=='null'?$request->input('order_by'):'imali_accounts.id'; $users = User::query()->join('imali_accounts', 'imali_accounts.user_id', '=', 'users.id') ->join('imali_account_configs', 'imali_account_configs.id', '=', 'imali_accounts.imali_account_config') ->select('imali_accounts.*', 'imali_account_configs.level', 'users.id','users.name','users.last_name','users.name','users.country_code','users.email','users.phone','users.status') ->orderBy($orderBy,$orderType)->paginate($perPage); $imali = $users->setCollection($users->getCollection() ->transform(function($item) { $item['last_recharge']=$item->imaliAccount->recharges()->orderBy('id','desc')->first(); $item['document']= $item->documents()->orderBy('id','desc')->first(); return $item; })); $imali->makeHidden([ 'password', 'pin', 'imali_account_config', 'profile', 'remember_token', 'firebase_token' ]); return response()->json($imali); } public function updateUserData(Request $request) { $user = $imali = ImaliAccount::query() ->join('users', 'users.id', '=', 'imali_accounts.user_id') ->join('imali_account_configs', 'imali_account_configs.id', '=', 'imali_accounts.imali_account_config') ->where('users.user_id', $request->user_id) ->first(); if ($user) { $u = User::find($user->id); $u->update([ 'name' => $request->name, 'last_name' => $request->last_name, 'profile' => $request->profile, 'status' => $request->status, 'birthday' => $request->birthday, 'bi' => $request->bi, ]); $kyc = ImaliAccount::query()->where('user_id', $user->id)->first(); if ($kyc) { $kyc->update([ 'imali_account_config' => $request->imali_account_config ]); } return response()->json(['message' => 'Dados do Cliente Actualizados com Sucesso!'], 200); } } public function updateUserStatus($account_number) { $imali = ImaliAccount::query()->where('account_number', $account_number)->first(); $user = User::findOrFail($imali->user_id); $user->status = !$user->status; $user->save(); return response()->json(['message' => 'Estado actualizado com sucesso!'], 200); } public function updateUserDataMobile(Request $request) { $user = $request->user(); if ($user) { $update = User::query() ->where('id', $user->id) ->update([ 'name' => $request->name, 'last_name' => $request->last_name, 'bi' => $request->bi, 'birthday' => $request->birthday, ]); if ($update) { return response()->json(['message' => 'Dados Actualizados com Sucesso'], 200); } } } public function changePassword(Request $request) { $this->validate($request, [ 'current_password' => ['required', new CurrentPassword()], // 'new_password' => 'required|min:8|confirmed', 'new_password' => ['required', 'min:8', 'confirmed'], 'new_password_confirmation' => 'required|min:8', ], [ 'current_password.required' => 'O Campo Senha Actual é Obrigatório', 'new_password.required' => 'O Campo Nova Senha é Obrigatório', 'new_password_confirmation.required' => 'O Campo Confirmar Senha é Obrigatório', 'new_password.confirmed' => 'Senhas incompatíveis', 'current_password.min' => 'A senha deve ter 8 digitos no mínimo', 'new_password.min' => 'A senha deve ter 8 digitos no mínimo', 'new_password_confirmation.min' => 'A senha deve ter 8 digitos no mínimo' ] ); if (Hash::check($request->current_password, $request->user()->password)) { $request->user()->update([ 'password' => bcrypt($request->new_password) ]); return response()->json(['message' => 'Senhas Compativeis'], 200); } else { return response()->json(['message' => 'Senha Antiga Inválida'], 404); } } public function uploadPhoto(Request $request) { return $request->all(); } public function disableUser($id) { $user = User::query()->where('user_id', $id)->first(); if ($user->status === 1) { $update = $user->update(['status' => 0]); return response()->json(['message' => 'Utilizador Bloqueado com Sucesso'], 200); } else { return response()->json(['message' => 'Utilizador Activo com Sucesso'], 200); } } public function generateAmount(Request $request) { $imali = ImaliAccount::query()->where('user_id', $request->user()->id)->first(); $save = AmountGenerate::create([ 'user_id' => $request->user()->id, 'transaction' => Uuid::generate()->string, 'amount' => $request->amount, 'account_number' => $imali->account_number, 'qrcode' => '', 'firebase_token' => $request->firebase_token ]); // $log = new Record(); // $log->createLog([ // 'description' => $save->account_number . ' ' . $save->amount . ' ' . $save->transaction, // 'details' => 'Codigo gerado com Sucesso', // 'operation' => 'Generate Amount to Receiver By Qrcode', // 'status' => 'Success', // 'user_id' => $request->user()->id // ]); return response()->json(['message' => 'Codigo gerado com Sucesso', 'transaction' => $save->transaction, 'account_number' => $save->account_number, 'amount' => $save->amount], 200); } public function getClientDataForPayment($transaction) { $client = AmountGenerate::query() ->join('users', 'users.id', '=', 'amount_generates.user_id') ->join('imali_accounts', 'imali_accounts.user_id', '=', 'amount_generates.user_id') ->where('amount_generates.transaction', $transaction) // ->select('amount_generates.amount','amount_generates.transaction', 'users.name', 'imali_accounts.account_number') ->select('amount_generates.amount', 'users.name', 'imali_accounts.account_number') // ->select('amount_generates.*', 'users.name', 'imali_accounts.account_number') ->first(); if ($client) { return response()->json($client, 200); } else { $user = ImaliAccount::query() ->join('users', 'users.id', '=', 'imali_accounts.user_id') // ->join('recharge_imali_accounts', 'recharge_imali_accounts.imali_account_id', '=', 'imali_accounts.id') ->where('imali_accounts.account_number', $transaction) ->select('users.name', 'imali_accounts.account_number') ->first(); return response()->json($user, 200); } } public function getClientAccount($aacount) { $client = AmountGenerate::query() ->join('users', 'users.id', '=', 'amount_generates.user_id') ->join('imali_accounts', 'imali_accounts.user_id', '=', 'amount_generates.user_id') ->where('amount_generates.transaction', $aacount) // ->select('amount_generates.amount','amount_generates.transaction', 'users.name', 'imali_accounts.account_number') ->select('amount_generates.amount', 'users.name', 'imali_accounts.account_number') // ->select('amount_generates.*', 'users.name', 'imali_accounts.account_number') ->first(); return response()->json($client, 200); } public function checkPin(Request $request) { $user = User::find($request->user()->id); if (Hash::check($request->pin, $user->pin)) { return response()->json(['message' => 'Pin Verificado'], 201); } else { return response()->json(['message' => 'Pin Incorrecto'], 400); } } public function getBalance(Request $request) { // return $request->all(); $imali = ImaliAccount::query() ->join('users', 'users.id', '=', 'imali_accounts.user_id') ->where('users.phone', $request->phone) ->first(); if ($imali) { return response()->json($imali); } else { return response()->json(['message' => 'Conta invalida']); } } public function updateFirebaseToken(Request $request) { } public function reverteTransaction(Request $request) { $transactionString = new TransactionGeneration(); $public_key = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmptSWqV7cGUUJJhUBxsMLonux24u+FoTlrb+4Kgc6092JIszmI1QUoMohaDDXSVueXx6IXwYGsjjWY32HGXj1iQhkALXfObJ4DqXn5h6E8y5/xQYNAyd5bpN5Z8r892B6toGzZQVB7qtebH4apDjmvTi5FGZVjVYxalyyQkj4uQbbRQjgCkubSi45Xl4CGtLqZztsKssWz3mcKncgTnq3DHGYYEYiKq0xIj100LGbnvNz20Sgqmw/cH+Bua4GJsWYLEqf/h/yiMgiBbxFxsnwZl0im5vXDlwKPw+QnO2fscDhxZFAwV06bgG0oEoWm9FnjMsfvwm0rUNYFlZ+TOtCEhmhtFp+Tsx9jPCuOd5h2emGdSKD8A6jtwhNa7oQ8RtLEEqwAn44orENa1ibOkxMiiiFpmmJkwgZPOG/zMCjXIrrhDWTDUOZaPx/lEQoInJoE2i43VN/HTGCCw8dKQAwg0jsEXau5ixD0GUothqvuX3B9taoeoFAIvUPEq35YulprMM7ThdKodSHvhnwKG82dCsodRwY428kg2xM/UjiTENog4B6zzZfPhMxFlOSFX4MnrqkAS+8Jamhy1GgoHkEMrsT5+/ofjCx0HjKbT5NuA2V/lmzgJLl3jIERadLzuTYnKGWxVJcGLkWXlEPYLbiaKzbJb2sYxt+Kt5OxQqC1MCAwEAAQ=="; $api_host = "api.sandbox.vm.co.mz"; $api_key = "40dtaa0qj1xcw1rwytyszgq83lp523m0"; $origin = "*"; $service_provider_code = "171717"; $reference = 'T12344C'; $client = new Client([ 'apiKey' => $api_key, // API Key 'publicKey' => $public_key, // Public Key 'serviceProviderCode' => $service_provider_code // input_ServiceProviderCode ]); $transaction = RechargeImaliAccount::query() ->where('id', $request->id) ->where('transaction_id', $request->transaction) ->where('imali_account_id', $request->imali_account_id) ->first(); $paymentData = [ 'reference' => 'T12344C', // input_ThirdPartyReference 'transaction' => $transaction->transaction_id, // input_TransactionReference 'amount' => $transaction->amount // input_Amount ]; $transactionString = new TransactionGeneration(); if ($transaction) { $results = $client->revert($paymentData); if ($results->success) { ReverteImaliAccount::create([ 'transaction' => $transactionString->generateTransaction(), 'user_id' => $request->user()->id, 'imali_account_id' => $transaction->imali_account_id, 'recharge_imali_account_id' => $transaction->id ]); return response()->json(['message' => 'Transacção revertida com Sucesso'], 200); } } } public function sendMoneyImaliMpesa(Request $request) { $transactionString = new TransactionGeneration(); $public_key = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmptSWqV7cGUUJJhUBxsMLonux24u+FoTlrb+4Kgc6092JIszmI1QUoMohaDDXSVueXx6IXwYGsjjWY32HGXj1iQhkALXfObJ4DqXn5h6E8y5/xQYNAyd5bpN5Z8r892B6toGzZQVB7qtebH4apDjmvTi5FGZVjVYxalyyQkj4uQbbRQjgCkubSi45Xl4CGtLqZztsKssWz3mcKncgTnq3DHGYYEYiKq0xIj100LGbnvNz20Sgqmw/cH+Bua4GJsWYLEqf/h/yiMgiBbxFxsnwZl0im5vXDlwKPw+QnO2fscDhxZFAwV06bgG0oEoWm9FnjMsfvwm0rUNYFlZ+TOtCEhmhtFp+Tsx9jPCuOd5h2emGdSKD8A6jtwhNa7oQ8RtLEEqwAn44orENa1ibOkxMiiiFpmmJkwgZPOG/zMCjXIrrhDWTDUOZaPx/lEQoInJoE2i43VN/HTGCCw8dKQAwg0jsEXau5ixD0GUothqvuX3B9taoeoFAIvUPEq35YulprMM7ThdKodSHvhnwKG82dCsodRwY428kg2xM/UjiTENog4B6zzZfPhMxFlOSFX4MnrqkAS+8Jamhy1GgoHkEMrsT5+/ofjCx0HjKbT5NuA2V/lmzgJLl3jIERadLzuTYnKGWxVJcGLkWXlEPYLbiaKzbJb2sYxt+Kt5OxQqC1MCAwEAAQ=="; $api_host = "api.sandbox.vm.co.mz"; $api_key = "40dtaa0qj1xcw1rwytyszgq83lp523m0"; $origin = "*"; $service_provider_code = "171717"; $reference = 'T12344C'; $third_party_reference = $transactionString->generateTransaction(); $client = new Client([ 'apiKey' => $api_key, // API Key 'publicKey' => $public_key, // Public Key 'serviceProviderCode' => $service_provider_code // input_ServiceProviderCode ]); $paymentData = [ 'to' => '258' . $request->phone, // input_CustomerMSISDN 'reference' => 'T12344C', // input_ThirdPartyReference 'transaction' => $third_party_reference, // input_TransactionReference 'amount' => $request->amount // input_Amount ]; $user = User::query()->where('user_id', $request->user_id)->first(); // $imaliAccount = ImaliAccount::query()->where('user_id', $user->id)->first(); $imaliAccount = ImaliAccount::query()->where('user_id', $request->user_id)->first(); $total = ($request->amount + $request->amount * 0.3); if ($imaliAccount->balance >= $total) { $results = $client->send($paymentData); if ($results->success) { SendMoneyImaliMpesa::create([ 'transaction' => $third_party_reference, 'fee' => ($request->amount * 0.3), 'fee_type' => '3%', 'amount' => $request->amount, 'imali_account' => $request->imali_account, 'admin_id' => $request->admin_id, 'user_id' => $request->user_id, 'phone' => $request->phone ]); // dd($results); return response()->json(['message' => 'Transacção ' . $results->data['transaction'] . ' efectuada com Sucesso'], 200); } } } public function sendMoneyB2B(Request $request) { $transactionString = new TransactionGeneration(); $public_key = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmptSWqV7cGUUJJhUBxsMLonux24u+FoTlrb+4Kgc6092JIszmI1QUoMohaDDXSVueXx6IXwYGsjjWY32HGXj1iQhkALXfObJ4DqXn5h6E8y5/xQYNAyd5bpN5Z8r892B6toGzZQVB7qtebH4apDjmvTi5FGZVjVYxalyyQkj4uQbbRQjgCkubSi45Xl4CGtLqZztsKssWz3mcKncgTnq3DHGYYEYiKq0xIj100LGbnvNz20Sgqmw/cH+Bua4GJsWYLEqf/h/yiMgiBbxFxsnwZl0im5vXDlwKPw+QnO2fscDhxZFAwV06bgG0oEoWm9FnjMsfvwm0rUNYFlZ+TOtCEhmhtFp+Tsx9jPCuOd5h2emGdSKD8A6jtwhNa7oQ8RtLEEqwAn44orENa1ibOkxMiiiFpmmJkwgZPOG/zMCjXIrrhDWTDUOZaPx/lEQoInJoE2i43VN/HTGCCw8dKQAwg0jsEXau5ixD0GUothqvuX3B9taoeoFAIvUPEq35YulprMM7ThdKodSHvhnwKG82dCsodRwY428kg2xM/UjiTENog4B6zzZfPhMxFlOSFX4MnrqkAS+8Jamhy1GgoHkEMrsT5+/ofjCx0HjKbT5NuA2V/lmzgJLl3jIERadLzuTYnKGWxVJcGLkWXlEPYLbiaKzbJb2sYxt+Kt5OxQqC1MCAwEAAQ=="; $api_host = "api.sandbox.vm.co.mz"; $api_key = "40dtaa0qj1xcw1rwytyszgq83lp523m0"; $origin = "*"; $service_provider_code = "171717"; $reference = 'T12344C'; $third_party_reference = $transactionString->generateTransaction(); $client = new Client([ 'apiKey' => $api_key, // API Key 'publicKey' => $public_key, // Public Key 'serviceProviderCode' => $service_provider_code // input_ServiceProviderCode ]); // 979797 $paymentData = [ 'to' => $request->entity, // input_ReceiverPartyCode 'reference' => '111PA2D', // input_ThirdPartyReference 'transaction' => $third_party_reference, // input_TransactionReference 'amount' => $request->amount // input_Amount ]; $results = $client->send($paymentData); if ($results->success) { SendMoneyB2B::create([ 'entity' => $request->entity, 'amount' => $request->amount, 'admin_id' => $request->user()->id, 'transaction' => $third_party_reference, ]); } return response()->json(['message' => 'Transacção efectuada com Sucesso'], 200); } public function sendSMS(Request $request) { $data = [$request->phone]; $sms = new SendSMS(); $sent = $sms->sendMessageTest($data); return response($sent); } public function getContacts() { $contacts = User::query()->value('phone'); return response()->json(['data' => $contacts]); } // NOVO CODIGO UPLOAD IMAGE # actualizar no server public function imageCompress($image, $newImageName, $imgDefaultRatio){ $image = \Image::make(file_get_contents($image)); $image->save($this->storagePath.'/'.$newImageName, $imgDefaultRatio); } #actualizar no server public function imageUpload($image, $newImageName){ $image->move($this->storagePath, $newImageName); } # actualizar no server public function generateImageUrl(Request $request,$imageAttr){ if($request->hasFile($imageAttr) && $request->file($imageAttr)->isValid()){ // Validar imagem $this->validate($request, [ $imageAttr => 'mimes:jpeg,jpg,png|max:4096' ], [ 'photo.required' => 'O campo photo é Obrigatório', 'photo.mimes' => 'Formato de imagem invalido, formatos permitidos jpeg,jpg,png', 'photo.max' => 'O tamanho de imagem permitido somente abaixo de 4 MB', ]); //fazer o upload $image=$request[$imageAttr]; $newImageName=time().$image->getClientOriginalName(); //verificar size $imageSizeMB = round($request->file($imageAttr)->getSize()/(1024*1024),2); // Diminuir tamanho.. if($imageSizeMB >= 1){ $imgDefaultRatio = 65; if($imageSizeMB >= 3){ $imgDefaultRatio = 35; } //comprimir e fazer upload $this->imageCompress($image, $newImageName, $imgDefaultRatio); } else { $this->imageUpload($image, $newImageName); } return $this->baseUrl.$newImageName; } else { $exploded = explode(',', $request[$imageAttr]); $decoded = base64_decode($exploded[$this->is_string_encoded($request[$imageAttr])?0:1],True); $f = finfo_open(); $mime_type = finfo_buffer($f, $decoded, FILEINFO_MIME_TYPE); $valiExtension = ['jpeg', 'jpg', 'png']; $imageExtention = substr($mime_type, 6, strlen($mime_type)); if(!in_array($imageExtention, $valiExtension)) return response()->json(['message'=>"Formato de imagem invalido, formatos permitidos jpeg,jpg,png"], 400); if($this->getImageSizeMB($decoded) > 4 ) return response()->json(['message'=>"O tamanho de imagem permitido somente abaixo de 4 MB"], 400); // if (base64_encode($decoded) !== $exploded[$this->is_string_encoded($request[$imageAttr])?0:1]) return response()->json(['message' => 'Imagem invalida.'],400); //faz o upload temporario no storage - by Rodrigues Mafumo $tempFileName = $imageAttr.'.jpg'; if(Storage::put($tempFileName, $decoded)){ $path = storage_path('app/').$tempFileName; $tempFile = new \Symfony\Component\HttpFoundation\File\File($path); $file = UploadedFile::createFromBase(new UploadedFile($tempFile->getPathname(),$tempFileName,$tempFile->getMimeType(),null,true)); $newRequest = new Request(); $newRequest->files->set($imageAttr,$file); return $this->generateImageUrl($newRequest,$imageAttr); } } } #server private function getImageSizeMB($imagebase64){ $size_in_bytes = (int) (strlen(rtrim($imagebase64, '=')) * 1); $size_in_kb = $size_in_bytes / 1024; $size_in_mb = round($size_in_kb / 1024,2); return $size_in_mb; } #server public function updateAvatar(Request $request){ $user = User::find($request->user()->id); $posicao = strpos($user->photo, 'avatar') + 7; //? Retorna a posicao do avatar $imageName = substr($user->photo, $posicao, strlen($user->photo)); File::delete(public_path('/images/avatar/'.$imageName)); $photo = $this->generateImageUrl($request,'photo'); if(!is_string($photo)) return $photo; $user->photo = $photo; $user->update(); return response()->json(['message' => 'Avatar Actualizado com Sucesso']); } #server // Check if there are valid base64 characters function is_string_encoded($s){ return !startsWith("data:image/", $s); } //FIM UPLOAD IMAGE public function getMyCredelec(Request $request) { $credelec = Credelec::query() ->where('user_id', $request->user()->id) ->orderByDesc('created_at') ->get(); return response()->json(['data' => $credelec]); } public function getMyWater(Request $request) { $credelec = Water::query() ->where('user_id', $request->user()->id) ->orderByDesc('created_at') ->get(); return response()->json(['data' => $credelec]); } public function pushNotifification($token, $notification = array(), $data = array()) { $apiKey = 'AAAA8zVzEPQ:APA91bHl_DXB6UGb_6gZlmFnaLTQoANtX_OBjvl3nOy2bSlnFhxedvk6EhGj7cZoIvmlbKeCnqGxXbuyMH_rEPuhRXvuitXzo6Pfl2TMXLar1PlifXqEhYq6tS55UMrY2Kffzj-P_UH-'; $fields = array('to' => $token, 'notification' => $notification, 'data' => $data); $headers = array('Authorization: key=' . $apiKey, 'Content-Type: application/json'); $url = 'https://fcm.googleapis.com/fcm/send'; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($fields)); $result = curl_exec($curl); curl_close($curl); return json_decode($result, true); } //? Check User Name public function checkUserName(Request $request){ $regex = "/^[a-zA-Z0-9]+(_{0,1})[a-zA-Z0-9]*$/"; if(!preg_match($regex, $request->username)) return response()->json(['message'=> 'Username inválido, caracteres permitidos [ a-z ou A-Z ou 0-9 ou _ ]'], 400); $user = User::query()->where('username', $request->username)->first(); if($user) return response()->json(['message'=> 'Username já esta em uso'], 409); return response()->json(['message'=> 'Username disponivel'], 200); } //? Check Phone public function checkUserPhone(Request $request){ // $regex = "/^[0-9]+$/"; $regex = "/^(82|83|84|85|86|87)+[0-9]{7,7}$/"; if(!preg_match($regex, $request->phone)) return response()->json(['message'=> 'Numero de telefone inválido'], 400); $user = User::query()->where('phone', $request->phone)->first(); if($user) return response()->json(['message'=> 'Numero de telefone já esta em uso'], 409); return response()->json(['message'=> 'Numero de telefone disponivel'], 200); } //? Check Email public function checkUserEmail(Request $request){ $this->validate($request, [ 'email' => 'required' ], [ 'email.required' => 'O campo email é Obrigatório', ]); // $regex = "/^[a-zA-Z0-9]+(_{0,1})[a-zA-Z0-9]*$/"; // $regex = "/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/"; $regex = "/^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i"; if(!preg_match($regex, $request->email)) return response()->json(['message'=> 'Email inválido'], 400); $user = User::query()->where('email', $request->email)->first(); if($user) return response()->json(['message'=> 'Email já esta em uso'], 409); return response()->json(['message'=> 'Email disponivel'], 200); } //? Update Username public function updateUsername(Request $request) { // Validar imagem $this->validate($request, [ 'username' => 'required|max:15' ], [ 'username.required' => 'O campo username é obrigatório', ]); $regex = "/^[a-zA-Z0-9]+(_{0,1})[a-zA-Z0-9]*$/"; if(!preg_match($regex, $request->username)) return response()->json(['message'=> 'Username inválido, caracteres permitidos [ a-z ou A-Z ou 0-9 ou _ ]'], 400); $user = User::query()->where('username', $request->username)->first(); if($user) return response()->json(['message'=> 'Username já esta em uso'], 409); // return response()->json(['message'=> 'Username disponivel'], 200); $user = $request->user(); if ($user) { $update = User::query() ->where('id', $user->id) ->update([ 'username' => $request->username ]); if ($update) { return response()->json(['message' => 'Username actualizado com Sucesso'], 200); } } } public function walletCSV(){ return Excel::download(new Wallet, 'wallet.csv'); } public function createWithDrawalls(Request $request){ $this->validate($request, [ 'account_type' => 'required', 'amount' => 'required', // 'fee' => 'required', 'description' => 'required', 'phone' => 'required', // 'nib' => 'required', 'wallets_id' => 'required', // 'total' => 'required', 'transaction_id' => 'required', 'commission' => 'required', ], ); $imali2 = ImaliAccount::query()->where('user_id', auth('api')->user()->id)->first(); $imali = ImaliAccount::query()->where('user_id', auth('api')->user()->id)->first(); $wallets = Wallet::query() ->select('wallets.*') ->get(); $walletsFee = WalletFee::query() ->where('wallets_id', $request->wallets_id) ->where('min_amount', '<=', $request->amount) ->where('max_amount', '>=', $request->amount) ->first(); if(!$walletsFee) return response()->json(['message' => 'Montante invalido'], 400); // return $walletsFee; $total = $request->amount + $walletsFee->fee; $imali->balance = $imali->balance - $total; $imali->captive_balance = $total; $imali->update(); $account_number = 0; if($request->account_type === 'client'){ $account_number = ImaliAccount::query() ->where('imali_accounts.user_id', auth('api')->user()->id) ->select('imali_accounts.balance', 'imali_accounts.account_number', 'imali_accounts.user_id') ->first()->account_number; } else { $account_number = Store::query() ->where('stores.id', auth('store-api')->user()->id) ->select('stores.account_number') ->first()->account_number; } $withdrawalls = WithdrawalsRequest::create([ 'imali_account' => $account_number, // 'account_type' => $request->account_type, 'amount' => $request->amount, 'fee' => $walletsFee->fee, 'description' => $request->description, 'phone' => $request->phone, 'nib' => $request->nib, 'wallets_id' => $request->wallets_id, 'status' => 'new', 'old_balance' => $imali2->balance, 'new_balance' => $imali->balance, 'total' => $total, 'transaction_id' => $request->transaction_id, 'commission' => $request->commission, 'user_id' => $imali->user_id, 'imali_account_id' => $imali->id ]); //? -----------------INICIO--------------------- $data = new \App\Exports\WalletExport(); $date = date('Y') . date('m') . date('d'); $hours = date('H') . date('i') . date('s'); $fileName = "Transac_iMali_". $date . "-" . $hours . '.csv'; file_put_contents(storage_path('/app/template/'.$fileName),file_get_contents(storage_path('/app/template/template.csv'))); $file = fopen(storage_path('/app/template/'.$fileName), 'a') or die('unable to open file'); foreach ($data->collection() as $key => $value) { $text = $value['value'.$key]."\n"; fwrite($file, $text); } fclose($file); rename(storage_path('/app/template/'.$fileName), storage_path('/app/downloads/'.$fileName)); $filePath = "/downloads/".$fileName; $uploadPath = storage_path('app'.$filePath); if(count($data->collection()) === 0) return print("No data found!"); $filePath=str_replace('\\','/',$uploadPath); //ENCRIPTAR FICHEIRO $commands = explode(",","gpg --homedir /home/paytek/.gnupg --recipient lourino.junior@mozabanco.co.mz --encrypt ". $filePath. ","."mv ".$filePath.".gpg"." /var/sftp/uploads_mozabanco/imali_transac_files/".$fileName.".gpg"); foreach($commands AS $command) { exec($command,$output,$returnDir); if ($returnDir === 0) { echo 'Command executed successfully!'; } else { echo 'Command execution failed.'; } } //? actualizar os dados para pending.. foreach ($data->collection() as $key => $value) { $transacData = explode(",",$value['value'.$key]); $phoneOrnib=$transacData[0]; $phoneOrnibLength = strlen($phoneOrnib); if($phoneOrnibLength == 9){ \App\WithdrawalsRequest::query() ->where('phone', $phoneOrnib) ->where('status', 'new') ->update(['status'=>'pending']); }else if($phoneOrnibLength == 21){ \App\WithdrawalsRequest::query() ->where('nib', $phoneOrnib) ->where('status', 'new') ->update(['status'=>'pending']); } } // return "Done."; //? ---------------- -FIM--------------------- if($withdrawalls){ return response()->json(['message' => 'Transferencia registada com sucesso!'], 200); } // else { // return response()->json(['message' => 'Erro...'], 400); // } } }