<?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);
}
}