<?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\Record; use App\Classes\SendSMS; use App\Classes\SendSMSSislog; 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\Log; use App\Mail\Carregamento; use App\PendingRecharge; use App\PhoneValidation; use App\PurchaseVoucher; use App\ReverteImaliAccount; use App\Rules\SamePassword; use App\SendMoneyB2B; use App\SendMoneyImaliMpesa; use App\TransferHistory; use App\User; use App\Water; use Carbon\Carbon; use Illuminate\Http\Request; use abdulmueid\mpesa\interfaces\ConfigInterface; use abdulmueid\mpesa\interfaces\TransactionInterface; use abdulmueid\mpesa\interfaces\TransactionResponseInterface; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Mail; use Illuminate\Support\Str; use Webpatser\Uuid\Uuid; use Paymentsds\MPesa\Client; use DB; class UserController extends Controller { protected SmsManager $smsManager; public function __construct() { $this->smsManager = new SmsManager(); } 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.*') ->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(), '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) { $sms = new SendSMSSislog(); $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, 'amount' => (double)$recharge->amount, 'phone' => $user->phone, 'reference' => $imaliAccount->reference, 'data' => $recharge->created_at, 'estado' => $recharge->estado, 'recharge_way' => $recharge->recharge_way, 'terminal' => 'firebase' ); $this->pushNotifification($user->firebase_token, $notification, $data); $this->smsManager->sendSMSForUserRecharge($recharge); // $sms->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(); // if ($imaliAccount) { // // } else { // return response()->json(['message' => 'Referencia Inválida'], 400); // } if ($imaliAccount) { $transactionString = new TransactionGeneration(); $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'], 'last_balance' => $imaliAccount->balance, 'balance' => $balanceActual, 'recharge_way' => 'Banco', '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) { $sms = new SendSMS(); $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, 'recharge_way' => $recharge->recharge_way, 'terminal' => 'firebase' ); $this->pushNotifification($user->firebase_token, $notification, $data); $sms->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 ]); // 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(); $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() { // $imali = ImaliAccount::query() // ->join('users', 'users.id', '=', 'imali_accounts.user_id') // ->join('imali_account_configs', 'imali_account_configs.id', '=', 'imali_accounts.imali_account_config') // ->leftJoin('user_documents', 'user_documents.user_id', '=', 'imali_accounts.user_id') //// ->where('user_documents.status', 'actualizado') //// ->leftJoin('recharge_imali_accounts', 'recharge_imali_accounts.imali_account_id', '=', 'imali_accounts.id') // ->select('imali_accounts.*', 'imali_account_configs.level', 'users.*', // 'user_documents.image_front', 'user_documents.image_back', 'user_documents.image_selfie', 'user_documents.status as document_status', 'user_documents.message as document_message', // 'user_documents.fathers_name', 'user_documents.mothers_name', 'user_documents.issue_date', 'user_documents.expiration_date', 'user_documents.document_type', 'user_documents.issuing_place', // 'user_documents.document_number', "user_documents.nationality", 'user_documents.place_of_birth', 'user_documents.address1', 'user_documents.address2', 'user_documents.marital_status', // 'user_documents.sex', 'user_documents.birthdate as document_birthdate', 'user_documents.height', 'user_documents.created_at as document_created_at', 'user_documents.updated_at as document_updated_at') // ->paginate(10); $imali = User::query() ->join('imali_accounts', 'imali_accounts.user_id', '=', 'users.id') ->join('imali_account_configs', 'imali_account_configs.id', '=', 'imali_accounts.imali_account_config') ->leftJoin('user_documents', 'user_documents.id', '=', 'users.document_id') // ->where('user_documents.status', 'actualizado') // ->leftJoin('recharge_imali_accounts', 'recharge_imali_accounts.imali_account_id', '=', 'imali_accounts.id') ->select('imali_accounts.*', 'imali_account_configs.level', 'users.*', 'user_documents.image_front', 'user_documents.image_back', 'user_documents.image_selfie', 'user_documents.status as document_status', 'user_documents.message as document_message', 'user_documents.fathers_name', 'user_documents.mothers_name', 'user_documents.issue_date', 'user_documents.expiration_date', 'user_documents.document_type', 'user_documents.issuing_place', 'user_documents.document_number', "user_documents.nationality", 'user_documents.place_of_birth', 'user_documents.address1', 'user_documents.address2', 'user_documents.marital_status', 'user_documents.sex', 'user_documents.birthdate as document_birthdate', 'user_documents.height', 'user_documents.created_at as document_created_at', 'user_documents.updated_at as document_updated_at') ->paginate(10); 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 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]); } public function updateAvatar(Request $request) { $user = User::find($request->user()->id); if ($request->photo != null) { $exploded = explode(',', $request->photo); $decoded = base64_decode($exploded[0]); // if (Str::contains($exploded[0], 'jpeg')) { if (Str::contains($exploded[0], 'jpeg')) { $extention = 'jpg'; } else { $extention = 'png'; } $imageName = Str::random() . $user->id . '.' . $extention; $updateUser = $user->update([ // 'photo' => 'http://160.242.36.118:81/imaliapitest/public/images/avatar/' . $imageName // 'photo' => 'http://160.242.35.226/imaliapi/public/images/avatar/' . $imageName 'photo' => url('/') . '/images/avatar/' . $imageName ]); if ($updateUser) { $path = public_path() . '/images/avatar/' . $imageName; file_put_contents($path, $decoded); } } // return response()->json(['message' => 'Avatar Actualizado com Sucesso', 'photo' => $updateUser->photo]); return response()->json(['message' => 'Avatar Actualizado com Sucesso']); } 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); } }