• File: BimController.php
  • Full Path: /var/www/imaliapi/app/Http/Controllers/Partner/BimController.php
  • Date Modified: 04/15/2024 8:53 PM
  • File size: 7.94 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php

namespace App\Http\Controllers\Partner;

use App\Bank\MasterAccount;
use App\Classes\Kyc;
use App\Classes\Record;
use App\Classes\SendSMS;
use App\Classes\TransactionGeneration;
use App\Http\Controllers\Controller;
use App\Imali\ImaliAccount;
use App\Imali\RechargeImaliAccount;
use Illuminate\Http\Request;

class BimController extends Controller
{
    public function verificarEntidadeReferencia(Request $request)
    {
        $this->validate($request, [
            'entity' => 'required',
            'reference' => 'required',
            'apiKey' => 'required',
            'amount' => 'required'
//            'amount' => 'required',
//            'transaction_id' => 'required',
        ], [
            'entity.required' => 'O Campo entity é de carácter Obrigatório',
            'reference.required' => 'Referencia obrigatoria',
            'apiKey.required' => 'Chave da api obrigatoria',
            'amount.required' => 'Montante necessário',
//            'transaction_id.required' => 'Identificador da transacção necessária',
        ]);

        $kyc = new Kyc();

        $result = $kyc->checkEntidadeReferencia($request);

        if ($result) {
            return $result;
        } else {
            return response()->json(['msg' => 'Validacao efectuada com Sucesso', 'msgtype' => 'S', 'msgid' => 'S001', 'estado' => 'P002', 'valorTotal' => $request->amount, 'dataDoc'=> date('Y/m/d')], 200);
        }

    }

    public function makeRecharge(Request $request)
    {

        $this->validate($request, [
            'entity' => 'required',
            'reference' => 'required',
            'apiKey' => 'required',
            'amount' => 'required',
            'transaction_id' => 'required',
        ], [
            'entity.required' => 'O Campo entity é de carácter Obrigatório',
            'reference.required' => 'Referencia obrigatoria',
            'amount.required' => 'Montante necessário',
            'transaction_id.required' => 'Identificador da transacção necessária',
            'apiKey.required' => 'Api Key necessária',
        ]);

        $kyc = new Kyc();

        $result = $kyc->checkEntidadeReferencia($request);

        if ($result) {
            return $result;
        } else {

            $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)/100;

                    $masterAccount = MasterAccount::find(2);
                    $recharge = RechargeImaliAccount::create([
                        'imali_account_id' => $imaliAccount->id,
                        'transaction_id' => $transactionString->generateTransaction(),
                        'amount' => $request->amount/100,
                        'last_balance' => $imaliAccount->balance,
                        'balance' => $balanceActual,
                        'recharge_way' => 'Banco',
//                    'recharge_way' => 'Banco Referencia' . $imaliAccount->reference,
                        'estado' => 'sucesso',
                        'estado_color' => '#388E3C',
                        'master_account_id' => $masterAccount->id,
                        'data_partner' => $request->partner_date,
                        'reference_partner' => $request->transaction_id,
                        'reference_doc_partner' => $request->partner_reference_doc
                    ]);

                    $masterBalance = $masterAccount->balance + $request->amount/100;

                    $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_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,
			    'route' => 'RECHARGE_DETAILS',
                            'terminal' => 'firebase'
                        );

                        $this->pushNotifification($user->firebase_token, $notification, $data);
                        $sms->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' => 1
                    ]);

                    if ($recharge) {
//                        return response()->json(['message' => 'Carregamento, feito com Sucesso'], 200);
                        return response()->json(['msg' => 'Validacao efectuada com Sucesso', 'msgtype' => 'S', 'msgid' => 'S001',
                            'referenciarecibo' => $recharge->transaction_id, 'data' => $recharge->created_at->format('Y/m/d')], 200);
                    }
                }
            }

//            return response()->json(['msg' => 'Validacao efectuada com Sucesso', 'msgtype' => 'S', 'msgid' => 'S001'], 200);
        }
    }

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

    }
}